Halcon暗图像增强

一、暗图像处理概述

暗图像通常指的是图像整体亮度较低,对比度不高,细节信息难以清晰分辨的图像。在实际应用场景中,比如低光照环境下拍摄的监控图像、天文观测中较暗星体的成像、医学影像中一些造影较淡的片子等都可能出现暗图像的情况。对暗图像处理的目的就是通过一定的算法和技术手段来提高图像的亮度、增强对比度,从而凸显出更多有价值的细节信息,便于后续的分析、识别等操作。
在这里插入图片描述

二、Halcon 简介

Halcon 是一款功能强大的机器视觉软件库,它提供了丰富的图像处理、分析和机器视觉算法,支持多种编程语言(如 C++、C#、Python 等)的接口调用,在工业自动化、医疗影像、智能交通等众多领域有着广泛的应用。其优势在于高效的算法实现、便捷的开发流程以及良好的跨平台性,可以帮助开发者快速解决各种复杂的图像处理任务,当然也包括暗图像处理。

三、暗图像处理在 Halcon 中的常见原理及对应代码示例
  1. 灰度拉伸(Gray Scale Stretching)

在这里插入图片描述

原理

灰度拉伸是一种简单而有效的提高图像对比度的方法。它基于图像的灰度直方图,通过将原始图像中较暗的像素值往更暗的方向拉伸,较亮的像素值往更亮的方向拉伸,使得图像的灰度范围尽可能地占满整个可显示的灰度区间(例如对于 8 位灰度图像,范围是 0 - 255)。

具体做法通常是先找到图像中的最小灰度值 gmin 和最大灰度值 gmax,然后根据以下公式对图像中的每个像素 g(x,y) 进行变换:
0686a2011d0d4f9183a17841ab1b2b8f.png

其中 g'(x,y) 是变换后的像素灰度值。

Halcon 代码示例

以下是使用 Halcon 的 HDevelop 语言实现灰度拉伸的代码示例(假设已经读入了一幅灰度图像 Image):

在这段代码中:

如果是使用 Halcon 结合 Python 进行开发,代码示例如下(需确保已经安装了 halcon 模块):

  1. 直方图均衡化(Histogram Equalization)

原理

直方图均衡化的目的是使图像的灰度直方图分布更均匀,从而提高图像的整体对比度。它基于这样一个思想:如果一幅图像的灰度直方图是均匀分布的,那么图像在视觉上会具有较好的对比度,各灰度级出现的概率大致相等。

其具体实现步骤如下:

  1. 计算原始图像的灰度直方图 H(k),其中 k 表示灰度级(对于 8 位图像,k 的取值范围是 0 - 255),H(k) 表示灰度级为 k 的像素个数。
  2. 计算累计归一化直方图 C(k)8da266c1c2e8470893371c892c7ff055.png


    其中 N 是图像的总像素个数。
  3. 通过 C(k) 对原始图像的每个像素进行映射,得到均衡化后的像素灰度值:f01f1a431baf4daaba66be800cb0f237.png


    这里 L 是灰度级的总数(对于 8 位图像 L = 256),g(x,y) 是原始像素灰度值,g'(x,y) 是均衡化后的像素灰度值。

  4. Halcon 代码示例

在 HDevelop 中实现直方图均衡化的代码如下:

使用 Halcon 与 Python 结合时:

  1. 基于滤波的方法(如中值滤波、高斯滤波等增强对比度)

原理(以中值滤波为例)

中值滤波是一种非线性滤波方法,它的主要作用是去除图像中的噪声,同时在一定程度上能够增强图像的对比度,尤其是对于含有椒盐噪声等的暗图像效果较好。

其原理是对于图像中的每个像素点,以该像素为中心取一个固定大小的邻域(例如 3×3、5×5 等的矩形窗口),然后将邻域内的所有像素灰度值进行排序,取中间值作为该像素滤波后的灰度值。通过这种方式,可以平滑掉一些孤立的噪声点,并且在暗区域如果存在一些较亮的噪声点被去除后,相对的对比度会有所提升。

对于高斯滤波,它是一种线性滤波,利用高斯函数生成滤波核,对图像进行加权平均滤波,它可以在一定程度上模糊图像同时也能增强图像的层次感,在暗图像中可以让一些细节相对凸显出来,原理是通过不同权重对邻域像素进行求和来更新中心像素值,权重由二维高斯分布确定,离中心像素越近权重越大。

Halcon 代码示例(中值滤波)

在 HDevelop 中:

在 Python 与 Halcon 结合时:

Halcon 代码示例(高斯滤波)

在 HDevelop 中:

在 Python 与 Halcon 结合时:

  1. 基于 Retinex 理论的方法

原理

Retinex 理论认为人类视觉系统感知到的物体颜色和亮度是由物体表面的反射属性(Reflectance)和入射光照(Illumination)共同决定的。其目的是从图像中分离出反射分量和光照分量,然后通过对光照分量进行调整来增强图像的亮度和对比度,同时保持反射分量相对稳定,这样可以有效地增强暗图像中的细节并还原出接近真实场景视觉感受的图像。

常见的实现算法如单尺度 Retinex(SSR)、多尺度 Retinex(MSR)等。以单尺度 Retinex 为例,其基本计算步骤如下:

  • 将彩色图像转换为对数域(如果是灰度图像可直接进行下一步):

    其中 `S(x,y)` 是原始图像在坐标 `(x,y)` 处的像素值(灰度或彩色通道值),`I(x,y)` 是转换到对数域后的像素值。
  • 1. 对图像进行高斯模糊来估计光照分量 `L(x,y)`,即使用不同标准差的高斯函数与图像进行卷积操作,得到光照的估计值。1. 计算反射分量 `R(x,y)`:1. 通过对反射分量进行适当的灰度变换等操作还原到空间域并得到最终增强后的图像。 **Halcon 代码示例(单尺度 Retinex,以灰度图像为例简化实现)**:

    在 HDevelop 中:

    在 Python 与 Halcon 结合时:

    1. 对比度受限的自适应直方图均衡化(CLAHE)

    原理

    普通的直方图均衡化可能会导致在一些图像区域出现过度增强的情况,比如原本较均匀的背景区域可能会出现明显的伪影、噪声放大等问题。CLAHE 则是一种改进的直方图均衡化方法,它将图像划分为多个不重叠的小块(通常是矩形小块,例如 8×8、16×16 等),然后对每个小块分别进行直方图均衡化。

    为了避免局部过度增强,设置一个对比度限制参数,当某个小块内的直方图分布超过这个限制时,会对超出的部分进行重新分配,使得每个小块内的对比度增强是在一个合理的范围内,最后再通过双线性插值等方法将各个小块组合起来形成最终处理后的图像,这样可以在增强整体对比度的同时保持图像的自然性,对于暗图像中不同区域的细节提升很有帮助。

    Halcon 代码示例

    在 HDevelop 中:

    在 Python 与 Halcon 结合时:

    四、多种方法结合使用的策略及示例

    在实际处理暗图像时,往往单一的方法可能无法达到最佳的效果,通常会将多种方法结合起来使用。

    例如,可以先使用中值滤波去除暗图像中可能存在的椒盐噪声等,然后再进行直方图均衡化或者 CLAHE 来增强整体对比度,最后还可以通过灰度拉伸进一步调整图像的灰度范围,使其视觉效果更好。

    以下是一个在 HDevelop 中结合中值滤波、CLAHE 和灰度拉伸的代码示例:

    在 Python 与 Halcon 结合时类似:

    通过这样的组合方式,可以充分发挥不同算法的优势,更好地处理暗图像,提高图像质量,凸显更多的细节信息,满足不同应用场景下对暗图像处理后的要求,比如后续的目标检测、图像识别等任务就可以基于处理后的高质量图像来开展。

    总之,Halcon 为暗图像处理提供了丰富多样的算法和便捷的实现方式,开发者可以根据具体的图像特点和应用需求灵活选择合适的方法以及进行方法的组合优化,以达到理想的处理效果。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐