汉字特征提取代码.docx
- 文档编号:8271674
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:23
- 大小:51.58KB
汉字特征提取代码.docx
《汉字特征提取代码.docx》由会员分享,可在线阅读,更多相关《汉字特征提取代码.docx(23页珍藏版)》请在冰豆网上搜索。
汉字特征提取代码
汉字特征提取代码:
提取32维汉字笔画特征(横,撇,竖,奈)
%%笔画线密度特征提取64维
functionbi=bihuamidutiqu(a)
%clear;
%clc;
b=zeros(1,32);
heng=zeros(1,8);%特征0~1交变数
shu=zeros(1,8);%特征0~1交变数
zu=zeros(1,8);%特征0~1交变数
fu=zeros(1,8);%特征0~1交变数
%d=imread('ch.jpg');
d=imresize(a,[6464]);
imshow(d);
d=im2bw(d);
[m,n]=size(d);
%t1=(0:
low-1)*ch+4;
%t2=(1:
low)*ch;
%t3=(0:
row-1)*cw+4;
%t4=(1:
row)*cw;
jq=d(:
4:
8:
60);%%取八列扫描
W=jq';
[P,Q]=size(W);
J=d(4:
8:
60,:
);%%取八行扫描
[M,N]=size(J);
%**********shu
fori=1:
P
%s=0;
forj=1:
Q-1
%******统计相邻像素由0到1的次数****************%
ifW(i,j)==0&&W(i,j+1)==1
%if(W(i,j)==0&&W(i,j+1)==1)||(W(i,j)==1&&W(i,j+1)==0)
shu(i)=shu(i)+1;
end
end
end
%***********heng
fori=1:
M
%s=0;
forj=1:
N-1
%******统计相邻像素由0到1的次数****************%
ifJ(i,j)==0&&J(i,j+1)==1
%if(J(i,j)==0&&J(i,j+1)==1)||(J(i,j)==1&&J(i,j+1)==0)
heng(i)=heng(i)+1;
end
end
end
%***********zu主对角线fliplr(A)左右颠倒
a1=diag(d,28);a1=a1';
a2=diag(d,20);a2=a2';
a3=diag(d,12);a3=a3';
a4=diag(d,4);a4=a4';
a5=diag(d,-4);a5=a5';
a6=diag(d,-12);a6=a6';
a7=diag(d,-20);a7=a7';
a8=diag(d,-28);a8=a8';
[m,n]=size(a1);
fori=1:
n-1
ifa1(1,i)==0&&a1(1,i+1)==1
zu
(1)=zu
(1)+1;
i=i+1;
end
end
[m,n]=size(a2);
fori=1:
n-1
ifa2(1,i)==0&&a2(1,i+1)==1
zu
(2)=zu
(2)+1;
i=i+1;
end
end
[m,n]=size(a3);
fori=1:
n-1
ifa3(1,i)==0&&a3(1,i+1)==1
zu(3)=zu(3)+1;
i=i+1;
end
end
[m,n]=size(a4);
fori=1:
n-1
ifa4(1,i)==0&&a4(1,i+1)==1
zu(4)=zu(4)+1;
i=i+1;
end
end
[m,n]=size(a5);
fori=1:
n-1
ifa5(1,i)==0&&a5(1,i+1)==1
zu(5)=zu(5)+1;
i=i+1;
end
end
[m,n]=size(a6);
fori=1:
n-1
ifa6(1,i)==0&&a6(1,i+1)==1
zu(6)=zu(6)+1;
i=i+1;
end
end
[m,n]=size(a7);
fori=1:
n-1
ifa7(1,i)==0&&a7(1,i+1)==1
zu(7)=zu(7)+1;
i=i+1;
end
end
[m,n]=size(a8);
fori=1:
n-1
ifa8(1,i)==0&&a8(1,i+1)==1
zu(8)=zu(8)+1;
i=i+1;
end
end
%***********fu负对角线fliplr(A)左右颠倒
e=fliplr(d);
b1=diag(e,28);b1=b1';
b2=diag(e,20);b2=b2';
b3=diag(e,12);b3=b3';
b4=diag(e,4);b4=b4';
b5=diag(e,-4);b5=b5';
b6=diag(e,-12);a6=b6';
b7=diag(e,-20);b7=b7';
b8=diag(e,-28);b8=b8';
[m,n]=size(b1);
fori=1:
n-1
ifb1(1,i)==0&&b1(1,i+1)==1
fu
(1)=fu
(1)+1;
i=i+1;
end
end
[m,n]=size(b2);
fori=1:
n-1
ifb2(1,i)==0&&b2(1,i+1)==1
fu
(2)=fu
(2)+1;
i=i+1;
end
end
[m,n]=size(b3);
fori=1:
n-1
ifb3(1,i)==0&&b3(1,i+1)==1
fu(3)=fu(3)+1;
i=i+1;
end
end
[m,n]=size(b4);
fori=1:
n-1
ifb4(1,i)==0&&b4(1,i+1)==1
fu(4)=fu(4)+1;
i=i+1;
end
end
[m,n]=size(b5);
fori=1:
n-1
ifb5(1,i)==0&&b5(1,i+1)==1
fu(5)=fu(5)+1;
i=i+1;
end
end
[m,n]=size(b6);
fori=1:
n-1
ifb6(1,i)==0&&b6(1,i+1)==1
fu(6)=fu(6)+1;
i=i+1;
end
end
[m,n]=size(b7);
fori=1:
n-1
ifb7(1,i)==0&&b7(1,i+1)==1
fu(7)=fu(7)+1;
i=i+1;
end
end
[m,n]=size(b8);
fori=1:
n-1
ifb8(1,i)==0&&b8(1,i+1)==1
fu(8)=fu(8)+1;
i=i+1;
end
end
%heng
%shu
%zu
%fu
b=[hengshuzufu];
bi=b;
%%*******4维汉字外围轮廓特征横竖撇奈
%%*******4维汉字外围轮廓特征横竖撇奈
functionlk=wwlk(a)
%clear;
%clc;
count=4;
feature=zeros(1,4);%特征
%a=imread('w.jpg');
d=imresize(a,[6464]);
%figure,imshow(d);
d=im2bw(d);
[m,n]=size(d);
%%取出四块边界扫描笔画线
k1=d(1:
4,:
);
k2=d(61:
64,:
);
k3=d(:
1:
4);
k4=d(:
61:
64);
figure,imshow(k1);
figure,imshow(k2);
figure,imshow(k3);
k3=k3';
figure,imshow(k4);
k4=k4';
fori=1:
4
f1=0;g1=0;p1=0;
forj=1:
m-1
ifk1(i,j)==0&&k1(i,j+1)==1
feature
(1)=feature
(1)+1;
p1=p1+1;
f1=i;g1=j;
end
end
iff1<4&&g1>0&&feature
(1)>1&&(k1(f1+1,g1+1)==1)&&(k1(f1+1,g1)==0)
feature
(1)=feature
(1)-p1;
end
iff1<4&&g1>1&&feature
(1)>=1&&(k1(f1+1,g1-1)==0)&&(k1(f1+1,g1)==1)%%撇
feature
(1)=feature
(1)-p1;
end
iff1<4&&g1>0&&feature
(1)>=1&&(k1(f1+1,g1)==0)&&(k1(f1+1,g1+1)==1)%%捺
feature
(1)=feature
(1)-p1;
end
end
fori=1:
4
f2=0;g2=0;p2=0;
forj=1:
m-1
ifk2(i,j)==0&&k2(i,j+1)==1
feature
(2)=feature
(2)+1;
p2=p2+1;
f2=i;g2=j;
end
end
iff2<4&&g2>0&&(feature
(2)>=1)&&(k2(f2+1,g2+1)==1)&&(k2(f2+1,g2)==0)
feature
(2)=feature
(2)-p2;
end
iff2<4&&g2>0&&feature
(2)>=1&&(k2(f2+1,g2-1)==0)&&(k2(f2+1,g2)==1)%撇
feature
(2)=feature
(2)-p2;
end
iff2<4&&g2>0&&feature
(2)>=1&&(k2(f2+1,g2+1)==1)&&(k2(f2+1,g2)==0)%捺
feature
(2)=feature
(2)-p2;
end
end
fori=1:
4
f3=0;g3=0;p3=0;
forj=1:
m-1
ifk3(i,j)==0&&k3(i,j+1)==1
feature(3)=feature(3)+1;
p3=p3+1;
f3=i;g3=j;
end
end
iff3<4&&g3>0&&feature(3)>=1&&(k3(f3+1,g3+1)==1)&&(k3(f3+1,g3)==0)
feature(3)=feature(3)-p3;
end
iff3<4&&g3>0&&feature(3)>=1&&(k3(f3+1,g3)==1)&&(k3(f3+1,g3-1)==0)
feature(3)=feature(3)-p3;
end
iff3<4&&g3>0&&feature(3)>=1&&g3>0&&(k3(f3+1,g3)==0)&&(k3(f3+1,g3+1)==1)
feature(3)=feature(3)-p3;
end
end
fori=1:
4
f4=0;g4=0;p4=0;
forj=1:
m-1
ifk4(i,j)==0&&k4(i,j+1)==1
feature(4)=feature(4)+1;
p4=p4+1;
f4=i;g4=j;
end
end
iff4<4&&g4>0&&(feature(4)>=1)&&(k4(f4+1,g4+1)==1)&&(k4(f4+1,g4)==0)
feature(4)=feature(4)-p4;
end
iff4<4&&g4>0&&feature(4)>=1&&(k4(f4+1,g4-1)==0)&&(k4(f4+1,g4)==1)%%丿
feature(4)=feature(4)-p4;
end
iff4<4&&g4>0&&feature(4)>=1&&(k4(f4+1,g4)==0)&&(k4(f4+1,g4+1)==1)%%捺
feature(4)=feature(4)-p4;
end
end
lk=feature;
%%汉字粗网格特征提取
%%汉字粗网格特征提取
functiongr=wgtzheng(a)
count=17;
feature=zeros(1,count);%特征
feat=zeros(1,16);%特征0~1交变数
%d=imread('c.jpg');
d=imresize(a,[6464]);
%imshow(d);
d=im2bw(d);
[m,n]=size(d);
low=4;%水平块数
row=4;%垂直块数
ch=m/low;%4
cw=n/row;%4
t1=(0:
low-1)*ch+1;
t2=(1:
low)*ch;
t3=(0:
row-1)*cw+1;
t4=(1:
row)*cw;
q=0;
fori=1:
low
forj=1:
row
temp=d(t1(i):
t2(i),t3(j):
t4(j));
feature((i-1)*row+j)=sum(sum(temp));%统计这16个区域的白像素的个数,得到16个特征
q=q+feature((i-1)*row+j);
%feat((i-1)*row+j)=fact(temp);
end
end
feature(count)=sum(sum(d));%图像全像素和
f=zeros(1,17);
fori=1:
17
f(i)=feature(i)/q;
end
gr=f;
汉字诗的四维外围特征:
对于诗的特征提取,得到53维的特征向量如下:
tz=
Columns1through8
1.00003.00001.00002.00003.00002.00002.00002.0000
Columns9through16
1.00001.00001.00001.00002.00005.00002.00001.0000
Columns17through24
5.00002.00002.00003.00003.00002.00003.00003.0000
Columns25through32
1.00001.00003.00002.00002.000001.00001.0000
Columns33through40
1.00002.00001.00001.00000.01630.00230.09900.0035
Columns41through48
0.04190.03610.10010.10590.08270.03960.09310.1094
Columns49through53
0.04190.08960.06290.07571.0000
汉字重构代码:
closeall;
clear;
A=imread('ya.jpg');
figure,imshow(A);title('原字符图像');
%%%非线性字体大小归一化为24×24点阵
A1=imresize(A,[2424]);
%%%二值化
A2=im2bw(A1,0.3);
figure,imshow(A2);title('原字符图像二值化');
[m,n]=size(A2);
A4=A2;A5=A2;A6=A2;A7=A2;
B1=[0,0,0;1,1,1;0,0,0];
fs1=zeros(24,24);
fs1=imerode(A4,B1);
B11=[0,0,0;1,1,1;0,0,0];
pz11=zeros(24,24);
fs11=imerode(fs1,B11);
pz11=imdilate(fs11,B11);
pz111=imdilate(pz11,B11);
figure,imshow(pz111);title('横方向开运算');%先腐蚀后膨胀
%%汉字单笔划变换
fori=1:
22
forj=1:
24
ifpz111(i,j)==0&&pz111(i+1,j)==1&&pz111(i+2,j)==1
pz111(i+1,j)=0;
end
end
end
figure,imshow(pz111);title('横单笔化');
fori=1:
22
forj=1:
22
ifpz111(i+1,j+1)==1&&pz111(i,j)==1&&pz111(i+1,j+2)==1%%%左上相邻像素判别
pz111(i,j)=0;
pz111(i+1,j)=1;
end
ifpz111(i+1,j+1)==1&&pz111(i+1,j)==1&&pz111(i,j+2)==1%%%右上相邻像素判别
pz111(i,j+2)=0;
pz111(i+1,j+2)=1;
end
ifpz111(i,j+1)==1&&pz111(i+1,j)==1&&pz111(i,j+2)==1%%%左下相邻像素判别
pz111(i,j)=1;
pz111(i+1,j)=0;
end
ifpz111(i,j+1)==1&&pz111(i,j)==1&&pz111(i+1,j+2)==1%%%右下相邻像素判别
pz111(i,j+2)=1;
pz111(i+1,j+2)=0;
end
ifpz111(i+1,j+1)==1&&pz111(i+1,j)==1&&pz111(i,j+1)==1%%%正上方相邻像素判别
pz111(i,j+1)=0;
end
ifpz111(i+1,j+1)==1&&pz111(i+1,j)==1&&pz111(i,j)==1
pz111(i,j)=0;
end
ifpz111(i,j+1)==1&&pz111(i,j)==1&&pz111(i+1,j+1)==1%%%正下方相邻像素判别
pz111(i+1,j+1)=0;
end
ifpz111(i,j+1)==1&&pz111(i,j)==1&&pz111(i+1,j)==1
pz111(i+1,j)=0;
end
end
end
fori=1:
22
forj=1:
22
ifpz111(i+1,j+1)==1&&pz111(i,j)==0&&pz111(i+1,j)==0&&pz111(i,j+1)==0&&pz111(i+2,j)==0&&pz111(i,j+2)==0...
&&pz111(i+1,j+2)==0&&pz111(i+2,j+1)==0&&pz111(i+2,j+2)==0%%%消除孤立点
pz111(i+1,j+1)=0;
end
end
end
figure,imshow(pz111);title('横单笔化修正');
B2=[0,1,0;0,1,0;0,1,0];
fs2=zeros(24,24);
%fori=1:
double(aver)
%fs2=imerode(A5,B2);
%end
fs2=imerode(A5,B2);
%figure,imshow(fs2);title('竖方向笔划');
B21=[0,1,0;0,1,0;0,1,0];
pz21=zeros(24,24);
fs21=imerode(fs2,B21);
pz21=imdilate(fs21,B21);
pz211=imdilate(pz21,B21);
%figure,imshow(pz211);title('竖方向开运算');
forj=1:
22
fori=1:
24
ifpz211(i,j)==0&&pz211(i,j+1)==1&&pz211(i,j+2)==1
pz211(i,j+1)=0;
end
end
end
%figure,imshow(pz211);title('竖单笔化');
forj=1:
22
fori=1:
22
ifpz211(i+1,j+1)==1&&pz211(i,j)==1&&pz211(i+2,j+1)==1%%%左上相邻像素判别
pz211(i,j)=0;
pz211(i,j+1)=1;
end
ifpz211(i+1,j)==1&&pz211(i+2,j)==1&&pz211(i,j+1)==1%%%右上相邻像素判别
pz211(i,j+1)=0;
pz211(i,j)=1;
end
ifpz211(i,j+1)==1&&pz211(i+1,j+1)==1&&pz211(i+2,j)==1%%%左下相邻像素判别
pz211(i+2,j)=0;
pz211(i+2,j+1)=1;
end
ifpz211(i,j)==1&&pz211(i+1,j)==1&&pz211(i+2,j+1)==1%%%右下相邻像素判别
pz211(i+2,j)=1;
pz211(i+2,j+1)=0;
end
ifpz211(i+1,j+1)==1&&pz211(i,j+1)==1&&pz211(i,j)==1%%%正左方相邻像素判别
pz211(i,j)=0;
end
ifpz211(i+1,j+1)==1&&pz211(i,j+1)==1&&pz211(i+1,j)==1
pz211(i+1,j)=0;
end
ifpz211(i,j)==1&&pz211(i+1,j)==1&&pz211(i+1,j+1)==1%%%正右方相邻像素判别
pz211(i+1,j+1)=0;
end
ifpz211(i,j)==1&&pz211(i+1,j)==1&&pz211(i,j+1)==1
pz211(i,j+1)=0;
end
end
end
fori=1:
22
forj=1:
22
ifpz211(i+1,j+1)==1&&pz211(i,j)==0&&pz211(i+1,j)==0&&pz211(i,j+1)==0&&pz211(i+2,j)==0&&pz211(i,j+2)==0...
&&pz211(i+1,j+2)==0&&pz211(i+2,j+1)==0&&pz211(i+2,j+2)==0%%%消除孤立点
pz211(i+1,j+1)=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汉字 特征 提取 代码