/*
* @Ch11DigitRecog.java
* @Version 1.0 2010.02.21
* @Author Xie-Hua Sun
*/
package Chapters;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
class Ch11DigitRecog extends JFrame implements ActionListener
{
int model, //数字代号
type, //算法型号,0:模板匹配和Bayes,1:LMSE和奖惩算法
m_num = 0;
int count;
int[][][] sample;
double[][][] Dsample;
boolean isChooseAlg, //算法选择标志
isSaved; //数据文件存储标志
String algName;
public Ch11DigitRecog()
{
setTitle("数字图像处理-Java编程与实验 第11章 模式识别");
sample = new int[10][2][25];
Dsample = new double[10][2][25];
count = 0;
model = 0;
isChooseAlg = false;
setMenu();
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
if(isSaved == false)
if(check() == 0)
save();
System.exit(0);
}
});
setSize(368,430);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == recognize) //识别
{
if(type == 0)
result.setText(" "+ recognize());
else if(type == 1)
result.setText(" "+ TwoValueBayes());
else if(type == 2)
result.setText(" "+ LMSE());
else if(type == 3)
result.setText(" "+ Reward_Punish());
train.setEnabled(false);
num.setEnabled(false);
inform.setText("使用按钮清除可擦除数字");
}
else if(e.getSource() == clear)
clearall();
else if(e.getSource() == train) //训练
{
if(type == 0 ||type == 1)
{
int[] tem = character();
for(int j = 0; j < 25; j++)
sample[model][m_num][j] = tem[j];
inform.setText("数字 "+model+" 的第 "+(m_num+1)+
" 个样本已完成训练.\n"+
"每个数字输入两个样本.");
m_num++;
m_num = m_num%2;
if(model == 9)
recognize.setEnabled(true);
clearall();
}
else
{
double[] dtem = CHARACTER();
for(int j = 0; j < 25; j++)
Dsample[model][m_num][j] = dtem[j];
inform.setText("数字 "+model+" 的第 "+(m_num+1)+
" 个样本已完成训练.\n"+
"每个数字输入两个样本.");
m_num++;
m_num = m_num%2;
if(model == 9)
recognize.setEnabled(true);
clearall();
}
}
else if(e.getSource() == news) //新建样本
{
if(isChooseAlg)
{
inform.setText("按下鼠标左键并拖动, 在右边输入板中手写数字,"+
"\n"+"依次输入0 - 9数字样本");
recognize.setEnabled(false);
alg.setEditable(false);
train.setEnabled(true);
num.setEnabled(true);
clear.setEnabled(true);
isSaved = false;
}
else
JOptionPane.showMessageDialog(null, "请先选择识别算法!");
}
else if(e.getSource() == save) //保存样本
save();
else if(e.getSource() == load) //载入样本
{
if(isChooseAlg)
{
load();
isSaved = true;
alg.setEnabled(false);
num.setEnabled(false);
inform.setText("按下鼠标左键并拖动, 在右边输入板中手写数字");
}
else
JOptionPane.showMessageDialog(null, "请先选择识别算法!");
}
else if(e.getSource() == renew) //更改算法,初始化
{
count = 0;
model = 0;
isChooseAlg = false;
alg.setEnabled(true);
recognize.setEnabled(false);
clear.setEnabled(false);
train.setEnabled(false);
num.setEnabled(false);
}
else if(e.getSource() == alg) //算法选择框
{
algName = (String)alg.getSelectedItem();
if(algName.equals("模板匹配算法"))
type = 0;
else if(algName.equals("Bayes分类器"))
type = 1;
else if(algName.equals("LMSE"))
type = 2;
else
type = 3;
isChooseAlg = true;
}
else if(e.getSource() == num) //训练选择框
model = Integer.parseInt((String)num.getSelectedItem());
else if(e.getSource() == quit)
{
if(isSaved == false)
if(check() == 0)
save();
System.exit(0);
}
}
//标准化,将输入的数字缩放到5X5标准大小
int[] character()
{
int minx = 1000, miny = 1000,
maxx = 0, maxy = 0;
int ti, tj;
int[] chr = new int[25];
int[][] temp = can.getXY();
//分别计算最小和最大的x[i],y[i]
for(int i = 0; i < count; i++)
{
if(temp[0][i] == -1) continue;
if(temp[0][i] < minx) minx = temp[0][i];
if(temp[1][i] < miny) miny = temp[1][i];
if(temp[0][i] > maxx) maxx = temp[0][i];
if(temp[1][i] > maxy) maxy = temp[1][i];
}
int xlen = maxx - minx;
int ylen = maxy - miny;
//按比例缩放到标准大小.并计算row[i],col[i]
for(int i = 0; i < count; i++)
{
if(temp[0][i] == -1) continue;
ti = (temp[1][i]-miny)*5/ylen;
tj = (temp[0][i]-minx)*5/xlen;
if(ti == 5) ti = 4;
if(tj == 5) tj = 4;
chr[ti*5+tj]++;
}
return chr;
}
//标准化,将输入的数字缩放到5X5标准大小
public double[] CHARACTER()
{
int minx = 1000, miny = 1000,
maxx = 0, maxy = 0;
int ti, tj;
int[] chr = new int[25];
double[] t = new double[25];
int[][] temp = can.getXY();
//分别计算最小和最大的x[i],y[i]
for(int i = 0; i < count; i++)
{
if(temp[0][i] == -1) continue;
if(temp[0][i] < minx) minx = temp[0][i];
if(temp[1][i] < miny) miny = temp[1][i];
if(temp[0][i] > maxx) maxx = temp[0][i];
if(temp[1][i] > maxy) maxy = temp[1][i];
}
int xlen = maxx - minx;
int ylen = maxy - miny;
//按比例缩放到标准大小.并计算row[i],col[i]
for(int i = 0; i < count; i++)
{
if(temp[0][i] == -1) continue;
ti = (temp[1][i]-miny)*5/ylen;
tj = (temp[0][i]-minx)*5/xlen;
if(ti == 5) ti = 4;
if(tj == 5) tj = 4;
chr[ti*5+tj]++;
}
int w = xlen/5;
int h = ylen/5;
for(int i = 0; i < 5; i++)
for(int j = 0; j < 5; j++)
t[i*5+j] = chr[i*5+j]*7.0/(w*h);
return t;
}
int recognize()
{
int[][] distance = new int[10][2];
int[] tem = character();
int n = 0;
for(int k = 0; k < 10; k++)
{
for(int i = 0; i < 2; i++)
{
distance[k][i] = 0;
for(int j = 0; j < 25; j++)
distance[k][i] += Math.abs
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
数字图像处理 编程实现java源码 (191个子文件)
Lena.BMP 65KB
骨架提取后.bmp 65KB
rect.bmp 30KB
Ch11DigitRecog.class 16KB
Ch6ImageEnhance.class 13KB
Ch10ImageMorph.class 13KB
Ch3Elements.class 12KB
Ch14ImageCipher.class 12KB
Ch15ImageWatermark.class 12KB
Ch4GeomTrans.class 12KB
Ch8ImageSegment.class 10KB
Ch1Introduction.class 9KB
Ch5ImageTrans.class 9KB
Ch12ImageCompress.class 9KB
Ch9ImageAnalyse.class 8KB
Ch13FracImageCompress.class 7KB
Ch2Digitization.class 6KB
Ch7ImageRestore.class 5KB
Ch11DigitRecog$myCanvas.class 2KB
Ch11DigitRecog$1.class 819B
Ch13FracImageCompress$1.class 748B
Ch15ImageWatermark$1.class 730B
Ch12ImageCompress$1.class 724B
Ch9ImageAnalyse$1.class 712B
Ch8ImageSegment$1.class 712B
Ch1Introduction$1.class 712B
Ch14ImageCipher$1.class 712B
Ch7ImageRestore$1.class 712B
Ch2Digitization$1.class 712B
Ch6ImageEnhance$1.class 712B
Ch10ImageMorph$1.class 706B
Ch5ImageTrans$1.class 700B
Ch4GeomTrans$1.class 694B
Ch3Elements$1.class 688B
.classpath 325B
clock.cmp 8KB
Thumbs.db 118KB
Thumbs.db 114KB
Thumbs.db 96KB
Thumbs.db 46KB
Thumbs.db 43KB
Thumbs.db 38KB
Thumbs.db 36KB
Thumbs.db 36KB
Thumbs.db 28KB
Thumbs.db 28KB
Thumbs.db 19KB
Thumbs.db 19KB
Thumbs.db 19KB
Thumbs.db 11KB
Thumbs.db 8KB
Thumbs.db 7KB
Thumbs.db 7KB
test.dct 40KB
compressed.frc 13KB
Lena.gif 67KB
BALL256.GIF 26KB
JOE.GIF 5KB
fish.GIF 2KB
process.jar 240KB
Ch11DigitRecog.java 21KB
Ch10ImageMorph.java 20KB
Ch6ImageEnhance.java 17KB
Ch14ImageCipher.java 17KB
Ch15ImageWatermark.java 16KB
Ch8ImageSegment.java 15KB
Ch4GeomTrans.java 14KB
Ch5ImageTrans.java 13KB
Ch3Elements.java 13KB
Ch12ImageCompress.java 12KB
Ch1Introduction.java 11KB
Ch9ImageAnalyse.java 9KB
Ch13FracImageCompress.java 8KB
Ch2Digitization.java 6KB
Ch7ImageRestore.java 5KB
c_Dic.jpg 124KB
c_Lena.jpg 92KB
c_boats.jpg 88KB
j_Baboo.jpg 58KB
j_cameraman.jpg 52KB
greysea.jpg 51KB
c_Lena2.jpg 32KB
c_Lena3.jpg 32KB
c_boats2.jpg 31KB
c_Lenal.jpg 29KB
test.jpg 29KB
test.jpg 29KB
test.jpg 29KB
滤波.JPG 27KB
滤波.jpg 26KB
noisedLena.jpg 26KB
j_Baboo2.jpg 21KB
Baboo.jpg 19KB
Baboo.jpg 19KB
Baboo.jpg 19KB
Baboo.jpg 19KB
peppers.jpg 18KB
peppers.JPG 18KB
peppers.jpg 18KB
peppers.jpg 18KB
共 191 条
- 1
- 2
资源评论
- Topkf2019-05-22哎分数太高了
jamwei9
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功