数字图像处理---直方图均衡化与规定化(MATLAB实现含源码)

直方图均衡化与规定化(MATLAB实现)

【实验目的】

掌握对图像进行操作,实现图像的直方图均衡算法。
1、掌握求灰度图像归一化直方图方法
2、掌握灰度图像的直方图均衡算法
3、掌握对彩色图像进行直方图均衡的算法
4、掌握直方图匹配算法
5、掌握MATLAB的基本操作,计算直方图,并显示

【实验原理】

直方图均衡化(Histogram Equalization):
把一个已知灰度概率密度分布的图像经过一种变换,使之演变为一幅具有均匀灰度概率密度分布的新图像。如果一幅图像占有全部可能的灰度级,并且均匀分布,则该图像具有高对比度和多变的灰色色调,图像细节丰富,质量更高。
直方图匹配:
直方图匹配,又称直方图规定化,即变换原图的直方图为规定的某种形式的直方图,从而使两幅图像具有类似的色调和反差。直方图匹配属于非线性点运算。
直方图匹配的原理:对两个直方图都做均衡化,变成相同的归一化的均匀直方图,以此均匀直方图为媒介,再对参考图像做均衡化的逆运算。

【实验内容】

1、 计算灰度图像的归一化直方图,利用MATLAB对图像像素进行操作,计算归一化直方图,设计算法实现均衡化处理,并将均衡化前后的直方图以及原始图像和直方图均衡化后的图像在窗口中以两行两列图形的方式显示出来。
代码如下:

clc;
g=imread('nj.jpg');

I=rgb2gray(g);
I=uint8(I);
I1=zeros(1,256);
I2=zeros(1,256);
new_I1=zeros(1,256);
new_I2=zeros(1,256);
[h,w]=size(I);
new_I=zeros(h,w);
%计算原图各灰度级的概率密度
for i=1:h
    for j=1:w
        I1(1,I(i,j))=I1(1,I(i,j))+1;
    end
end
I2=I1/sum(I1);
subplot(221),imshow(I);
title('原始图像');
subplot(222),plot(I2);
xlabel('灰度级');
ylabel('各灰度级概率分布');
title('原始图像的直方图');
%计算原图的累计直方图
for i=2:256
    I2(1,i)=I2(1,i)+I2(1,i-1);
end
for i=1:256
    t(1,i)=floor(255*I2(1,i)+0.5);
end
for i=1:256
    new_I1(1,t(1,i)+1)=new_I1(1,t(1,i)+1)+I1(1,i);
end
new_I2=new_I1/sum(new_I1);
for x=1:h
    for y=1:w
        new_I(x,y)=t(1,I(x,y));
    end
end
subplot(223),imshow(new_I,[]);
title('直方图均衡化后的图像');
subplot(224),plot(new_I2);
xlabel('灰度级');
ylabel('各灰度级概率分布');

2、 用MATLAB自带函数histeq( )进行灰度图像直方图均衡化,将原始图像和均衡化后的图像以及二者直方图用两行两列图显示出来。
代码如下:

clc;
I=imread('nj.jpg');
I=rgb2gray(I);
J=histeq(I);%直方图均衡化
figure
subplot(221),imshow(I);
title('原始图像');
subplot(223),imshow(J);
title('均衡化后的图像');
subplot(222),imhist(I);
title('原始图像的直方图');
subplot(224),imhist(J);
title('均衡化后的图像的直方图');

3、 读取两幅图像,获取期望图像的直方图,用MATLAB中的histeq( )函数进行直方图匹配,将原始图像、期望图像、输出图像用一幅一行三列的图输出,将原始图像直方图、期望图像直方图、输出图像直方图用三行一列的图输出。

代码如下:

clc;
I=imread('pic.jpg');
Imatch=imread('leaves.jpg');
Jmatch=imhist(Imatch);%获取期望图像的
Iout=histeq(I,Jmatch);%直方图匹配
figure
subplot(1,3,1),imshow(I);
title('原始图像');
subplot(1,3,2),imshow(Imatch);
title('期望图像');
subplot(1,3,3),imshow(Iout);
title('输出图像');
figure
subplot(3,1,1),imhist(I);
title('原始图像直方图');
subplot(3,1,2),imhist(Imatch);
title('期望图像直方图');
subplot(3,1,3),imhist(Iout);
title('输出图像直方图');

【实验结果分析】

灰度图像均衡化结果如下:

在这里插入图片描述
在这里插入图片描述
均衡化后的直方图分布更均匀,相邻像素级概率和与高概率差值较小,展现出更多细节信息。
这种方法也存在一些缺点:
1、 增强后图像的灰度级会变少,部分细节会消失;
2、 当输入图像的直方图有非常密集的部分时,增强后的图像的对比度会增强过度。

MATLAB函数灰度图像均衡化结果如下:

在这里插入图片描述
在这里插入图片描述

MATLAB函数直方图匹配结果如下:

例一:
在这里插入图片描述
在这里插入图片描述
例二:
在这里插入图片描述
在这里插入图片描述
直方图匹配是根据期望图像调整图像的直方图,所以直方图匹配的结果是调整了图像的全局亮度、对比度,这是一种调整图像对比度的图像增强方法。
直方图为对图片像素点进行灰度值统计而得到的一个灰度分布图表,反映的是图像的全局灰度分布情况。而直方图均衡化是将直方图进行“均匀”后重新得到一个直方图,而直方图匹配时将直方图按照一个规定的直方图形态的实际去进行调整,最后得到新的直方图与规定的直方图形态很相似。直方图均衡化和直方图匹配相同点都是将原图像直方图按照一定的方式进行调整,只不过调整的方式有所区别,可以将直方图均衡化看作是直方图匹配在规定的直方图形态为均匀分布条件下的特例。

猜你喜欢

转载自blog.csdn.net/weixin_45818370/article/details/124128203
今日推荐