专栏首页摸鱼范式常用图像增强算法实现——直方图均衡

常用图像增强算法实现——直方图均衡

1.前言

对于原始对比度较低的图像,我们可以提高对比度来增强图像的辨识度,改善图像的视觉效果,转换为更适合人或者机器处理的形式,去除无用的信息,提高使用价值。典型的比如CT图像增强,去雾去雨,静脉增强等算法。

从人眼视觉特性来考虑,一幅图像的灰度直方图如果是均匀分布的,那么该图像看上去效果比较好(理论上);当然如果需要进一步进行图像分类或者机器学习,图像的预处理增强,也有助于目标的识别与检索。如下图所示,为《数字图像处理Matlab版》(冈萨雷斯)一书中,关于图像增强(直方图均衡的例子),直观可见,左图对比度低,图像朦胧看着很不自然,右图就很适合人眼的视觉特性,对比度、辨识度甚至舒适度都有很大的提升。

那么,本章,我们就主要讲讲几种基本的图像增强算法的Matlab & FPGA实现。常用的图像增强算法,广义的讲不仅包括对比度、直方图等,降噪滤波、锐度饱和度等也属于ISP领域的图像增强。但本章主要讲针对直方图均衡,和各种对比度算法的图像增强,其他内容将在后续章节中,再进一步展开介绍。

2.直方图均衡原理

直方图均衡也称直方图拉伸,是一种简单有效的图像增强技术,通过改变图像的直方图分布,来改变图像中各像素的灰度,主要用于增强动态范围偏小的图像的对比度。原始图像由于其灰度分布可能集中在较窄的区间,造成图像不够清晰(如上图左),曝光不足将使图像灰度级集中在低亮度范围内。采用直方图均衡化,可以把原始图像的直方图变换为均匀分布的形式,这样就增加了像素之间灰度值差别的动态范围,从而达到增强图像整体对比度的效果。

换言之,直方图均衡化的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并,从而增大对比度,使图像清晰,达到增强的目的。以上述图片为例,均衡化之前的直方图,及均衡化后的直方图,如下所示:

图像的灰度值是一个线性函数,但像素的分布(灰度直方图)是一个一维的离散函数,重点是直方图如何分布。 如上图中直方图分布可见,左图像素值基本上都聚集在100-130之间,而在直方图均衡化之后,像素值则均匀的分布在0-255之间。实际在直方图均衡化后的图,也有更高的对比度,自然更高的清晰度与辨识度。

图像f(x,y)灰度直方图的一维离散函数,可表示如下(L-1一般为255):

h(k) = n(k) k=0,1,...,L-1

其中n(k)为图像f(x,y)中灰度级为k的像素个数,对应直方图坐标中对于x轴的y列。图像的视觉效果与直方图有直接的对应关系,改变直方图的分布,对图像的结果也有很大的影响。我们进一步计算灰度级数出现的频率Pr(k),如下(其中N为图像的像素数量):

Pr(k) = n(k)/N

接着,计算原始图像灰度累计分布频率,即:

最后,采用累计分布频率,通过对结果扩大到L-1倍,得到最终均衡化后的图像,计算如下:

sk=sk*(L-1)

3.直方图均衡Matlab实现

如上整理流程,基本思路就是计算归一化后灰度级数频率的累计值,再将结果拉伸到0-255,因此直方图均衡,也叫做直方图拉伸。笔者并没有用复杂的公式去推导,简单地说直方图均衡的原理就是将直方图拉伸到0-255,因此根据累计的频率扩大255倍就可以得到理论的结果。接下来笔者将采用Matlab源代码方式实现直方图均衡,代码如下:

上述代码采用了源码设计直方图均衡方式,同时和Matlab库进行对比查验结果。

其中直方图均衡时候,同时考虑了到了适合FPGA进行定点加速运算,主要可分为如下几步:

1)计算当前灰度图像0-255级数的像素数量

2)计算从0-255级数像素数量的累积值,即从0-h*w像素总量分布

3)将上述累计值除h*w后归一化,再扩大到像素取值范围255,以当前测试500*500的图像为例,可以合并计算/(h*w)*255=/980,那么进一步硬件思维分析,有以下几种思路:

A)针对固定视频流,长款固定,如对精度要求不高,可直接除1024,即向右移动10bit,不过这样会损失较多的精度,可能导致异常。

B)为了提高进度,除以980可以用一个除法器,根据余数结果判断是否大于490,再考虑是否进位,这在FPGA中的除法器有一定的面积代价,需要一堆组合逻辑及乘法器,但不得已而为之,为本篇中的最佳选择。

如上图所示,为原图,及源码/matlab图像库分别进行图像均衡化的结果。其中结果对比图差不多,深究直方图还是略有差异,主要是我们采用了定点化的方式引起的误差,在可容忍的范围内。

最后,查看直方图均衡化之前,及均衡化之后的灰度级数累积图,如下所示,我们可见原图中灰度集中分布,再均衡化后,灰度级数在0-255内递增,因此达到了灰度拉伸的效果,增强了图像的对比度和辨识度,达到了我们本篇的需求。

4.直方图均衡FPGA实现

未完待续,敬请期待……


直方图均衡的缺点:

如果一幅图像整体偏暗或者偏亮,那么直方图均衡化的方法很适用。比如在静脉识别中,经850nm红外曝光,摄像头采集到的图像,通常为了防止过曝丢失信息,图像会偏暗一点,那么经过直方图均衡后可以简单快速的达到图像增强的效果,给后续算法增加了辨识度,如下图所示:

但直方图均衡化是一种全局处理方式,它对处理的数据不加选择,可能会增加背景干扰信息的对比度并且降低有用信号的对比度,进而引起图像的异常。因此主要有如下缺点:

1)变换后图像灰度级数减少,部分细节丢失

2)对于直方图有高峰时,拉伸后将出现对比度不自然的过分增强现象。

举例,如下图像中,对比度拉伸后图像对比度增强,虽然灰度级数拉伸后线性增加了,但却引起了局部过暗或者过曝,导致图像异常,丢失了很多细节,反而得不偿失。

因此,针对局部的直方图均衡化方法,才能解决图像全局处理引起异常的问题。进一步的深入留给读者去研究,本片到此为止。


由于直方图均衡是在灰度域去实现的,主要针对亮度的拉伸,而RGB图像有三个通道的数据,可以分别对三个通道进行直方图拉伸,但这可能会引起图像色彩失真。因此,可以先转成YCbCr格式,对Y进行直方图均衡后,再转回RGB格式。


《Matlab数字图像处理-冈萨雷斯》图库下载地址:

http://www.imageprocessingplace.com/DIP-3E/dip3e_book_images_downloads.htm


参考文献

https://blog.csdn.net/charlene_bo/article/details/70263344?utm_source=blogxgwz3

https://blog.csdn.net/qq_15971883/article/details/88699218


本文分享自微信公众号 - 摸鱼范式(icparadigm)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【16位RAW图像处理三】直方图均衡化及局部直方图均衡用于16位图像的细节增强。

    通常我们生活中遇到的图像,无论是jpg、还是png或者bmp格式,一般都是8位的(每个通道的像素值范围是0-255),但是随着一些硬件的发展,在很...

    用户1138785
  • 图像增强 | CLAHE 限制对比度自适应直方图均衡化

    CLAHE是一个比较有意思的图像增强的方法,主要用在医学图像上面。之前的比赛中,用到了这个,但是对其算法原理不甚了解。在这里做一个复盘。

    机器学习炼丹术
  • OpenCV图像处理专栏七 | 直方图均衡化算法及代码实现

    这是OpenCV图像处理专栏的第七篇文章,主要为大家介绍一下直方图均衡化算法的原理以及提供一个我的C++代码实现。

    BBuf
  • [图像]图像灰度均衡化和灰度直方图(Matlab实现)

    原文链接:http://blog.csdn.net/humanking7/article/details/46822709

    祥知道
  • 基于直方图的图像增强算法(HE、CLAHE、Retinex)之(一)

    http://blog.csdn.net/baimafujinji/article/details/50614332

    bear_fish
  • 深度学习必备---用Keras和直方图均衡化---数据增强

    作者:王抒伟 编辑:王抒伟 算了 爱看多久看多久 在读这技术文章之前,请大家想象一个标准河南口音的娃在读这篇文章,那么你不知不觉,你的嘴角就上扬咯。 俺、...

    机器学习算法工程师
  • 限制对比度自适应直方图均衡化算法原理、实现及效果

    一、自适应直方图均衡化(Adaptive histgram equalization/AHE)

    用户1138785
  • 使用局部标准差实现图像的局部对比度增强算法。

          图像的对比度增强算法在很多场合都有着重要的应用,特别是在医学图像上,这是因为在众多疾病的诊断中,医学图像的视觉检查时很有必要的。而医学图像由于本身及...

    用户1138785
  • 一种强化的基于局部直方图裁剪均衡化的对比度调节算法。

      在很久前实现对比度受限的自适应直方图均衡化时,就曾经想过对该算法进行一定程度的扩展,之后使用自动对比度和自动色阶代替直方图均衡化也提出了新的算法,也达到了不...

    用户1138785
  • 深度学习中常用的图像数据增强方法-纯干货

    图像数据准备对神经网络与卷积神经网络模型训练有重要影响,当样本空间不够或者样本数量不足的时候会严重影响训练或者导致训练出来的模型泛化程度不够,识别率与准确率不高...

    OpenCV学堂
  • 如何使用 OpenCV 实现图像均衡?

    我们已经练习了很多图像处理——操作图像(精确地说是图像矩阵)。为此,我们探索了图像的均衡方法,以便在一定程度上增强对比度,以使被处理的图像看起来比原始图像更好,...

    AI科技大本营
  • 数字图像处理灰度变换之灰度直方图及python实现

    灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。直方图显示图像数据时会以左暗右亮的分布曲线形式呈现出来。横坐标是灰度级,纵坐标...

    Minerva
  • MATLAB基于直方图的图像去雾

    直方图是图像的一种统计表达形式,在一定程度上能够反映数学图像的概貌性描述,包括图像的灰度范围、灰度分布、整幅图像的亮度均值、阴暗对比度等,并可以此...

    matlab爱好者
  • 图像的灰度直方图、直方图均衡化、直方图规定化(匹配)

    一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征。图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的...

    233333
  • 基于变分法的感知色彩校正

    本文提出一种基于变分技术的图像感知色彩校正,提出了一个新的图像泛函,其最小值可以产生感知色彩增强后的图,这个变分公式使得局部对比度调整和数据的联系更灵活,展示了...

    Natalia_ljq
  • 做人,均衡点更好~

    直方图均衡化,可以对在不同的光线条件下拍摄不同的图片进行均衡化处理,使得这些图片具有大致相同的光照条件。因此,我们可以用在训练模型之前,对图像进行对预处理。

    灿视学长
  • 基于OpenCV的直方图匹配

    如何为图像生成直方图,如何使直方图相等,最后如何将图像直方图修改为与其他直方图相似。

    AI算法与图像处理
  • 【干货】计算机视觉实战系列04——用Python做图像处理

    【导读】专知成员Hui上一次为大家介绍Numpy包的使用,介绍了Numpy库的一些基本函数和一些简单用法,以及图像灰度变换,这一次为大家详细讲解图像的缩放、图像...

    WZEARW
  • 实时移动通信中,基于时空域联合约束的低照度视频增强技术研究

    本文针对低照度视频序列,为了增强视频图像的主观视觉质量,设计了正则化的最优化框架,并给出满足实时应用需求的求解方式。

    微信终端开发团队

扫码关注云+社区

领取腾讯云代金券