3、图像采集与读取:相机接口、图像文件读取、实时图像获取、图像分辨率与格式

在Halcon 2D视觉对位贴合系统中,图像采集与读取是所有后续处理流程的起点。图像数据的质量、获取速度以及格式规范,直接决定了定位算法的精度上限与系统的整体节拍。本章将系统讲解Halcon中图像采集的完整链路,涵盖相机接口选型、图像文件读取方法、实时图像获取机制,以及分辨率与格式对视觉系统的影响。理解这些基础概念,是构建稳定、高效视觉系统的前提。

Halcon 图像采集与读取链路图 硬件接口层 GigE Vision USB3 Vision Camera Link CoaXPress 采集驱动层 Halcon Interface GenICam/GenTL HALCON 采集算子 open_framegrabber 图像数据层 HObject 图像对象 通道/位深/格式 分辨率 宽×高 灰度/彩色/多光谱 文件读取层 read_image bmp/png/jpg tif/hobj 实时图像获取流程 open_framegrabber grab_image_start grab_image_async 图像处理 close_framegrabber 异步采集模式:grab_image_start 启动连续采集,grab_image_async 获取最新帧,避免丢帧

上图展示了Halcon图像采集的整体架构。从底层硬件接口到上层图像数据对象,每一层都有明确的职责划分。硬件接口层决定了数据传输的物理方式,采集驱动层负责将硬件数据转换为Halcon可识别的图像对象,而文件读取层则提供了离线开发与调试的便捷途径。实时获取流程则体现了Halcon在工业场景中高效处理图像流的典型模式。

3.1 相机接口选型与Halcon配置

核心原理:不同接口的适用场景

工业相机接口决定了数据传输带宽、线缆长度、供电方式以及多相机同步能力。在2D对位贴合系统中,常见的接口包括GigE Vision、USB3 Vision、Camera Link和CoaXPress。GigE Vision基于千兆以太网,线缆长度可达100米,易于组网,但CPU占用相对较高;USB3 Vision带宽高(理论5Gbps),即插即用,适合短距离桌面级应用;Camera Link提供极高的带宽和确定性传输,但需要专用采集卡,成本较高;CoaXPress则支持更长距离和更高带宽,适用于高速高分辨率场景。

接口类型带宽最大线缆长度CPU占用适用场景
GigE Vision1 Gbps100 m中分布式系统、多相机
USB3 Vision5 Gbps3-5 m低桌面级、单相机
Camera Link2.38-6.8 Gbps10 m低高速线阵、高分辨率
CoaXPress6.25-12.5 Gbps100 m+低超高速、远距离

操作流程:Halcon中配置相机

在Halcon中,使用open_framegrabber算子初始化相机连接。该算子需要指定接口类型、设备ID、相机参数等。以下是一个典型的GigE相机配置示例:

open_framegrabber ('GigEVision', 0, 0, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', 'cam_0', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    grab_image_async (Image, AcqHandle, -1)
    * 在此处执行图像处理
endwhile
close_framegrabber (AcqHandle)

参数说明:'GigEVision'指定接口类型;'cam_0'是相机设备名;AcqHandle是采集句柄。对于USB3相机,将接口类型改为'USB3Vision'即可。

经验提醒:在配置相机前,务必使用Halcon自带的info_framegrabber算子查询可用设备列表,避免因设备名错误导致连接失败。同时,建议设置相机参数(如曝光时间、增益)时使用set_framegrabber_param,并确保参数值在相机支持范围内。

案例拆解:多相机同步采集

在对位贴合系统中,常需要多个相机从不同角度拍摄同一目标。假设使用两台GigE相机,要求同步触发。首先,通过硬件触发线将相机连接至PLC或运动控制卡,确保外部触发信号同时到达两台相机。在Halcon中,分别打开两个采集句柄,并设置触发模式为外部触发:

open_framegrabber ('GigEVision', 0, 0, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', 'cam_0', 0, -1, AcqHandle1)
open_framegrabber ('GigEVision', 0, 0, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', 'cam_1', 0, -1, AcqHandle2)
set_framegrabber_param (AcqHandle1, 'trigger_mode', 'on')
set_framegrabber_param (AcqHandle2, 'trigger_mode', 'on')
grab_image_start (AcqHandle1, -1)
grab_image_start (AcqHandle2, -1)
while (true)
    grab_image_async (Image1, AcqHandle1, -1)
    grab_image_async (Image2, AcqHandle2, -1)
    * 两幅图像时间戳接近,可进行联合处理
endwhile

此方案的关键在于硬件触发信号的同步性。若使用软件触发,两台相机的采集时刻可能存在微小偏差,导致运动中的目标位置不一致。

常见误区与复盘

  • 误区一:忽略网络配置。GigE相机要求网卡支持巨型帧(Jumbo Frame),且IP地址与相机在同一网段。未配置时会出现丢帧或无法连接。
  • 误区二:未设置相机参数导致图像过暗或过曝。应在采集前通过set_framegrabber_param设置曝光、增益、白平衡等参数。
  • 复盘:在项目调试初期,建议先使用Halcon的grab_image同步采集单帧,验证相机连接和图像质量,再切换到异步采集模式。

3.2 图像文件读取与格式转换

核心原理:文件读取的底层机制

Halcon支持多种图像文件格式,包括BMP、JPEG、PNG、TIFF以及Halcon专有的HOBJ格式。读取文件时,Halcon根据文件扩展名自动识别格式,并将数据解码为HObject图像对象。对于彩色图像,Halcon默认将其转换为RGB三通道;对于灰度图像,则转换为单通道。理解格式的差异有助于选择合适的存储方式:BMP无损但体积大,JPEG有损但体积小,PNG支持无损压缩和透明度,TIFF支持多页和多光谱。

操作流程:读取与保存图像

* 读取图像文件
read_image (Image, 'C:/images/part_01.png')
* 获取图像尺寸
get_image_size (Image, Width, Height)
* 获取图像通道数
count_channels (Image, Channels)
* 保存图像为不同格式
write_image (Image, 'jpeg', 95, 'C:/output/part_01.jpg')
write_image (Image, 'png', 0, 'C:/output/part_01.png')

在批量处理场景中,可使用list_files算子遍历文件夹内所有图像文件,结合循环实现自动化处理。

风险提示:JPEG格式采用有损压缩,多次保存会累积画质损失。在视觉测量项目中,建议使用PNG或TIFF格式保存原始图像,避免因压缩伪影影响后续定位精度。

案例拆解:离线图像库验证算法

在开发对位贴合算法时,通常先使用离线图像库验证算法可行性。假设收集了100张不同光照条件下的产品图像,存放在./samples目录下。通过以下代码批量读取并测试定位算法:

list_files ('./samples', 'files', ImageFiles)
for i := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[i])
    * 执行模板匹配或对位算法
    find_shape_model (Image, ModelID, Row, Column, Angle, Score)
    * 记录结果
endfor

此流程可快速评估算法在不同样本上的鲁棒性,并发现光照变化、遮挡等异常情况。

常见误区与总结

  • 误区:直接读取图像后未检查通道数,导致后续灰度处理算子报错。应使用count_channels确认,必要时用rgb1_to_gray转换。
  • 误区:忽略图像方向。部分相机或文件保存时图像可能旋转,需在读取后使用rotate_image校正。
  • 总结:文件读取是离线开发的基础,掌握格式转换和批量处理技巧能显著提升调试效率。

3.3 实时图像获取与异步采集

核心原理:同步与异步模式

Halcon提供两种实时采集模式:同步模式(grab_image)和异步模式(grab_image_start + grab_image_async)。同步模式在采集时阻塞程序,直到图像数据完全传输完毕才返回,适合低速或单帧采集。异步模式则先启动采集,程序可继续执行其他任务,当需要图像时再获取最新帧,适合高速连续采集场景,能有效降低CPU等待时间。

操作流程:异步采集的典型循环

open_framegrabber ('GigEVision', 0, 0, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', 'cam_0', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    * 获取最新图像
    grab_image_async (Image, AcqHandle, -1)
    * 执行对位处理
    find_shape_model (Image, ModelID, Row, Column, Angle, Score)
    * 将结果发送至运动控制
    set_origin (Pose, Row, Column, Angle)
endwhile

在异步模式下,grab_image_async的第三个参数Timeout可设置等待超时时间(毫秒),避免无限阻塞。

关键点:异步采集的核心优势在于“采集与处理并行”。当图像处理耗时较长时,相机仍在后台采集下一帧,从而提升系统吞吐量。但需注意,若处理速度跟不上采集速度,应使用grab_image_async的队列机制,或适当降低采集帧率。

案例拆解:高速贴装中的实时对位

在高速贴片机中,相机以200帧/秒的速度采集运动中的元件图像。系统要求每次对位处理时间不超过5毫秒。采用异步采集模式,主循环中先启动采集,然后执行上一帧的对位计算,最后获取最新帧。通过合理分配CPU时间,实现了连续稳定运行。若使用同步模式,则每帧需等待采集完成,处理时间被拉长,无法满足节拍要求。

常见误区与复盘

  • 误区:在异步循环中忘记调用grab_image_start,导致grab_image_async报错。
  • 误区:未处理超时情况。当相机掉线或触发信号丢失时,grab_image_async会返回超时错误,需在代码中加入异常处理。
  • 复盘:实时采集的稳定性依赖于硬件触发、网络带宽和CPU负载的协同。建议在项目初期进行压力测试,确定系统的最大可持续帧率。

3.4 图像分辨率与格式对视觉系统的影响

核心原理:分辨率与精度的关系

图像分辨率(宽×高像素数)决定了视觉系统的物理测量精度。例如,视野为10mm×10mm,图像分辨率为1000×1000像素,则每个像素对应的物理尺寸为0.01mm。在2D对位贴合中,通常要求定位精度为像素尺寸的1/10到1/5,因此分辨率越高,理论精度越高。但高分辨率也带来更大的数据量和更长的处理时间,需在精度与速度之间权衡。

图像格式与位深

Halcon支持多种图像格式,包括byte(8位灰度)、uint2(16位灰度)、int1、real等。位深决定了灰度级数,8位提供256级灰度,16位提供65536级。对于高动态范围场景,16位图像能保留更多细节,但处理速度较慢。彩色图像通常为RGB三通道,每个通道8位或16位。

格式位深通道数适用场景
byte81标准灰度图像
uint2161高动态范围、医学影像
rgb8/通道3彩色图像、颜色识别
real321浮点运算、深度图

操作流程:分辨率与格式的转换

* 缩放图像分辨率
zoom_image_factor (Image, ZoomedImage, 0.5, 0.5, 'constant')
* 转换灰度格式
rgb1_to_gray (Image, GrayImage)
* 转换位深
change_domain (Image, Domain, ImageReduced)
convert_image_type (Image, ConvertedImage, 'uint2')

在Halcon中,zoom_image_factor可快速缩放图像,但会引入插值误差。对于测量任务,建议保持原始分辨率,仅在预处理阶段使用缩放加速。

经验提醒:在2D对位贴合中,若目标尺寸较小,可考虑使用子像素算法(如find_shape_model的SubPixel参数)来突破物理分辨率限制,而不是盲目提高相机分辨率,因为高分辨率相机会显著增加成本和处理负担。

案例拆解:分辨率选择实战

某项目需检测0.5mm宽度的Mark点,定位精度要求±0.02mm。若视野为20mm×20mm,则所需像素数为:20mm / 0.02mm = 1000像素。考虑亚像素精度(1/5像素),实际分辨率需达到5000×5000像素。此时选择500万像素相机(2448×2048)无法满足要求,需选用1200万像素相机(4000×3000)或缩小视野。通过计算,最终选用1200万像素相机,视野缩小至15mm×15mm,满足精度要求。

常见误区与总结

  • 误区:盲目追求高分辨率,忽略处理速度和存储成本。
  • 误区:未考虑镜头畸变对分辨率的影响。高分辨率相机配合低质量镜头,边缘区域可能模糊,导致定位精度下降。
  • 总结:分辨率选择应基于精度需求、视野大小、处理速度和成本综合评估。格式选择则需权衡动态范围与处理效率。

本章系统梳理了Halcon图像采集与读取的完整知识体系。从相机接口的物理层选型,到文件读取的离线开发,再到实时异步采集的工程实践,以及分辨率与格式的权衡决策,每一个环节都直接影响视觉对位系统的最终性能。在实际项目中,建议先通过离线图像库验证算法,再逐步过渡到实时采集,最后根据节拍要求优化采集与处理流程,确保系统稳定、高效运行。