(2)归一化直方图
用图像中像素的总个数N去除nk的每一个值,得到归一化直方图:
p(k)= nk/N k =0 , 1 , ... , L-1
其中,p(k)表示一幅图像中灰度级k出现的频率。注意∑p(k)=1。
图像的灰度直方图p(k)是一个一维离散函数,它给出了灰度取值k发生概率的一个估计,反应图像的灰度分布情况,是从总体上描述图像的一种方法。
2.1.2 直方图均衡的原理直方图均衡可以将任意分布规律直方图的原始图像变换为具有均匀分布直方图的图像。
显然,直方图均衡化可以增加像素灰度值的动态范围,使每一灰度层次所占的像素个数尽量均等,可以改善图像的整体对比度。
下面在灰度值为模拟量的情况下讨论直方图均衡的算法原理。
1)基本思想
把原始图的直方图变换为均匀分布的形式,增加像素灰度值的动态范围以增强图像整体对比度。
2)均衡定义
将图像转换为具有均匀分布直方图的图像,这一过程叫做直方图均衡。一般认为直方图p(k)为常数的图像具有高对比度和多变的灰度层次。
对于每一个像素点(x,y),若原始图像灰度值为f(x,y)=k,经过增强处理后成为
g(x,y)=k',则增强变换函数为,其中k' = T(k)k = 0, 1 , ... , L-1。
这样直方图均衡的问题就转化为:寻找一个变换函数T(r),使变换后图像灰度的概率密度函数ps(s)=1,即期望输出图像中每一灰度级有相同的概率。
3)算法原理
设s可由T(r)得到,即
s= T(r) 0 ≤ r ≤ 1
变换T(r)需要满足两个条件:
(1)T(r)在区间0 ≤ r ≤ 1上为单值且单调递增;
(2)当0 ≤ r ≤ 1时,0 ≤ s ≤ 1。
相应的反变换为:
r= T -1(s) 0 ≤ s ≤ 1
反变换T -1(s)也满足上述两个条件。
以连续图像为例,分析T(r)变换推到的过程:
要求dr和ds区间内像素点个数是不变的,有:
当dr→0,ds→0,略去下标j,由于s =T(r),p(s)= 1,则最终得到直方图均衡化的灰度变换函数为:
S称作原始图像灰度级r的累积分布函数,可以验证S满足前述两个条件。如图显示了连续图像的直方图均衡原理。
2.1.3 直方图均衡的方法1)均衡过程
对于数字图像,其直方图均衡化处理的计算步骤如下:
(1)统计原始图像的归一化直方图。
其中,rk是归一化的输入图像灰度级。
(2)用累积分布函数作变换函数进行图像灰度变换。
(3)建立输入图像与输出图像灰度级之间的对应关系,将变换后灰度级回复成原先的灰度级分为。
与连续形式不同,一般不能证明离散变换能够产生均匀概率密度函数的离散值(均匀直方图)。但是可以很容易看出,此算式的应用有展开输入图像直方图的一般趋势,因此均衡后的图像灰度级能够跨越更大的动态范围。
2)均衡示例
下面给出一个例子说明数字图像直方图均衡的处理过程。
设一幅图像的尺寸为64*64,像素的灰度层次L = 8(8个灰度等级)。则该图像共有
N = 64 * 64 = 4096个像素,如图为图像的直方图。
该图像共有4096个像素点,每个像素用3个比特表示,有0~7共8个灰度。原始图像的灰度分布情况从下表中可以看出,灰度的频率最小为0.02,最大为0.25。显然,直方图呈非均匀分布。
直方图均衡化处理的计算过程和结果如下表所示。
直方图均衡化处理的计算过程和结果
结果如下图所示。
3)图像直方图均衡后分析
(1)变换后直方图趋于平坦,灰度级减少,灰度进行了合并。
(2)变换后含有像素数多的几个灰级间隔被拉大了,压缩的只是像素数少的几个灰度级,实际视觉能够接收的信息量大大地增强了。
可见,直方图均衡处理可以使像素灰度的动态范围增加,有时能够明显改善图像的视觉效果。
下图给出四幅实际图像的直方图均衡效果。
可以看出,应用直方图均衡,明显改善了原始灰度级别动态范围较窄的图像的视觉效果。
2.2matlab实现 对一幅给定图像做直方图均衡处理,我们的Matlab代码如下:
%load origin image
I = imread('Lena_gray.bmp');
%show origin image and its histogramdiagram
figure(1)
subplot(2,2,1)
imshow(I)
subplot(2,2,2)
imhist(I)
title('Histogram of OriginImage')
%histogram calculation
[height,width] = size(I);
nk = zeros(1,256);
for i = 1:height
for j = 1: width
nk(I(i,j)+1)=nk(I(i,j)+1)+1;
end
end
pk = zeros(1,256);
pk=nk./(height*width);
%histogram equalization
sk = zeros(1,256);
sk(1) = pk(1);
for i = 2:256
sk(i) = sk(i - 1) + pk(i);
end
kt=zeros(1,256);
kt = uint8(255 .* sk);
F=zeros(size(I));
for i = 1:height
for j = 1: width
F(i,j) = kt(I(i,j)+1);
end
end
%% output kt
M = F';
fidkt = fopen('image_out_hex.txt','wt');
fprintf(fidkt, '%x
', M);
fidkt = fclose(fidkt);
%show image after hitogramequalization
F=uint8(F);
subplot(2,2,3)
imshow(F)
title('Histogram EqualizationImage')
subplot(2,2,4)
imhist(F)
title('Image of Histogram EqualizationImage')
滤波效果如下。可以看到原图比较灰暗,对比度不强,它的直方图统计结果显示,它的大部分像素值集中在0~100的区域内。而做过直方图均衡的图像,对比度明显增强,图像也相对更清晰,随着而来的可能是图像的噪点也被凸显出来,从它的直方图看,从原图比较集中在局部,变化为在真个0~255区间相对均匀的分布,这就是直方图均衡希望达到的效果。
Matlab源码、Lena_gray.jpg原图和比对图存放在projectzstar_ex66matlab文件夹下。
3基于FPGA的直方图均衡处理 工程文件夹projectzstar_ex66zstar.srcssources_1
ew下的laplace_transform.v模块实现了图像的拉普拉斯边缘提取处理。该模块功能框图如下,使用2个FIFO,分别缓存前后行,即进入图像处理的3组数据流分别是第n-1行、第n行和第n+1行的图像,控制输入数据流和2个FIFO缓存的图像在同一个位置、寄存器对前后2个像素的图像值进行缓存,这样便可实现中心像素点以及前后列、上下行之间数据的同步处理了。
4装配说明 MT9V034摄像头模块通过Zstar ISB底板(P3)与Zstar Zynq
开发板连接,VGA也是通过Zstar ISB底板与Zstar Zynq开发板连接,VGA板同时需要连接到VGA显示器。连接示意如图所示。
5板级调试 本实例对应ex66实例工程,已经制作好的BOOT.bin放置在工程路径“zstar_ex66zstar.sdkBOOT”下。也可以参考文档《玩转Zynq-实例篇:[ex51] 制作裸跑程序的启动文件BOOT.bin.pdf》制作包含.bit文件的BOOT.bin文件,将其拷贝到TF卡中,插入Zstar开发板的卡槽中,做好装配连接,上电,可以看到VGA显示器同时显示左右两个图像,左侧图像为原始图像,右侧图像为直方图均衡处理后图像。
更多资料共享
腾讯微云链接:https://share.weiyun.com/5s6bA0s
百度网盘链接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw
提取码:ld9c
``
2