MATLAB图像处理之直方图均衡原理及实现(图像增强)
%直方图均衡化
%直方图中可以看出像素在灰度等级下的分布
%有些图片的直方图分布集中某些灰度区间,导致视觉上图片的对比度不高
%可以通过直方图均衡技术,将灰度分布变得均匀,使的图像对比度增大。
%直方图均衡要经历下满四个步骤
% 遍历全图,先统计每个灰度级下的像素点个数(为此我们开辟了256大小的数组);
% 计算每个灰度级的像素点占总像素的点的比例;
% 按照第二步求出的比例重新计算每个灰度级下的新的灰度值,即均衡化;
% 依照新的灰度值表遍历更新图像的灰度值。
%例子
%假设64*64像素的3Bit图像灰度分布如下
%rk nk pk=nk/n
%r0=0 790 0.19
%r1=1 1023 0.25
%r2=2 850 0.21
%r3=3 656 0.16
%r4=4 329 0.08
%r5=5 245 0.06
%r6=6 122 0.03
%r7=7 81 0.02
%sk=(L-1)*SUM(pk)直方图均衡化公式 得到映射的下表
%s0=1.33->1 s1=3.08->3 s2=4.55->5 s3=5.67->6
%s4=6.23->6 s5=6.65->7 s6=6.86->7 s7=7.00->7
%均衡化后有5个灰度级了
%r0的790个像素 映射成 s0 取1
%r1的1023个像素 映射成 s1 取3
%r2的850个像素 映射成 s2 取5
%r3的656个像素 映射成 s3 取6
%r4的656个像素 映射成 s4 取6
%r5的245个像素 映射成 s5 取7
%r6的122个像素 映射成 s6 取7
%r7的81个像素 映射成 s7 取7
%相当于r3 4 映射成一个等级的
%r5 6 7 映射成一个等级
%MATLAB中用histeq实现
%g=histeq(f,nlev)
clc
clear
f=imread('D:\MATLAB图像处理\亮度调节与空间滤波\6.jpg');
subplot(2,2,1)
imshow(f);
subplot(2,2,2)
imhist(f);
xlim('auto')
ylim('auto')
subplot(2,2,3)
g=histeq(f);%直方图均衡化
imshow(g)
subplot(2,2,4)
imhist(g)xlim('auto')%自动适应x轴的长度
ylim('auto')%自动适应y轴的长度
结果如下: