在matlab中如何实现图像灰度共生矩阵?

如题所述

close all
clear all
clc;
I=imread('F:\图像变化检测\image\Texture image(3.27)\texture5.tif');
%I=rgb2gray(I); %% if the input image is RGB form.
%I=I(1:128,1:128); %% derive a small one just for demo
I=im2double(I);
w=15;
I1=wextend('2D','sym',I,(w-1)/2); %I=wextend('2D','sys',I,[w/2-1/2,w/2-1/2]); this is used for odd size window %扫描窗口的大小15*15,为之后程序方便找中心点可以将窗口设置成4*4-32*32之间的任何奇数窗口
%
%s=4; %this variable is used for setting the range of the distance between i and j,remember don't set s a too big num.
%A=zeros(s,1);
%B=(1:s)';
%offsets1 = [A B;-B B;-B A;-B -B]; %% sets the directions and distance within the pexil i and j
%
offsets1=[0 1]; %水平单步
%
[m,n]=size(I1);
I11=zeros(m,n); %定义5个矩阵用于存放由graycomatrix产生的5个参数
I12=zeros(m,n); %这样就能够再执行完一次操作后,利用得到的各种特征参数矩阵分别去聚类分割
I13=zeros(m,n); %这样总的耗时短,不用每次都重新执行扫描窗口和共生矩阵来产生特征参数(这个最耗费时间)
I14=zeros(m,n);
I15=zeros(m,n);
for i=(w+1)/2:m-(w-1)/2
for j=(w+1)/2:n-(w-1)/2
W=zeros();
W=I1(i-(w-1)/2:i+(w-1)/2,j-(w-1)/2:j+(w-1)/2);
[glcms,SI] = graycomatrix(W,'NumLevels',8,'G',[],'offset',offsets1);
stats = graycoprops(glcms,'all');
Con=[stats.Contrast];
H=[stats.Homogeneity];
Cor=[stats.Correlation];
Ee=[stats.Energy];

eigenvalue=mean(Con);
I11(i,j)=eigenvalue;
I12(i,j)=mean(H);
I13(i,j)=mean(Cor);
I14(i,j)=mean(Ee);
I15(i,j)=mean(En);
end
end
%
I2=I15((w+1)/2:m-(w-1)/2,(w+1)/2:n-(w-1)/2); %%得到原始图像
ma=max(I2(:));
mi=min(I2(:));
I3=(I2-mi)/(ma-mi); %%归一化
I3=im2double(I3);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-17
closeall\x0d\x0aclearall\x0d\x0aclc;\x0d\x0aI=imread('F:\图像变化检测\image\Textureimage(3.27)\texture5.tif');\x0d\x0a%I=rgb2gray(I);%%iftheinputimageisRGBform.\x0d\x0a%I=I(1:128,1:128);%%deriveasmallonejustfordemo\x0d\x0aI=im2double(I);\x0d\x0aw=15;\x0d\x0aI1=wextend('2D','sym',I,(w-1)/2);%I=wextend('2D','sys',I,[w/2-1/2,w/2-1/2]);thisisusedforoddsizewindow%扫描窗口的大小15*15,为之后程序方便找中心点可以将窗口设置成4*4-32*32之间的任何奇数窗口\x0d\x0a%\x0d\x0a%s=4;%thisvariableisusedforsettingtherangeofthedistancebetweeniandj,rememberdon'tsetsatoobignum.\x0d\x0a%A=zeros(s,1);\x0d\x0a%B=(1:s)';\x0d\x0a%offsets1=[AB;-BB;-BA;-B-B];%%setsthedirectionsanddistancewithinthepexiliandj\x0d\x0a%\x0d\x0aoffsets1=[01];%水平单步\x0d\x0a%\x0d\x0a[m,n]=size(I1);\x0d\x0aI11=zeros(m,n);%定义5个矩阵用于存放由graycomatrix产生的5个参数\x0d\x0aI12=zeros(m,n);%这样就能够再执行完一次操作后,利用得到的各种特征参数矩阵分别去聚类分割\x0d\x0aI13=zeros(m,n);%这样总的耗时短,不用每次都重新执行扫描窗口和共生矩阵来产生特征参数(这个最耗费时间)\x0d\x0aI14=zeros(m,n);\x0d\x0aI15=zeros(m,n);\x0d\x0afori=(w+1)/2:m-(w-1)/2\x0d\x0aforj=(w+1)/2:n-(w-1)/2\x0d\x0aW=zeros();\x0d\x0aW=I1(i-(w-1)/2:i+(w-1)/2,j-(w-1)/2:j+(w-1)/2);\x0d\x0a[glcms,SI]=graycomatrix(W,'NumLevels',8,'G',[],'offset',offsets1);\x0d\x0astats=graycoprops(glcms,'all');\x0d\x0aCon=[stats.Contrast];\x0d\x0aH=[stats.Homogeneity];\x0d\x0aCor=[stats.Correlation];\x0d\x0aEe=[stats.Energy];\x0d\x0a\x0d\x0aeigenvalue=mean(Con);\x0d\x0aI11(i,j)=eigenvalue;\x0d\x0aI12(i,j)=mean(H);\x0d\x0aI13(i,j)=mean(Cor);\x0d\x0aI14(i,j)=mean(Ee);\x0d\x0aI15(i,j)=mean(En);\x0d\x0aend\x0d\x0aend\x0d\x0a%\x0d\x0aI2=I15((w+1)/2:m-(w-1)/2,(w+1)/2:n-(w-1)/2);%%得到原始图像\x0d\x0ama=max(I2(:));\x0d\x0ami=min(I2(:));\x0d\x0aI3=(I2-mi)/(ma-mi);%%归一化\x0d\x0aI3=im2double(I3);
    官方服务
      官方网站官方网站
相似回答