MATLAB图像的表示与描述
一、彩色图像颜色值三个中心矩计算
rgb=imread('cdl.png');
rgb1=double(rgb);
r=rgb1(:,:,1);
g=rgb1(:,:,2);
b=rgb1(:,:,3);
[m,n]=size(r);
er=mean(mean(r(:)))
dr1=0.0;sr1=0.0;
for i=1 :m
for j=1:n
dr1=dr1+(r(i,j)-er)^2;
sr1=sr1+(r(i,j)-er)^3;
end
end
dr=sqrt(dr1/(m*n))
sr=(sr1/(m*n))^0.3333
eg=mean(mean(g(:)))
dg1=0.0;sg1=0.0;
for i=1 :m
for j=1 :n
dg1=dg1+(g(i,j)-eg)^2;
sg1=sg1+(g(i,j)-eg)^3;
end
end
dg=sqrt(dg1/(m*n))
sg=(sg1/(m*n))^0.3333
eb=mean (mean(b(:)))
db1=0.0;sb1=0.0;
for i=1 :m
for j=1 :n
db1=db1+(b(i,j)-eb)^2;
sb1=sb1+(b(i,j)-eb)^3;
end
end
db=sqrt(db1/(m*n))
sb=(sb1/(m*n))^0.3333
二、纹理统计特征计算
%%I1=imread('cdl.png');
%%I1=rgb2gray(I1);
I1=imread('whale.png');
I1=rgb2gray(I1);
h=imhist(I1);
h=h/sum(h);
L=length(h);
L=L-1;
h=h(:);
i=0:L;
i=i./L;
m=i*h;
i=i-m;
nu=zeros(1,3);
nu(1)=m;
for j=2:3
nu(j)=(i.^j)*h;
end
u1=nu(1)*L;
u2=nu(2)*L^2;
u3=nu(3)*L^3;
f1=u1
f2=u2.^0.5
f3=1-1/(1+u2)
f4=u3/(L^2)
f5=sum(h.^2)
f6=-sum(h.*log2(h+eps))
三、图像边界的傅里叶描述子(这个与原文不一样,只显示图像,没做后续运算)
g=imread('cdl.png');
%subplot(231),imshow(g);title('原像');
imshow(g),figure
g=im2bw(g,0.5);%将原图像转换为二值图像
%subplot(232),imshow(g);title('二值图像');
imshow(g),figure
%title('freeman图像阈值处理后');
%函数boundaries(BW,CONN,DIR)表示的是跟踪目标的边界,返回值为一个p*1的数组单元,p为目标的个数
%每一个单元又是一个Q*2的矩阵,即Q个点的x,y坐标
B=boundaries(g);
%函数cellfun(FUN,C)是指对一个单元数组中的每一个单元应用函数FUN
d=cellfun('length',B);%求B中每一个目标边界的长度,所以返回值d是一个向量
[max_d,k]=max(d);%返回向量d中最大的值,存在max_d中,k为其索引。
v=B{k(1)};%如果最大边界不止一条,则取出其中的一条即可。v是一个坐标数组
[M,N]=size(g);
%函数bound2im(b,M,N,x0,y0)是生成一副二值图像,大小为M*N,x0和y0是b中最小的x和y轴坐标
g=bound2im(v,M,N,min(v(:,1)),min(v(:,2)));
imshow(g)
%subplot(233),imshow(g);
%title('最大边界后图像');
四、图像区域基本特征计算
A=imread('82a0b7d3.png');
A1=bwperim(A);
L=0;
[m,n]=size(A1);
for i=1:m*n
if(A1(i)==1)
L=L+1;
end
end
L
[m,n]=size(A);
S=0;
for i=1:m*n
if(A(i)==1)
S=S+1;
end
end
S
x=0;
y=0;
for i=1:m
for j=1:n
if(A(i,j)==1)
x=i+x;
y=j+y;
end
end
end
X=x/S
Y=y/S