前面两篇介绍了特征提取,贝叶斯分类等问题,这一篇讲解怎么测试我们的程序对不对。
代码如下:
function bayesBinaryTest(imp)
%利用贝叶斯分类器对手写图片识别
load templet; %加载汉字特征
%A = imp; %得到待识别图片
A=imread('C:\Users\Administrator\Desktop\BayesBinaryHandwritingRecognition_BC_20190220-master\贝叶斯手写汉字识别\样本集\昆1.bmp');
figure(1),subplot(121),imshow(A),title(['待识别的汉字:']);
B=zeros(1,100);%创建1行100列的特征向量 其实与多少与谁是行和列没关系,也可以100行1列
[row col] = size(A); %得到待测样本的行列
cellRow = row/10; %将其降维 得到缩小100倍的特征图片
cellCol = col/10;
%disp(row);disp(col);%读取的行列数正好是图片的像素数即120行90列
%像素已经是二值化的灰度图,所以读取的像素值不是0(黑色)就是255(白色)
%A中读取和存储的是像素值,是一个120行90列的矩阵 最后将每一个12*9个方格整合成一个方格,最后的得到一个10*10的栅格
count = 0; %每1/100个格子中为0的像素点个数
currentCell = 1; %当前计算为第1个1/100格子部分
for currentRow = 0:9
for currentCol = 0:9
for i = 1:cellRow %计算每1/100部分中为0的数量
for j = 1:cellCol
if(A(currentRow*cellRow+i,currentCol*cellCol+j)==0)
count=count+1;
end
end
end
ratio = count/(cellRow*cellCol); %计算1/100部分中黑色像素的占比 将每12*9个方格中的黑色像素平均到这12*9个中去,
%像素会降低,所以要设定阈值,将达到一定数量黑色像素的12*9的方
%格置成10*10的中的一个黑色像素点 ,如下一步
B(1,currentCell) = ratio; %将每个占比统计在B特征向量中
currentCell = currentCell+1; %新的1/100部分开始计算
count = 0; %像素点计数置0
end
end
%disp(B')%B'打印出来是一列一百行的向量
class = bayesBinary(B'); %将该特征利用贝叶斯分类器分类,返回类的个数
subplot(122),imshow(['C:\Users\Administrator\Desktop\BayesBinaryHandwritingRecognition_BC_20190220-master\贝叶斯手写汉字识别\样本集\',num2str(class),'.jpg']),title(['该汉字被识别为:']);
disp(['该汉字被识别为:',pattern(class).name]);
想要识别文字,就要先把文字信息导入到程序中,老样子,还是用imread将信息读取,下面的设置B矩阵,读取文件的大小,像素的点数等等。程序里面我又增加了一些注释,更加清楚,我就不多言了。对了,应用时记得把imread里面的路径改成自己的。文字库下载的话,我资源里面有。
一起学习,共同进步。