matlab练习程序(Renyi熵)

Renyi熵是对通常的香农熵的扩展,算是q阶广义熵。公式如下:

其中P和香农熵公式中的P一样,是概率。当q=1时公式退化为香农熵公式。(如何证明?)

有用此公式寻找图像最佳二值化阈值的。

首先定义前景区域A,背景区域B。

那么前景与背景区域像素相应的Renyi熵就如下定义:

其中k是当前取的灰度级,P(A)是像素在A区域的概率,P(B)类似。当然,这里说区域,不是指空间区域,是像素灰度级区域。

最后图像Renyi熵求最佳阈值定义如下:

这里得到的K就是分割阈值。

分割效果如下:

原图:

分割后:

在编程时还需要确定阶数q,我取的是2。

matlab代码如下:

clear all;
close all;
clc;

img=imread(lena.jpg);
[m n]=size(img);
imshow(img)

Hist=imhist(img);
q=2;
H=[];
for k=2:256
    PA=sum(Hist(1:k-1));
    PB=sum(Hist(k:255));
    
    Pa=Hist(1:k-1)/PA;
    Pb=Hist(k:256)/PB;
    
    HA=(1/1-q)*log(sum(Pa.^q));
    HB=(1/1-q)*log(sum(Pb.^q));
    
    H=[H HA+HB];    
end

[junk level]=max(H);
imgn=im2bw(mat2gray(img),level/256);
figure;
imshow(imgn)
clear all; close all; clc; img=imread(lena.jpg); [m n]=size(img); imshow(img) Hist=imhist(img); q=2; H=[]; for k=2:256 PA=sum(Hist(1:k-1)); PB=sum(Hist(k:255)); Pa=Hist(1:k-1)/PA; Pb=Hist(k:256)/PB; HA=(1/1-q)*log(sum(Pa.^q)); HB=(1/1-q)*log(sum(Pb.^q)); H=[H HA+HB]; end [junk level]=max(H); imgn=im2bw(mat2gray(img),level/256); figure; imshow(imgn)
Renyi熵是对通常的香农熵的扩展,算是q阶广义熵。公式如下: 其中P和香农熵公式中的P一样,是概率。当q=1时公式退化为香农熵公式。(如何证明?) 有用此公式寻找图像最佳二值化阈值的。 首先定义前景区域A,背景区域B。 那么前景与背景区域像素相应的Renyi熵就如下定义: 其中k是当前取的灰度级,P(A)是像素在A区域的概率,P(B)类似。当然,这里说区域,不是指空间区域,是像素灰度级区域。 最后图像Renyi熵求最佳阈值定义如下: 这里得到的K就是分割阈值。 分割效果如下: 原图: 分割后: 在编程时还需要确定阶数q,我取的是2。 matlab代码如下: clear all; close all; clc; img=imread(lena.jpg); [m n]=size(img); imshow(img) Hist=imhist(img); q=2; H=[]; for k=2:256 PA=sum(Hist(1:k-1)); PB=sum(Hist(k:255)); Pa=Hist(1:k-1)/PA; Pb=Hist(k:256)/PB; HA=(1/1-q)*log(sum(Pa.^q)); HB=(1/1-q)*log(sum(Pb.^q)); H=[H HA+HB]; end [junk level]=max(H); imgn=im2bw(mat2gray(img),level/256); figure; imshow(imgn)
经验分享 程序员 微信小程序 职场和发展