Halcon如何从低对比度带噪图像中提取周转箱区域
周转箱轮廓/区域检测落地方案
相关参考素材
- 待处理采集图:

- 预期提取效果:

- 原始无压缩原图:

已知约束:周转箱高度不固定,采集图像高度会随箱体高度同步变化,高箱体场景下箱体左右两侧亮区可能无法完整显示;已尝试直接阈值分割、结合
mult_image、add_image算子做图像运算预处理后分割,均未得到干净准确的选中区域。
具体实现步骤
方案完全规避对侧边亮区、固定箱体高度的依赖,适配所有可变场景:
- 边缘增强预处理
跳过全局阈值处理逻辑,先对原始图调用sobel_amp算子,选取Size=3的核同时提取水平、垂直方向边缘;之后调用mean_image做1*3尺寸的横向均值滤波,滤除表面纹理、噪点产生的细碎边缘,保留箱体的连续轮廓边缘。 - 垂直投影定位左右边界
对边缘增强后的图像做垂直方向投影,逐列统计列方向的灰度累加值,灰度值出现连续陡增的两个区间,就是周转箱的左右竖直边缘。这一步不需要侧边亮区作为参考,只要箱体边缘落在画面内即可准确定位,定位完成后直接锁定X轴方向的处理ROI,缩小后续处理范围。 - 动态定位上下边界
在已锁定的X轴ROI范围内做水平方向投影,逐行统计行方向灰度累加值:- 上边界:从画面顶部向下逐行扫描,第一个灰度累加值超过预设阈值的连续行,即为箱体上沿
- 下边界:如果放置周转箱的台面位置固定,可提前标定台面Y轴基线直接作为箱体下沿;如果台面位置存在浮动,从画面底部向上逐行扫描,第一个连续长度符合箱体宽度阈值的水平边缘,即为箱体下沿
- 轮廓修正生成最终区域
拿到上下左右四个边界坐标后先生成初始矩形区域,调用reduce_domain将图像处理范围收缩到该矩形内,再调用threshold_sub_pix做局部阈值提取亚像素轮廓,对轮廓上因为反光、污渍产生的断点、凸起用union_collinear_contours_xld做共线轮廓合并,最终拟合生成最小外接矩形,即为干净准确的周转箱区域。
调优注意事项
- 不要使用全局固定阈值:周转箱表面反光、本身颜色存在波动,加上环境光变化,全局阈值极易把亮斑、阴影错判为箱体或背景
- 不要将侧边亮区作为定位锚点:此前图像运算预处理方案效果不佳,大概率是锚定了侧边亮区特征,投影定位边缘的逻辑可完全绕开这个依赖
- 如果现场安装存在相机倾斜,可在提取亚像素轮廓后调用
fit_rectangle2_contour_xld拟合带旋转角度的矩形,不需要强制轴对齐,提取精度更高
内容的提问来源于stack exchange,提问作者sharkyenergy
相关产品推荐
相关产品推荐

