用MATLAB實(shí)現(xiàn)基于灰度共生矩陣的圖片識別
代碼主要實(shí)現(xiàn)了用灰度共生矩陣的特征值判斷一系列圖像中與某一圖像最相似的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]);%%這一步是在求灰度共生矩陣,具體的原理你感興趣的話我再解釋,不感興趣就直接復(fù)制粘貼就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]; ? ?%%終于,我們構(gòu)造出來了特征向量,歐耶tzjzdl=[tzjzdl;te]; ? ? ? ? ? ? ? ?%構(gòu)造特征矩陣的轉(zhuǎn)置end
tzjz1=tzjzdl'; ? ? ? ? ? ? ? ? ? ? ? %轉(zhuǎn)置回來得到特征矩陣
[tzjz,PS]=mapminmax(tzjz1);
%下面計(jì)算相似性,以第5張圖片為例,計(jì)算和第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
原圖貼在這里了

下面是在眾多圖片中識別出來的最相似的五幅圖:

注:因?yàn)樵瓐D也在文件夾里面,所以原圖和原圖最像。
不足之處:這串代碼識別出來的情況有時(shí)候會(huì)反常識。。。。。希望得到大家的意見。
標(biāo)簽: