Tamura纹理特征的matlab实现(6个分量)

Tamura纹理特征的matlab实现(一)---粗糙度

 基于人类对纹理的视觉感知的心理学的研究,Tamura等人提出了纹理特征的表达[14]。Tamura纹理特征的六个分量对应于心理学角度上纹理特征的六种属性,分别是粗糙度(coarseness)、对比度(contrast)、方向度(directionality)、 线像度(linelikeness)、规整度(regularity)和粗略度(roughness)。其中,前三个分量对于图像检索尤其重要[e.g,15]。

 

搜了好久也没找到Tamura纹理特征的实现代码,于是自己动手丰衣足食,找出了最原始的Tamura的论文《Textural Features Corresponding to Visual Perception》来研读。今天下午实现了粗糙度(coarseness)部分,与大家共享,有错误的地方,还望大家指正。后续的对比度(contrast)、方向度(directionality)、线性度(linelikeness)、规则度(regularity)、粗略度(roughness)会陆续实现并共享。

 

    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)

 

 

posted on 2012-06-11 22:39  Hanson-jun  阅读(3121)  评论(0编辑  收藏  举报