图像处理&生成图像的共生矩阵——Matlab实现
%求解图像的共生矩阵
clc;clear;
a=input('输入图像矩阵:','s');
a=str2num(a); %将输入的矩阵转换成数
[m,n]=size(a);
b=max(max(a));
c=zeros(b+1);
angle=input('输入旋转角度(如“45”“90”格式输入)','s');
angle=str2num(angle);
switch(angle)
%顺时针旋转,当角度为0度时,图像的共生矩阵
case 0
for k=0:b
for h=0:b
x=0;
for i=1:m
for j=1:n-1
if((a(i,j)==k)&&(a(i,j+1)==h))&&((a(i,j)==h)&&(a(i,j+1)==k))%判断0度时,原矩阵两个值是否相同且等于共生矩阵相应位置的数
x=x+2;
elseif ((a(i,j)==k)&&(a(i,j+1)==h))%判断0度时,原矩阵的两个值是否等于共生矩阵相应位置的值
x=x+1;
elseif ((a(i,j)==h)&&(a(i,j+1)==k))%判断180度时,原矩阵的两个值是否等于共生矩阵相应位置的值
x=x+1;
end
end
end
c(k+1,h+1)=x;
end
end
disp('旋转角度为0度时,图像的共生矩阵');disp(c);
%顺时针旋转,当角度为45度时,图像的共生矩阵
case 45
for k=0:b
for h=0:b
x=0;
for i=1:m-1
for j=1:n-1
if((a(i,j)==k)&&(a(i+1,j+1)==h))&&((a(i,j)==h)&&(a(i+1,j+1)==k))
x=x+2;
elseif ((a(i,j)==k)&&(a(i+1,j+1)==h))
x=x+1;
elseif ((a(i,j)==h)&&(a(i+1,j+1)==k))
x=x+1;
end
end
end
c(k+1,h+1)=x;
end
end
disp('旋转角度为45度时,图像的共生矩阵');disp(c);
%顺时针旋转,当角度为90度时,图像的共生矩阵
case 90
for k=0:b
for h=0:b
x=0;
for i=1:m-1
for j=1:n
if((a(i,j)==k)&&(a(i+1,j)==h))&&((a(i,j)==h)&&(a(i+1,j)==k))
x=x+2;
elseif ((a(i,j)==k)&&(a(i+1,j)==h))
x=x+1;
elseif ((a(i,j)==h)&&(a(i+1,j)==k))
x=x+1;
end
end
end
c(k+1,h+1)=x;
end
end
disp('旋转角度为90度时,图像的共生矩阵');disp(c);
%顺时针旋转,当角度为135度时,图像的共生矩阵
case 135
for k=0:b
for h=0:b
x=0;
for i=1:m-1
for j=2:n
if((a(i,j)==k)&&(a(i+1,j-1)==h))&&((a(i,j)==h)&&(a(i+1,j-1)==k))
x=x+2;
elseif ((a(i,j)==k)&&(a(i+1,j-1)==h))
x=x+1;
elseif ((a(i,j)==h)&&(a(i+1,j-1)==k))
x=x+1;
end
end
end
c(k+1,h+1)=x;
end
end
disp('旋转角度为135度时,图像的共生矩阵');disp(c);
otherwise
fprintf(2,'输入角度有误\n');
end
小白练手,敬请斧正。