MATLAB 图像局部熵

技术文章 11个月前 完美者
1,231 0

标签:个数   http   sum   atl   str   原因   pre   mat   统计局   

今天在看局部熵方面的内容,看论文中介绍的内容感觉局部熵挺容易了,于是就有了实现的想法,结果效果非常糟糕。

得到的几乎是一张空白的图片,就像下面一样:

技术图片

究其原因是各种论文上都写了这样一个公式:

技术图片

这里f(i,j)就是在m*n这个局部的像素,这个没问题,不过这里的p是什么东西,按这里的定义p是当前像素灰度占局部总灰度的概率,而p原本应该是局部直方图,也就是当前像素灰度个数占局部像素总个数的概率,所以这里的意义我也不明白了,结果按公式计算就得到了上图,和各种论文中的图都不一样。

而真正的公式应该是这样:

技术图片

熵的公式本来不就是这样么,这里的p是归一化后的局部直方图。

这样运行的结果就正确了,和matlab系统提供的entropyfilt函数结果是一样的。

技术图片自己函数处理的

技术图片系统函数处理的

matlab代码如下:

 1 clear all;  2 close all;  3 clc;  4 
 5 img=imread(lena.jpg);  6 [m n]=size(img);  7 w=3;    %模板半径  8 imgn=zeros(m,n);  9 for i=1+w:m-w 10     for j=1+w:n-w 11         
12         Hist=zeros(1,256); 13         for p=i-w:i+w 14             for q=j-w:j+w 15                 Hist(img(p,q)+1)=Hist(img(p,q)+1)+1;    %统计局部直方图 16  end 17  end 18         Hist=Hist/sum(Hist); 19         for k=1:256
20             if Hist(k)~=0
21                imgn(i,j)=imgn(i,j)+Hist(k)*log(1/Hist(k));  %局部熵 22  end 23  end 24         %{ 25         p=sum(sum(img(i-w:i+2,j-w:j+w)));   %这里是按第一个公式写的 26         s=img(i-w:i+w,j-w:j+w)/p; 27         imgn(i,j)=-sum(sum(s.*log(s))); 28         %} 29  end 30 end 31 imshow(imgn,[]) 32 
33 imgn=entropyfilt(img);         %系统的局部熵函数 34 figure; 35 imshow(imgn,[])

 

MATLAB 图像局部熵

标签:个数   http   sum   atl   str   原因   pre   mat   统计局   

原文地址:https://www.cnblogs.com/ybqjymy/p/13646478.html

版权声明:完美者 发表于 2020-09-17 20:58:05。
转载请注明:MATLAB 图像局部熵 | 完美导航

暂无评论

暂无评论...