资源描述:
《MATLAB特征提取代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MATLAB特征提取代码fori=1:26 f=strcat('D:bishe',num2str(i)); image=strcat(f,'.jpg'); PS=imread(image); PS=imresize(PS,[300,300],'bilinear');%归一化大小 PS=rgb2gray(PS); [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的
2、向量 fork=0:255 GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置 end%直方图均衡化 S1=zeros(1,256); fori=1:256 forj=1:i S1(i)=GP(j)+S1(i); %计算Sk end end S2=round((S1*256)+0.5); %将Sk归到相近级的灰度%图像均衡化 f=PS; fori
3、=0:255 f(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素 end figure,imshow(f);%边缘检测 f=edge(f,'canny',0.25); imshow(f);%二值法锐化图像 f=double(f); [x,y]=gradient(f); g=sqrt(x.*x+y.*y); i=find(g>=0.5); g(i)=256; j=find(g<0.5); g(j)=0; imshow(g); title('二值法锐
4、化图像');%中值滤波g=medfilt2(g);g=dither(g);imshow(g);%提取面积,矩形度,圆形度,拉伸度特征 %g=im2bw(g); [x,y]=size(g); BW=bwperim(g,8);%检测边缘跟踪,用于计算周长%检测垂直方向连读的周长像素点% P1=0; P2=0; Ny=0;%记录垂直方向连续周长像素点的个数 fori=1:x forj=1:y if(BW(i,j)>0) P2=j; if((P2-P1)=
5、=1)%判断是否为垂直方向连续的周长像素点 Ny=Ny+1; end P1=P2; end end end%检测水平方向连读的周长像素点 P1=0; P2=0; Nx=0;%记录水平方向连续周长像素点的个数 forj=1:y fori=1:x if(BW(i,j)>0) P2=i; if((P2-P1)==1)%判断是否为水平方向连续的周长像素点
6、 Nx=Nx+1; end P1=P2; end end end SN=sum(sum(BW));%计算周长像素点的总数 Nd=SN-Nx-Ny;%计算奇数码的链码数目 H=max(sum(g));%计算目标的高度 W=max(sum(g'));%图象g经矩阵转置后,计算宽度 L=sqrt(2)*Nd+Nx+Ny;%计算周长%====形态特征值计算===% A=bwarea(g);%计算目标的面积 R=A/(
7、H*W);%计算矩形度 E=min(H,W)/max(H,W);%计算伸长度 temp1=[A,R,E];%提取不变矩特征 [M,N]=size(g); [x,y]=meshgrid(1:N,1:M); x=x(:); y=y(:); g=g(:); m.m00=sum(g); if(m.m00==0) m.m00=eps; end m.m10=sum(x.*g); m.m01=sum(y.*g); m.m11=sum(x.*y.*g); m.m20=sum(x.^2.*g); m.m02=su
8、m(y.^2.*g); m.m30=sum(x.^3.*g); m.m03=sum(y.^3.*g); m.m12=sum(x.*y.^2.*g); m.m21=sum(x.^2.*y.*g); xbar=m.m10/m.m