一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

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

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

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

这里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,[])
复制代码

 

posted on   一杯清酒邀明月  阅读(1376)  评论(1编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示