登录论坛

查看完整版本 : [资料]图像纹理分析一些源码


tolabfans
2008-09-04, 10:12
%纹理的统计法
I=rgb2gray(imread(''));
h=imhist(I);
h=h/sum(h); %归一化
L=length(h); %直方图的长度
L=L-1;
%统计1到3阶统计矩
h=h(:); %转化为列向量
rad=0:L;
rad=rad./L;
a=rad*h;
rad=rad-m;
%计算统计矩
stm=zeros(1,3);
stm(1)=m;
for j=2:n
stm(j)=(rad.^j)*h;
end
%获取归一化的1~3阶统计矩
usm(1)=sm(1)*L;
usm(2)=sm(2)*L^2;
usm(3)=sm(3)*L^3;
%计算6个统计纹理量度
%分别为均值,标准差,平滑度,三阶矩,一致性,熵
st(1)=usm(1);
st(2)=usm(2).^0.5;
st(3)=1-1/(1+sm(2));
st(4)=usm(3)/(L^2);
st(5)=sum(h.^2);
st(6)=-sum(h.*log2(h+eps));




%频谱特性
I1=rgb2gray(imread(''));
I2=rgb2gray(imread(''));
% 计算I1的频谱纹理量度
s=fftshift(fft2(I1)); %傅立叶变换
s=abs(s);
[nc,nr]=size(s);
x0=nc/2+1; %计算原点的坐标
y0=nr/2+1;

rmax=min(nc,nr)/2-1;
srad=zeros(1,rmax);
srad(1)=s(x0,y0);
thetha=91:270;

for r=2:rmax
[x,y]=pol2cart(thetha,r);
x=round(x)'+x0;
y=round(y)'+y0;
for j=1:length(x)
srad(r)=sum(s(sub2ind(size(s),x,y)));
end
end
[x,y]=pol2cart(thetha,rmax);
x=round(x)'+x0;
y=round(y)'+y0;
sang=zeros(1,length(x));
for th=1:length(x)
vx=abs(x(th)-x0);
vy=abs(y(th)-y0);
if((vx==0)&(vy==0))
xr=x0;
yr=y0;
else
m=(y(th)-y0)/(x(th)-x0);
xr=(x0:x(th))';
end
for j=1:length(xr)
sang(th)=sum(s(sub2ind(size(s),xr,yr)));
end
end
s=mat2gray(log(1+s));
imshow(s)
plot(srad)
figure,plot(sang)


%不变矩
I=rgb2gray(imread(''));
I2=imrotate(I,-4,'bilinear');
I3=fliplr(I);
I4=imresize(I,0.5,'bilinear');

A=double(I);
[nc,nr]=size(A);
[x,y]=meshgrid(1:nr,1:nc);
x=x(:);
y=y(:);
A=A(:);
m.m00=sum(A);
if m.m00==0
m.m00=eps;
end
m.m10=sum(x.*A);
m.m01=sum(y.*A);

xmean=m.m10/m.m00;
ymean=m.m01/m.m00;

cm.cm00=m.m00;
cm.cm02=(sum((y-ymean).^2.*A))/(m.m00^2);
cm.cm03=(sum((y-ymean).^3.*A))/(m.m00^2.5);
cm.cm11=(sum((x-xmean).*(y-ymean).*A))/(m.m00^2);
cm.cm12=(sum((x-xmean).*(y-ymean).^2.*A))/(m.m00^2.5);
cm.cm20=(sum((x-xmean).^2.*A))/(m.m00^2);
cm.cm21=(sum((x-xmean).^2.*(y-ymean).*A))/(m.m00^2.5);
cm.cm30=(sum((x-xmean).^3.*A))/(m.m00^2.5);

im(1)=cm.cm20+cm.cm02;
im(2)=(cm.cm20-cm.cm02)^2+4*cm.cm11^2;
im(3)=(cm.cm30-3*cm.cm12)^2+(3*cm.cm21-cm.cm03)^2;
im(4)=(cm.cm30+cm.cm12)^2+(cm.cm21+cm.cm03)^2;
im(5)=(cm.cm30-3*cm.cm12)*(cm.cm30+cm.cm12)*((cm.cm30+cm.cm12)^2-3*(cm.cm21+cm.cm03)^2)...
+(3*cm.cm21-cm.cm03)*(cm.cm21+cm.cm03)*(3*(cm.cm30+cm.cm12)^2-(cm.cm21+cm.cm03)^2);
im(6)=(cm.cm20-cm.cm02)*((cm.cm30+cm.cm12)^2-(cm.cm21-cm.cm03))+4cm.cm11*(cm.cm30+cm.cm12)*(cm.cm21+cm.cm03);
im(7)=(3*cm.cm21-cm.cm03)*(cm.cm30+cm.cm12)*((cm.cm30+cm.cm12)^2-3*(cm.cm21+cm.cm03)^2)...
+(3*cm.cm12-cm.cm30)*(cm.cm21+cm.cm03)*(3*(cm.cm30+cm.cm12)^2-(cm.cm21+cm.cm03)^2);