Tamura纹理特征

 

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纹理特征的六个属性终于实现了,工作了一天半,好辛苦。属于经典算法,并没有创新性,所以还要在此基础上做进一步的研究和应用。

posted @ 2013-10-08 14:03  DAVID‘sVISION  阅读(4153)  评论(0编辑  收藏  举报