coarseness.m
%graypic为待处理的灰度图片,2^kmax为最大窗口 function Fcrs=coarseness(graypic,kmax) %获取图片大小 [h,w]=size(graypic); %平均灰度值矩阵A A=zeros(h,w,2^kmax); %计算有效可计算范围内每个点的2^k邻域内的平均灰度值 for i=2^(kmax-1)+1:h-2^(kmax-1) for j=2^(kmax-1)+1:w-2^(kmax-1) for k=1:kmax A(i,j,k)=mean2(graypic(i-2^(k-1):i+2^(k-1)-1,j-2^(k-1):j+2^(k-1)-1)); end end end %对每个像素点,计算在水平和垂直方向上不重叠窗口之间的Ak差 for i=1+2^(kmax-1):h-2^(kmax-1) for j=1+2^(kmax-1):w-2^(kmax-1) for k=1:kmax Eh(i,j,k)=abs(A(i+2^(k-1),j,k)-A(i-2^(k-1),j)); Ev(i,j,k)=abs(A(i,j+2^(k-1),k)-A(i,j-2^(k-1))); end end end
%对每个像素点计算使E达到最大值的k for i=2^(kmax-1)+1:h-2^(kmax-1) for j=2^(kmax-1)+1:w-2^(kmax-1) [maxEh,p]=max(Eh(i,j,:)); [maxEv,q]=max(Ev(i,j,:)); if maxEh>maxEv maxkk=p; else maxkk=q; end Sbest(i,j)=2^maxkk; %每个像素点的最优窗口大小为2^maxkk end end
%所有Sbest的均值作为整幅图片的粗糙度 Fcrs=mean2(Sbest);
调用:
image=rgb2gray(imread('example.jpg')); f=coarseness(image,5)
http://blog.sina.com.cn/s/blog_59ead5d90100gx1d.html转自
Tamura纹理特征的matlab实现(二)---对比度 (2010-01-13 21:40:27) TE<转载TE< var $tag='tamura,纹理特,对比度,it'; var $tag_code='c57dde215fc1a8b3216796890dd4f569'; var $r_quote_bligid='59ead5d90100gx4v'; var $worldcup='0'; var $worldcupball='0'; 标签: tamura 纹理特 对比度 it 分类: 学术
Tamura纹理特征之对比度(contrast),公式如下:
n一般取1/4。
contrast.m
%graypic为待处理的灰度图片 function Fcon=contrast(graypic) %二维向量一维化 x=graypic(:); %四阶矩 M4=mean((x-mean(x))^4); %方差 delta2=var(x,1); %峰度 alfa4=M4/(delta2^2); %标准差 delta=std(x,1); %对比度 Fcon=delta/(alfa4^(1/4));
调用:
image=rgb2gray(imread('example.jpg')); f=contrast(image)
Tamura纹理特征的matlab实现(三)---方向度 (2010-01-14 20:52:56) TE<转载TE< var $tag='tamura,纹理,方向度,it'; var $tag_code='4bad3c6c0fc81846213a62dc64c1a996'; var $r_quote_bligid='59ead5d90100gxkc'; var $worldcup='0'; var $worldcupball='0'; 标签: tamura 纹理 方向度 it 分类: 学术
directionality.m
function [Fdir,sita]=directionality(graypic) %sita为各像素点的角度矩阵,在线性度中会用到,所以这里作为结果返回 [h w]=size(graypic); %两个方向的卷积矩阵 GradientH=[-1 0 1 -1 0 1 -1 0 1]; GradientV=[ 1 1 1 0 0 0 -1 -1 -1]; %卷积,取有效结果矩阵 MHconv=conv2(graypic,GradientH); MH=MHconv(3:h,3:w); MVconv=conv2(graypic,GradientV); MV=MVconv(3:h,3:w) %向量模 MG=(abs(MH)+abs(MV))./2; %有效矩阵大小 validH=h-2; validW=w-2 %各像素点的方向 for i=1:validH for j=1:validW sita(i,j)=atan(MV(i,j)/MH(i,j))+(pi/2); end end
n=16; t=12; Nsita=zeros(1,n); %构造方向的统计直方图 for i=1:validH for j=1:validW for k=1:n if sita(i,j)>=(2*(k-1)*pi/2/n) && sita(i,j)<((2*(k-1)+1)*pi/2/n) && MG(i,j)>=t Nsita(k)=Nsita(k)+1; end end end end for k=1:n HD(k)=Nsita(k)/sum(Nsita(:)); end %假设每幅图片只有一个方向峰值,为计算方便简化了原著 [maxvalue,FIp]=max(HD); Fdir=0; for k=1:n Fdir=Fdir+(k-FIp)^2*HD(k);%公式与原著有改动 end
调用:
image=rgb2gray(imread('example.jpg'));
[Fdir,sita]=directionality(image)
Tamura纹理特征的matlab实现(四)---线性度 (2010-01-14 21:01:04) TE<转载TE< var $tag='tamura,纹理,线性度,it'; var $tag_code='e3de83ab0ce44a1975fe0fc93d4a6717'; var $r_quote_bligid='59ead5d90100gxke'; var $worldcup='0'; var $worldcupball='0'; 标签: tamura 纹理 线性度 it 分类: 学术
linelikeness.m
function Flin=linelikeness(graypic,sita,d) %d为共生矩阵计算时的像素间隔距离 n=16; [h,w]=size(graypic); %构造方向共生矩阵 PDd1=zeros(n,n); PDd2=zeros(n,n); PDd3=zeros(n,n); PDd4=zeros(n,n); PDd5=zeros(n,n); PDd6=zeros(n,n); PDd7=zeros(n,n); PDd8=zeros(n,n); for i=d+1:h-d-2 for j=d+1:w-d-2 for m1=1:n for m2=1:n %下方向 if (sita(i,j)>=(2*(m1-1)*pi/2/n) && sita(i,j)<((2*(m1-1)+1)*pi/2/n)) && (sita(i+d,j)>=(2*(m2-1)*pi/2/n) && sita(i+d,j)<((2*(m2-1)+1)*pi/2/n)) PDd1(m1,m2)=PDd1(m1,m2)+1; end %上方向 if (sita(i,j)>=(2*(m1-1)*pi/2/n) && sita(i,j)<((2*(m1-1)+1)*pi/2/n)) && (sita(i-d,j)>=(2*(m2-1)*pi/2/n) && sita(i-d,j)<((2*(m2-1)+1)*pi/2/n)) PDd2(m1,m2)=PDd2(m1,m2)+1; end %右方向 if (sita(i,j)>=(2*(m1-1)*pi/2/n) && sita(i,j)<((2*(m1-1)+1)*pi/2/n)) && (sita(i,j+d)>=(2*(m2-1)*pi/2/n) && sita(i,j+d)<((2*(m2-1)+1)*pi/2/n)) PDd3(m1,m2)=PDd3(m1,m2)+1; end %左方向 if (sita(i,j)>=(2*(m1-1)*pi/2/n) && sita(i,j)<((2*(m1-1)+1)*pi/2/n)) && (sita(i,j-d)>=(2*(m2-1)*pi/2/n) && sita(i,j-d)<((2*(m2-1)+1)*pi/2/n)) PDd4(m1,m2)=PDd4(m1,m2)+1; end %右下方向 if (sita(i,j)>=(2*(m1-1)*pi/2/n) && sita(i,j)<((2*(m1-1)+1)*pi/2/n)) && (sita(i+d,j+d)>=(2*(m2-1)*pi/2/n) && sita(i+d,j+d)<((2*(m2-1)+1)*pi/2/n)) PDd5(m1,m2)=PDd5(m1,m2)+1; end %右上方向 if (sita(i,j)>=(2*(m1-1)*pi/2/n) && sita(i,j)<((2*(m1-1)+1)*pi/2/n)) && (sita(i-d,j+d)>=(2*(m2-1)*pi/2/n) && sita(i-d,j+d)<((2*(m2-1)+1)*pi/2/n)) PDd6(m1,m2)=PDd6(m1,m2)+1; end %左下方向 if (sita(i,j)>=(2*(m1-1)*pi/2/n) && sita(i,j)<((2*(m1-1)+1)*pi/2/n)) && (sita(i+d,j-d)>=(2*(m2-1)*pi/2/n) && sita(i+d,j-d)<((2*(m2-1)+1)*pi/2/n)) PDd7(m1,m2)=PDd7(m1,m2)+1; end %左上方向 if (sita(i,j)>=(2*(m1-1)*pi/2/n) && sita(i,j)<((2*(m1-1)+1)*pi/2/n)) && (sita(i-d,j-d)>=(2*(m2-1)*pi/2/n) && sita(i-d,j-d)<((2*(m2-1)+1)*pi/2/n)) PDd8(m1,m2)=PDd8(m1,m2)+1; end end end end end f=zeros(1,8); g=zeros(1,8); for i=1:n for j=1:n f(1)=f(1)+PDd1(i,j)*cos((i-j)*2*pi/n); g(1)=g(1)+PDd1(i,j); f(2)=f(2)+PDd2(i,j)*cos((i-j)*2*pi/n); g(2)=g(2)+PDd2(i,j); f(3)=f(3)+PDd3(i,j)*cos((i-j)*2*pi/n); g(3)=g(3)+PDd3(i,j); f(4)=f(4)+PDd4(i,j)*cos((i-j)*2*pi/n); g(4)=g(4)+PDd4(i,j); f(5)=f(5)+PDd5(i,j)*cos((i-j)*2*pi/n); g(5)=g(5)+PDd5(i,j); f(6)=f(6)+PDd6(i,j)*cos((i-j)*2*pi/n); g(6)=g(6)+PDd6(i,j); f(7)=f(7)+PDd7(i,j)*cos((i-j)*2*pi/n); g(7)=g(7)+PDd7(i,j); f(8)=f(8)+PDd8(i,j)*cos((i-j)*2*pi/n); g(8)=g(4)+PDd8(i,j); end end tempM=f./g; Flin=max(tempM);%取8个方向的线性度最大值作为图片的线性度
调用:
image=rgb2gray(imread('example.jpg'));
Flin=linelikeness(image,sita,4) %sita为directionality.m返回的结果
Tamura纹理特征的matlab实现(五)---规则度 (2010-01-14 21:04:09) TE<转载TE< var $tag='tamura,纹理,规则度,it'; var $tag_code='39947dd3859a0df41f3f4de84b8d3520'; var $r_quote_bligid='59ead5d90100gxkj'; var $worldcup='0'; var $worldcupball='0'; 标签: tamura 纹理 规则度 it 分类: 学术
regularity.m
function Freg=regularity(graypic,windowsize) %windowsize为计算规则度的子窗口大小 [h,w]=size(graypic); k=0; for i=1:windowsize:h-windowsize for j=1:windowsize:w-windowsize k=k+1; crs(k)=coarseness(graypic(i:i+windowsize-1,j:j+windowsize-1),5); %粗糙度 con(k)=contrast(graypic(i:i+windowsize-1,j:j+windowsize-1)); %对比度 [dire(k),sita]=directionality(graypic(i:i+windowsize-1,j:j+windowsize-1));%方向度 lin=linelikeness(graypic(i:i+windowsize-1,j:j+windowsize-1),sita,4)*10; %线性度,*10与crs、con、dire同量级化 end end %求上述各参数的标准差 Dcrs=std(crs,1); Dcon=std(con,1); Ddir=std(dire,1); Dlin=std(lin,1); %规则度 Freg=1-(Dcrs+Dcon+Ddir+Dlin)/4/100;
调用:
image=rgb2gray(imread('example.jpg'));
Freg=regularity(image,64)
Tamura纹理特征的matlab实现(六)---粗略度 (2010-01-14 21:11:07) TE<转载TE< var $tag='tamura,纹理,粗略度,it'; var $tag_code='fc001e7750cac6917c3061ca68bff398'; var $r_quote_bligid='59ead5d90100gxkl'; var $worldcup='0'; var $worldcupball='0'; 标签: tamura 纹理 粗略度 it 分类: 学术
粗略度计算比较简单,是粗糙度和对比度两个属性的合成:
Frgh=Fcrs+Fcon
至此Tamura纹理特征的六个属性终于实现了,工作了一天半,好辛苦。属于经典算法,并没有创新性,所以还要在此基础上做进一步的研究和应用。