matlab练习程序(图像局部熵)
2013-04-11 15:12
633 查看
又被国内论文坑了,话说写论文要有良心。
今天在看局部熵方面的内容,看论文中介绍的内容感觉局部熵挺容易了,于是就有了实现的想法,结果效果非常糟糕。
得到的几乎是一张空白的图片,就像下面一样:
究其原因是各种论文上都写了这样一个公式:
这里f(i,j)就是在m*n这个局部的像素,这个没问题,不过这里的p是什么东西,按这里的定义p是当前像素灰度占局部总灰度的概率,而p原本应该是局部直方图,也就是当前像素灰度个数占局部像素总个数的概率,所以这里的意义我也不明白了,结果按公式计算就得到了上图,和各种论文中的图都不一样。
而真正的公式应该是这样:
熵的公式本来不就是这样么,这里的p是归一化后的局部直方图。
这样运行的结果就正确了,和matlab系统提供的entropyfilt函数结果是一样的。
自己函数处理的
系统函数处理的
matlab代码如下:
今天在看局部熵方面的内容,看论文中介绍的内容感觉局部熵挺容易了,于是就有了实现的想法,结果效果非常糟糕。
得到的几乎是一张空白的图片,就像下面一样:
究其原因是各种论文上都写了这样一个公式:
这里f(i,j)就是在m*n这个局部的像素,这个没问题,不过这里的p是什么东西,按这里的定义p是当前像素灰度占局部总灰度的概率,而p原本应该是局部直方图,也就是当前像素灰度个数占局部像素总个数的概率,所以这里的意义我也不明白了,结果按公式计算就得到了上图,和各种论文中的图都不一样。
而真正的公式应该是这样:
熵的公式本来不就是这样么,这里的p是归一化后的局部直方图。
这样运行的结果就正确了,和matlab系统提供的entropyfilt函数结果是一样的。
自己函数处理的
系统函数处理的
matlab代码如下:
clear all; close all; clc; img=imread('lena.jpg'); [m n]=size(img); w=3; %模板半径 imgn=zeros(m,n); for i=1+w:m-w for j=1+w:n-w Hist=zeros(1,256); for p=i-w:i+w for q=j-w:j+w Hist(img(p,q)+1)=Hist(img(p,q)+1)+1; %统计局部直方图 end end Hist=Hist/sum(Hist); for k=1:256 if Hist(k)~=0 imgn(i,j)=imgn(i,j)+Hist(k)*log(1/Hist(k)); %局部熵 end end %{ p=sum(sum(img(i-w:i+2,j-w:j+w))); %这里是按第一个公式写的 s=img(i-w:i+w,j-w:j+w)/p; imgn(i,j)=-sum(sum(s.*log(s))); %} end end imshow(imgn,[]) imgn=entropyfilt(img); %系统的局部熵函数 figure; imshow(imgn,[])
相关文章推荐
- matlab练习程序(图像旋转,双线性插值)
- matlab练习程序(LBP,局部二值模型)
- matlab练习程序(图像Haar小波变换)
- matlab练习程序(随机游走图像)
- matlab练习程序(图像自动聚焦)
- matlab练习程序(meanshift图像聚类)
- matlab练习程序(图像旋转,最邻近插值)
- 局部边缘保持滤波(LEP)高动态范围图像HDR压缩 matlab程序(一)
- matlab练习程序(zs图像细化)
- matlab练习程序(meanshift图像聚类)
- matlab练习程序(图像滤波时的边界处理2)
- matlab练习程序(图像放大/缩小,放大没有进行插值操作)
- matlab练习程序(TV模型图像修复)
- matlab练习程序(LBP,局部二值模型)
- matlab练习程序(图像滤波时的边界处理)
- matlab练习程序(图像傅里叶变换,幅度谱,相位谱)
- matlab练习程序(图像马赛克)
- matlab练习程序(图像加噪,各种滤波)
- 【转】matlab练习程序(奇异值分解压缩图像)
- matlab练习程序(最大类间方差二值化图像)