1次直方图均衡化与2次直方图均衡的效果差异

本文有参考CSDN上的一篇文章

function [I]=HistEq(ImageOriginal)
%OriginalImage=imread('rice.png');
OriginalImage=ImageOriginal;
[height,width]=size(OriginalImage);
I=OriginalImage;
%calculate the num of pixel
c=zeros(1,256);
for i=1:height
    for j=1:width
        c(I(i,j)+1)=c(I(i,j)+1)+1;
    end
end
%calculate the density 
d=zeros(1,256);
for i=1:256
  d(i)=c(i)/(height*width*1.0);
end
%the enhanced density
p(1)=d(1);
for i=2:256
    p(i)=p(i-1)+d(i);
end
%the result of enhancemnet
p=uint8(255.*p+.5);
for i=1:height
    for j=1:width
        I(i,j)=p(I(i,j)+1);
    end
end
主函数

clc;
clear;
ImageOriginal=imread('rice.png');
gray=HistEq(ImageOriginal);
J=HistEq(gray);
K=HistEq(J);
if(J==K)
    fprintf('two times of histeq is equal');
else
    fprintf('two times of histeq is not equal');
end
输出 :two times of histeq is equal
由此可以看出两次直方图均衡化的结果是一样。

如果使用Matlab自带的histeq函数

clc;
clear;
ImageOriginal=imread('rice.png');
gray=histeq(ImageOriginal);
J=histeq(gray);
K=histeq(J);
if(J==K)
    fprintf('two times of histeq is equal');
else
    fprintf('two times of histeq is not equal');
end
输出结果: two times of histeq is equal

你可能感兴趣的:(1次直方图均衡化与2次直方图均衡的效果差异)