直方图均衡算法的去雾效果展示与实现

一、直方图均衡算法原理

前些日子有一个项目要求有去雾效果,调研了一下,发现图像增强算法其实多多少少都有一些去雾的效果,调研了三种算法分别是直方图均衡,RETINEX和暗通道先验三种,选择直方图均衡这种简单又效果不错的算法出来讲讲。

一幅数字图像在范围[0,G]内总共有L个灰度级,其直方图定义为离散函数。

h (rk) = nk

其中rk区间[0,G]内的第k级亮度,nk是灰度级为rk的图像中的像素数。通常我们会归一化直方图,即使用所有元素h(rk)除以图像中像素总数n所得到的图形:

p(rk) = h (rk)/n

其中,k=1,2,……,L。由概率论基本知识可知,p(rk)表示灰度级rk出现的频数。通过绘制p(rk)rk的条形图,既可以把握一张图片亮度的分布规律。

首先我们绘制几幅有雾图像的亮度直方图,并观察其分布规律。首先我们给出有雾图像的原图、灰度图及其直方图。

直方图均衡算法的去雾效果展示与实现_第1张图片

                                                   图1 有雾图像原图

直方图均衡算法的去雾效果展示与实现_第2张图片

                                                        图2 有雾图像灰度图

直方图均衡算法的去雾效果展示与实现_第3张图片

                                                图3 有雾图像亮度分布直方图

从图3可以看出,有雾图像的亮度直方图大多集中在[100,200]这个区间内,[0,50]以及[200,255]两个区间中的亮度分布极少,甚至可以忽略不计,由于其亮度分布过于集中在中间灰色部分,缺少亮([200,255]区间)和暗([0,50]区间)部分,导致画面整体模糊、对比度不高。

接下来给出正常天气条件下一幅图像的原图、灰度图和直方图,观察其分布规律。然后对比有雾图像的亮度直方图,得出其优化方向。

直方图均衡算法的去雾效果展示与实现_第4张图片

                               图4 正常天气条件下原图、灰度图和亮度分布直方图

观察图4的亮度分布直方图可以看出,其亮度分布在各个区间都有分布,无论是亮([200,255]区间)和暗([0,50]区间)部分,还是[100,200]区间都有一定的分布,画面整体清晰度较高、对比度也比图1和图2高不少。所以,去雾的方法之一就是将亮度分布均衡化,使其尽可能的均匀分布各个亮度区间,提高对比度和清晰度。

数字图像直方图均衡的公式:

                                         f(xi)=(L-1)(h(x1)+h(x2)……+h(xi))/w*h

二、直方图均衡算法MATLAB效果演示

 

 

直方图均衡算法的去雾效果展示与实现_第5张图片

                                                                            图5 直方图均衡前后

图x是使用MATLAB对三幅有雾图片进行直方图均衡后的对比图,左边为原始图片,右边是均衡后的图片。可以看出直方图均衡的确可以去除部分雾气带来的模糊感,增强图片的对比度和清晰度。最后一张图片效果最为明显,所以用它来展示FPGA实现的效果。

三、直方图均衡算法的FPGA实现

直方图均衡算法的去雾效果展示与实现_第6张图片

                                              图 6  FPGA实现效果演示

这个的效果很明显了,上方的图粗看下以为啥都没有呢!我发现的工程消耗最多的资源是LUT,从1%变成了17%,不过也在可以接受范围以内吧,毕竟一个功能的实现总是要消耗资源的,不是这个资源就是那个资源。

硬件配置:XILINX A7100T

软件版本:VIVADO2018.3

屏幕分辨率:1080P

显示接口:HDMI

 

你可能感兴趣的:(直方图均衡算法的去雾效果展示与实现)