2. 图像处理基础
在机器视觉与2D对位算法体系中,图像处理基础决定了后续特征提取、模板匹配与坐标计算的精度上限。Halcon作为工业级机器视觉算法库,其图像类型管理、灰度变换策略、阈值分割逻辑与形态学操作能力,构成了对位算法工程师必须熟练掌握的核心工具箱。本章将围绕这四个基础模块,从原理剖析到Halcon算子实战,结合对位场景中的典型问题,帮助学习者建立扎实的图像预处理能力。
2.1 图像类型:Halcon中的数据结构与类型转换
核心原理
Halcon的图像数据结构以HObject为核心,其底层存储与图像类型(Image Type)紧密相关。常见的图像类型包括:byte(8位无符号,灰度范围0-255)、uint2(16位无符号,常用于高动态范围或深度图)、int1(8位有符号)、int2(16位有符号)、real(32位浮点,用于亚像素精度计算)、complex(复数,用于频域分析)以及vector_field(矢量场,用于光流或畸变校正)。在2D对位场景中,byte类型是最常用的输入格式,但经过灰度变换或滤波后,图像可能被转换为real类型以保留小数精度。
判断方法与操作流程
在Halcon中,使用get_image_type查询图像类型,使用convert_image_type进行类型转换。操作流程如下:
- 读取图像:
read_image (Image, 'path'),此时图像类型由文件格式决定。 - 查询类型:
get_image_type (Image, Type),判断是否为byte类型。 - 类型转换:若需浮点运算,使用
convert_image_type (Image, ImageReal, 'real')。 - 域管理:使用
change_domain或reduce_domain限定处理区域,减少计算量。
案例拆解:多类型图像统一处理
某3C装配产线中,视觉系统需要同时处理12位工业相机输出的uint2图像与8位普通相机输出的byte图像。若直接使用同一套阈值参数,会导致分割结果不一致。解决方案是:先将uint2图像通过scale_image映射到0-255范围,再转换为byte类型,确保后续算法输入一致。关键代码片段如下:
read_image (ImageUint2, 'camera_12bit.tif')
get_image_type (ImageUint2, Type) // 返回 'uint2'
scale_image (ImageUint2, ImageScaled, 255.0/4095.0, 0)
convert_image_type (ImageScaled, ImageByte, 'byte')
常见误区与总结
threshold算子时,阈值范围需设置为0-4095,而非0-255。若未做类型转换,极易造成目标区域丢失或背景噪声残留。建议在图像读取后立即统一类型,并记录原始位深信息。2.2 灰度变换:对比度增强与亮度校正
核心原理
灰度变换通过像素值的数学映射改善图像质量。在2D对位中,光照不均、反光、阴影等因素会导致目标边缘对比度不足。Halcon提供scale_image(线性缩放)、scale_image_max(自动拉伸至最大动态范围)、gamma_image(伽马校正)以及lut_trans(自定义查找表)等算子。线性变换公式为:g(x,y) = a * f(x,y) + b,其中a控制对比度,b控制亮度偏移。
操作流程与参数选择
| 算子 | 适用场景 | 关键参数 | 注意事项 |
|---|---|---|---|
| scale_image | 已知灰度范围,需线性映射 | Mult(增益)、Add(偏移) | 增益过大会导致饱和 |
| scale_image_max | 图像整体偏暗或偏亮 | 无参数,自动计算 | 对噪声敏感,可能放大背景 |
| gamma_image | 非线性亮度校正 | Gamma值(0.1-10) | Gamma<1提亮暗部,>1压暗亮部 |
| lut_trans | 自定义映射曲线 | LUT表(256个元素) | 需预先计算映射表 |
实战场景:反光表面的标记提取
在手机中框对位中,金属表面反光导致Mark点边缘灰度波动。初始图像中,Mark点灰度约180,背景约220,对比度仅40。使用scale_image将增益设为2.5,偏移设为-200,使对比度提升至100。随后使用gamma_image(Gamma=0.8)进一步压暗背景,最终Mark点与背景灰度差达到150,阈值分割稳定性显著提升。
gray_histo观察灰度分布,再决定线性或非线性变换策略。2.3 阈值分割:从全局到动态的进阶路径
核心原理
阈值分割将灰度图像转换为二值区域,是目标提取的核心步骤。Halcon提供threshold(固定阈值)、binary_threshold(自动阈值,支持Otsu、Smooth等算法)、dyn_threshold(动态阈值,基于局部均值比较)和var_threshold(基于局部标准差)。在2D对位中,Mark点、定位孔、边缘特征通常通过阈值分割提取候选区域。
判断方法与选择逻辑
- 光照稳定、目标与背景灰度差大:优先使用
binary_threshold的Otsu方法。 - 光照不均、背景灰度渐变:使用
dyn_threshold,配合平滑滤波(如mean_image)生成参考图像。 - 目标灰度局部变化大:使用
var_threshold,设置标准差阈值。
案例拆解:动态阈值解决环形光阴影
在PCB板对位中,环形光源造成板边阴影,固定阈值无法同时提取中心Mark点与边缘定位孔。初始使用threshold (Image, Region, 128, 255),结果Mark点区域破碎,边缘孔洞被阴影吞没。改用动态阈值方案:
mean_image (Image, ImageMean, 21, 21)
dyn_threshold (Image, ImageMean, RegionDyn, 8, 'dark')
connection (RegionDyn, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 500, 99999)
通过21×21均值滤波生成背景估计,偏移量8作为灵敏度,成功分离出完整Mark点与定位孔。处理时间增加约15%,但分割准确率从72%提升至98%。
2.4 形态学操作:区域净化与结构重建
核心原理
形态学操作基于结构元素(Structuring Element)对二值区域进行几何变换。基础操作包括:腐蚀(消除边界点,分离粘连目标)、膨胀(填充内部孔洞,连接断裂区域)、开运算(先腐蚀后膨胀,去除毛刺)、闭运算(先膨胀后腐蚀,填充凹坑)。Halcon中常用erosion_circle、dilation_circle、opening_circle、closing_circle,结构元素半径以像素为单位。
操作流程与参数选择
- 分割后区域先执行
connection,将连通域拆分为独立区域。 - 使用
select_shape按面积、宽度、高度等特征过滤噪声。 - 对保留区域执行
closing_circle填充内部孔洞,半径设为2-3像素。 - 使用
opening_circle去除边缘毛刺,半径设为1-2像素。
实战场景:Mark点边缘毛刺处理
在晶圆对位中,Mark点经阈值分割后边缘存在锯齿状毛刺,直接影响圆心拟合精度。初始区域面积约1200像素,但边缘粗糙度导致圆心坐标波动±0.3像素。处理流程:
closing_circle (Region, RegionClosed, 3.5)
opening_circle (RegionClosed, RegionOpened, 1.5)
fit_circle_contour_xld (RegionOpened, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
闭运算填充了边缘凹陷,开运算去除了孤立毛刺。处理后圆心坐标波动降至±0.05像素,满足±0.1像素的对位精度要求。
area_center实时监控区域面积变化,确保形态学操作前后面积偏差在5%以内。2.5 综合实战:图像预处理链路在2D对位中的完整应用
场景描述与约束
某新能源电池模组产线,需要定位极耳位置进行焊接。相机采集图像为1280×1024的byte灰度图,极耳区域灰度约200,背景约80,但存在以下干扰:①极耳表面有压花纹理,灰度波动±30;②背景有反光斑点,灰度可达150;③光照随产线振动轻微变化。对位精度要求±0.2mm(约±2像素)。
初始现象与目标
直接使用binary_threshold的Otsu方法,分割结果包含大量反光斑点,极耳区域边缘破碎。目标是通过预处理链路,获得完整、平滑的极耳区域,并稳定输出中心坐标。
关键参数与操作步骤
| 步骤 | 算子 | 参数 | 作用 |
|---|---|---|---|
| 1. 灰度变换 | scale_image | Mult=1.2, Add=-30 | 增强极耳与背景对比度 |
| 2. 平滑滤波 | median_image | MaskType='circle', Radius=3 | 抑制压花纹理噪声 |
| 3. 阈值分割 | binary_threshold | Method='otsu', LightDark='light' | 提取亮色极耳区域 |
| 4. 形态学净化 | closing_circle | Radius=5 | 填充边缘断裂 |
| 5. 形态学净化 | opening_circle | Radius=2 | 去除反光斑点 |
| 6. 特征筛选 | select_shape | 'area', 5000-50000 | 排除小面积噪声 |
结果对比与复盘
优化前:极耳区域面积波动±15%,中心坐标标准差0.8像素,焊接良率92%。优化后:面积波动±3%,中心坐标标准差0.15像素,焊接良率99.5%。关键成功因素:①中值滤波有效抑制纹理噪声,且不破坏边缘;②闭运算半径5像素恰好覆盖极耳边缘最大断裂间隙;③开运算半径2像素在去除反光斑点的同时,未影响极耳主体区域。