用MATLAB实现基于灰度共生矩阵的图片识别
代码主要实现了用灰度共生矩阵的特征值判断一系列图像中与某一图像最相似的5张图
clc;clear;str='F:\xmf\download\RS_Dataset/';files=dir(strcat(str,'*.tif'));tzjzdl=zeros(1,8);y=zeros(1,1);for i=1:length(files)
imagename=files(i).name;
wjdz=[str,imagename];
imagedata=imread(wjdz);
Igray=rgb2gray(imagedata);
[glcm, SI] = graycomatrix(Igray, 'N', 16, 'G', [],'O',[0,1;-1,1;-1,0;-1,-1]);%%这一步是在求灰度共生矩阵,具体的原理你感兴趣的话我再解释,不感兴趣就直接复制粘贴就ok了stats = graycoprops(glcm,{'contrast','homogeneity','correlation','energy'});%%这一步是在求特征值
a1=mean(stats.Contrast,2);a2=mean(stats.Homogeneity,2);a3=mean(stats.Correlation,2);a4=mean(stats.Energy,2); %%这一步是在求均值b1=std(stats.Contrast,0,2)^2;b2=std(stats.Homogeneity,0,2)^2;b3=std(stats.Correlation,0,2)^2;b4=std(stats.Energy,0,2)^2; %%这一步是在求方差te=[a1,a2,a3,a4,b1,b2,b3,b4]; %%终于,我们构造出来了特征向量,欧耶tzjzdl=[tzjzdl;te]; %构造特征矩阵的转置end
tzjz1=tzjzdl'; %转置回来得到特征矩阵
[tzjz,PS]=mapminmax(tzjz1);
%下面计算相似性,以第5张图片为例,计算和第5张图片最相似的五张图
for i=2:61
x1=tzjz(:,6); %编号-1表明你想拿哪张图作为原始图
xi=tzjz(:,i);
deltax=x1-xi;
x=norm(deltax,2);
y=[y;x];
end
y([1],:)=[];
[b,k]=sort(y);
for i=1:6
d=k(i,1);
tpdz=[str,files(d).name];
h=imread(tpdz);
subplot(2,3,i)
imshow(h);
title(['和原图相比第',num2str(i),'像']);
end
原图贴在这里了

下面是在众多图片中识别出来的最相似的五幅图:

注:因为原图也在文件夹里面,所以原图和原图最像。
不足之处:这串代码识别出来的情况有时候会反常识。。。。。希望得到大家的意见。