灰度矫正算法详解【Halcon】:线性光照不均的处理方法【附代码下载】

发布于:2025-05-23 ⋅ 阅读:(19) ⋅ 点赞:(0)

在图像处理领域,光照不均匀是一个常见的问题,尤其是在获取图像时,由于光源不均或环境因素的影响,导致图像中的灰度值呈现线性变化。为了解决这一问题,本篇介绍一个利用 Halcon 进行灰度矫正的算法,帮助大家理解如何快速地对存在线性变化的光照不均图像进行修正。

1. 问题背景

图像光照不均主要表现为图像灰度值的变化不均匀,通常会出现某些区域过亮或过暗的情况。针对这种情况,灰度矫正可以有效地调整图像中的灰度分布,改善图像的视觉效果,使得图像更加清晰、均匀。尤其在工业检测、医学影像处理等应用场景中,光照不均匀的矫正对于提高图像分析的准确性至关重要。

2. 算法概述

本算法通过以下几个步骤对图像进行灰度矫正:

  1. 图像预处理:加载图像,并进行必要的初始化操作。
  2. 旋转图像:将图像旋转,使灰度变化方向变为水平或垂直,以简化计算。
  3. 区域提取与划分:提取出感兴趣区域并将其划分为多个矩形区域。
  4. 灰度特征提取:对每个区域进行灰度均值计算。
  5. 灰度矫正因子计算:通过灰度均值与最大灰度值的比例,计算每个区域的灰度矫正因子。
  6. 图像修正:通过比例系数图像对原图像进行灰度修正。
  7. 输出结果:显示修正后的图像,并进行效果对比。

2.1. 算法效果

在应用此算法之前,图像的灰度值可能存在较大的光照不均匀情况。经过灰度矫正后,图像的灰度分布将趋于均匀,光照差异得到有效修正。

原始图像与灰度矫正后的图像对比:

原图:

矫正后图像:

2.2. 数据集和算法下载

  • 算法-数据集下载链接
通过网盘分享的文件:如何快速的矫正一张具有线性变换的灰度不均图像.7z
链接: https://pan.baidu.com/s/1QY3dFuhRsHTiD8xCvU-dcg?pwd=jkcf 提取码: jkcf

3. 算法步骤详解

3.1 初始化与图像加载

首先,我们初始化图像处理窗口,并加载原始图像。

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_paint ('default')
dev_set_draw ('margin')
dev_set_line_width (3)
set_font (WindowHandle, 'Arial-Bold-20')

read_image (Image, '1.bmp')

3.2 图像旋转

通过旋转图像来调整灰度变化的方向,使其变为水平或垂直,这样计算变得更加便捷。

3.3 区域提取与划分

通过阈值分割和区域连接提取感兴趣区域,并对选定的最大区域进行划分,便于后续处理。

threshold (Image, Reg, 30, 255)
connection (Reg, Regs)
select_shape_std (Regs, RegMax, 'max_area', 70)

partition_rectangle (RegMax, RegRects, 500, 1)

3.4 灰度特征提取

在划分后的区域中,使用高斯平滑方法去噪声,并计算每个矩形区域的灰度均值。

gauss_image (Image, ImgGauss, 3)
gray_features (RegRects, ImgGauss, 'mean', GFeaMeans)

3.5 计算灰度矫正因子

通过计算每个区域的灰度值与最大灰度值的比例,得到每个区域的灰度矫正因子。

maxGray := max(GFeaMeans)
Factors := maxGray / GFeaMeans

3.6 生成比例系数图像

为每个区域生成比例系数图像,并填充每个区域的比例系数。

convert_image_type (Image, ImgReal, 'real')
gen_image_proto (ImgReal, ImgFactor, 0)
paint_region (RegRects, ImgFactor, ImgFactor, Factors, 'fill')

3.7 应用灰度矫正

通过将比例系数图像与原图像相乘,进行灰度矫正,并将结果转换为 byte 类型。

mult_image (ImgFactor, ImgReal, ImgNewReal, 0.9, 0)
convert_image_type (ImgNewReal, ImgNew, 'byte')

网站公告

今日签到

点亮在社区的每一天
去签到