资源简介
基于MATLAB的处理图片,图片处理包括滤波,边缘处理,最后提取图片的特征值,不变矩特征值
代码片段和文件信息
function square=array2(image)
PS=image;
PS=imresize(PS[300300]‘bilinear‘);%归一化大小
% PS=rgb2gray(PS);
[mn]=size(PS); %测量图像尺寸参数
GP=zeros(1256); %预创建存放灰度出现概率的向量
for k=0:255
GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置
end
%直方图均衡化
S1=zeros(1256);
for i=1:256
for j=1:i
S1(i)=GP(j)+S1(i); %计算Sk
end
end
S2=round((S1*256)+0.5); %将Sk归到相近级的灰度
%图像均衡化
f=PS;
for i=0:255
f(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素
end
figureimshow(f);
%边缘检测
f=edge(f‘canny‘0.25);
imshow(f);
%二值法锐化图像
f=double(f);
[xy]=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(‘二值法锐化图像‘);
%中值滤波
g=medfilt2(g);
g=dither(g);
imshow(g);
%提取面积,矩形度,圆形度,拉伸度特征
%g=im2bw(g);
[xy]=size(g);
BW = bwperim(g8); % 检测边缘跟踪,用于计算周长
%检测垂直方向连读的周长像素点%
P1=0;
P2=0;
Ny=0; % 记录垂直方向连续周长像素点的个数
for i=1:x
for j=1:y
if (BW(ij)>0)
P2=j;
if ((P2-P1)==1) % 判断是否为垂直方向连续的周长像素点
Ny=Ny+1;
end
P1=P2;
end
end
end
%检测水平方向连读的周长像素点
P1=0;
P2=0;
Nx=0; % 记录水平方向连续周长像素点的个数
for j=1:y
for i=1:x
if (BW(ij)>0)
P2=i;
if ((P2-P1)==1) % 判断是否为水平方向连续的周长像素点
Nx=Nx+1;
end
P1=P2;
end
end
end
SN=sum(sum(BW)); % 计算周长像素点的总数
Nd=SN-Nx-Ny; % 计算奇数码的链码数目
H=max(sum(g)); % 计算目标的高度
W=m
- 上一篇:MATLAB指纹识别代码可直接用
- 下一篇:基于MATLAB求解最短路问题
评论
共有 条评论