前言
打光是视觉项目里最容易被低估的一环。算法不行可以调,相机不够可以换,但打光错了,神仙来了也救不了。
本文不讲理论光谱分析,只讲产线上三种最常见的打光困境和对应的解决方案:
- 金属件反光 — 高光干扰,特征被吃掉
- 透明塑料件 — 轮廓看不清,边缘检测=猜
- PCB 焊盘检测 — 背景太花,特征分割困难
方案 1:金属件反光 — 低角度环形光 + 偏振
问题
金属表面(轴承、螺丝、镜面不锈钢)的打光最大问题是:高光反射把特征淹没了。
| |
方案
低角度环形光(Low-Angle Ring Light)+ 偏振片
- 光源角度:15°-30°(低于 30° 叫低角度)
- 颜色:白色(通用)或蓝色(对金属纹理增强更好)
- 偏振:光源 + 镜头前各加一片偏振片,方向垂直
| |
硬件配置
| 部件 | 推荐型号 | 参考价 |
|---|---|---|
| 低角度环形光源 | 海康 MV-LR-72-W(72mm 外径,白色) | ¥450 |
| 偏振片(光源用) | 线性偏振膜,按光源尺寸裁切 | ¥30 |
| 偏振片(镜头用) | 海康 MVL-PF12.5(C口偏振镜) | ¥120 |
Halcon 处理:增强特征
* 偏振后图片对比度可能偏低,拉一下
read_image (Image, 'metal_screw.tiff')
* 高斯去噪保留边缘
gauss_filter (Image, ImageGauss, 3)
* 动态阈值增强六角头特征
mean_image (ImageGauss, ImageMean, 31, 31)
sub_image (ImageGauss, ImageMean, ImageSub, 2, 128)
* 圆形 ROI 找螺丝中心
gen_circle (ROI, 256, 256, 200)
reduce_domain (ImageSub, ROI, ImageReduced)
注意事项
- 偏振片会损失约 50% 光强,需要相应提高光源亮度或曝光时间
- 低角度安装意味着工作距离短,注意不要撞到被测物
- 如果工件带油污,先用气枪吹干净,否则油污散射会引入伪特征
方案 2:透明塑料件 — 背光源 + 暗场照明
问题
透明塑料瓶盖、亚克力面板、薄膜的检测难点:常规打光下,透明物体几乎不可见。
| |
方案
高亮背光源 + 暗场照明
- 背光源(透射光):物件放在光源和相机之间,轮廓变黑
- 暗场照明(反射光):检查内部气泡、划痕、杂质
| |
硬件配置
| 部件 | 推荐型号 | 参考价 |
|---|---|---|
| 背光源 | 海康 MV-BL-100-100-W(100×100mm 白色) | ¥580 |
| 暗场光源 | 海康 MV-DL-60-R(60mm 红色环形暗场) | ¥400 |
| 匀光板 | 背光自带,无需另购 | — |
Halcon 处理:边缘提取
* 背光下,透明件轮廓为黑色
read_image (Image, 'plastic_cap.bmp')
* 用大阈值二值化提取完整轮廓
threshold (Image, Region, 0, 80)
* 填充内部空洞
fill_up (Region, RegionFill)
* 边缘提取
boundary (RegionFill, RegionBorder, 'inner')
* 用边缘拟合圆
fit_circle_contour_xld (RegionBorder, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
透明件检测的 3 个要点
- 背光要调到足够亮,让透光部分接近白色饱和
- 镜头光圈不要收到最小(f/8 左右最佳),太小的光圈会让划痕看不出来
- 红/蓝光选择:透明塑料用红色背光穿透力更强;半透明磨砂用蓝色背光对比度更高
方案 3:PCB 焊盘检测 — 同轴光源 + 分时多角度
问题
PCB 检测(焊盘有无、偏位、虚焊)的痛点:背景太花。
PCB 上有绿油、走线、字符丝印、阻焊层、铜箔,打光后一幅画面里什么都有,焊盘特征淹没在杂讯里。
| |
方案
同轴光源(Coaxial Light)+ 多角度分时采图
- 同轴光源:光线通过分光镜垂直照射,消除阴影和反光角度差异
- 分时采图:用不同色温/角度的光源依次打光,从多张图中合成信息
| |
硬件配置
| 部件 | 推荐型号 | 参考价 |
|---|---|---|
| 同轴光源 | 海康 MV-CX-50-W(50×50mm,白色同轴) | ¥1,200 |
| 远心镜头(可选) | 海康 MVL-T-25-0.3X | ¥1,800 |
| 光源控制器 | 数字式 4 通道 PWM 控制器 | ¥600 |
Halcon 处理:差分法提取焊盘
* 策略:采两张图,一张亮同轴光,一张不亮环境光
read_image (ImageCoax, 'pcb_coax.tiff') * 同轴光照
read_image (ImageAmbient, 'pcb_ambient.tiff') * 环境光
* 差分:焊盘在两张图之间变化最大
sub_image (ImageCoax, ImageAmbient, ImageDiff, 1, 128)
* 阈值分割提取焊盘区域
threshold (ImageDiff, Region, 135, 255)
* 连通域分析,过滤噪声
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50, 99999)
* 焊盘位置和数量校验
count_obj (SelectedRegions, NumPads)
disp_message (3600, '检测到焊盘: ' + NumPads + ' 个', 'window', 12, 12, 'black', 'true')
PCB 检测的加分技巧
- 多光谱合成:红色光源穿透绿油层看铜箔,蓝色光源看锡膏反光。可以在光源控制器上配 2 个通道,各拍一张后做融合
- 远心镜头优先:PCB 检测尽量用远心镜头,没有透视畸变,焊盘测量更准
- 时间换精度:如果产线节拍允许(>5s/片),多角度分时打光远比单次"凑合打光"效果好
总结:打光方案速查表
| 检测对象 | 推荐打光方式 | 光源类型 | 关键技术点 |
|---|---|---|---|
| 金属件(螺丝、轴承、镜面) | 低角度环形 + 偏振 | 白色/蓝色 | 偏振片90°交叉,角度<30° |
| 透明塑料(瓶盖、薄膜、亚克力) | 背光源 + 暗场 | 红/蓝背光 | 背光要饱和,暗场找瑕疵 |
| PCB(焊盘、走线、丝印) | 同轴 + 分时多角度 | 同轴白+多色 | 差分法提取,远心镜头 |
| 印刷品(二维码、字符、LOGO) | 穹顶光源 | 白色 | 消除反光,均匀照明 |
| 大面积检测(手机玻璃、面板) | 线性光源 + 线扫相机 | 高亮白 | 配合线扫系统 |
打光的核心原则只有一条:让目标特征和背景之间的对比度最大化,其他都是围绕这个目标的技术路径。
发布日期:2026-07-02
标签:#机器视觉 #打光 #光源选型 #Halcon