加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

如何编写求图像的粗糙度的Matlab程序?

(2008-02-23 02:48:31)
标签:

matlab编程

matlab编程技巧

it

Tamura等概括了6个与人的视觉感受相关的图像纹理特征,粗糙度就是其中之一,其对纹理的描述能力很强,其在纹理合成、图像分析、识别、颜色迁移等方面具有较多的应用价值。

下面介绍作者编写的一个图像粗糙度的函数coarseness(),可以直接调用。可以用于求图像的局部粗糙度,也可以求其整体粗糙度。

%%求粗糙度coarseness

function ent=coarseness(pic,ks) 

% pic表示图像,ks求粗糙度的最大的窗口尺寸

[h w]=size(pic)

h1=h-ks;

w1=w-ks;

 

%%求平均强度

picmean=zeros(h1,w1,ks);

picmean(:,:,1)=pic(1:h1,1:w1);

for k=1:ks-1

    for i=1:h1

        for j=1:w1

            picwindow=pic(i:i+k,j:j+k);

            picmean(i,j,k+1)=mean2(picwindow);

        end

    end

end

%%求两个方向窗口不重叠的最大差值

h2=h1-ks;

w2=w1-ks;

picmax3=zeros(h2,w2,ks);

for k=1:ks

    pic_h_deference=picmean(1+k:h2+k,1:w2,k);    %水平方向

    pic_v_deference=picmean(1:h2,1+k:w2+k,k);    %垂直方向

    pic_d_deference=picmean(1+k:h2+k,1+k:w2+k,k);    %对角方向

   

    pic_h_deference=abs(pic_h_deference-picmean(1:h2,1:w2,k));

    pic_v_deference=abs(pic_v_deference-picmean(1:h2,1:w2,k));

    pic_d_deference=abs(pic_d_deference-picmean(1:h2,1:w2,k));

    picmax3(:,:,k)=max(max(pic_h_deference,pic_v_deference),pic_d_deference);

end

[picmax2,maxk]=max(picmax3,[],3);     % 确定极大值的位置

 

ent=mean2(2.^maxk);

    一般的粗糙度计算只考虑水平垂直方向,这里增加了对角方向(斜向)。读者可以思考一下这样做有什么优势和劣势。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有