tamura纹理特征 JAVA_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)

Tamura纹理特征的matlab实现(二)---对比度  (2010-01-13 21:40:27) TE

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

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)=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

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*(m2-1)*pi/2/n) && sita(i+d,j)=(2*(m1-1)*pi/2/n) && sita(i,j)=(2*(m2-1)*pi/2/n) && sita(i-d,j)=(2*(m1-1)*pi/2/n) && sita(i,j)=(2*(m2-1)*pi/2/n) && sita(i,j+d)=(2*(m1-1)*pi/2/n) && sita(i,j)=(2*(m2-1)*pi/2/n) && sita(i,j-d)=(2*(m1-1)*pi/2/n) && sita(i,j)=(2*(m2-1)*pi/2/n) && sita(i+d,j+d)=(2*(m1-1)*pi/2/n) && sita(i,j)=(2*(m2-1)*pi/2/n) && sita(i-d,j+d)=(2*(m1-1)*pi/2/n) && sita(i,j)=(2*(m2-1)*pi/2/n) && sita(i+d,j-d)=(2*(m1-1)*pi/2/n) && sita(i,j)=(2*(m2-1)*pi/2/n) && sita(i-d,j-d)

调用:

image=rgb2gray(imread('example.jpg'));

Flin=linelikeness(image,sita,4)    %sita为directionality.m返回的结果

Tamura纹理特征的matlab实现(五)---规则度 (2010-01-14 21:04:09) TE

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

粗略度计算比较简单,是粗糙度和对比度两个属性的合成:

Frgh=Fcrs+Fcon

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值