注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

notes

@-@

 
 
 

日志

 
 
 
 

Tamura纹理特征  

2012-11-17 23:20:05|  分类: matlab |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://blog.sina.com.cn/s/blog_59ead5d90100gx1d.html

搜了好久也没找到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)

Tamura纹理特征之对比度(contrast),公式如下:

Tamura纹理特征的matlab实现(二)---对比度

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)


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)

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返回的结果

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)

  评论这张
 
阅读(3191)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018