托盘视觉检测为什么要设ROI?裁掉一半画面反而更准
前两个月调一个仓库的TrayVision系统,一开始用全图检测(整张1280×1024的图像都参与计算),准确率只有92%,误判率8%。
后来加了ROI(Region of Interest,感兴趣区域)裁剪,只保留托盘平面范围内的图像,准确率直接跳到98.5%,误判率降到1.5%以内。
为什么裁掉一半画面反而更准?因为去掉了噪声,留下了信号。
全图检测的问题:噪声太多
工业相机拍出来的托盘照片,除了托盘本身,还有很多"背景噪声":
- 仓库的货架、柱子、其他托盘
- 地面上的人和AGV
- 顶棚的灯光、风机
- 托盘旁边的杂物、包装材料
这些噪声会干扰轮廓特征比对算法,导致误判(False Positive)——明明托盘是对的,算法觉得不对。
举个具体例子:相邻货架上的相似托盘,如果进入检测画面,算法可能误判为"托盘放错了位置"。
ROI裁剪:只保留有用的那部分
ROI就是指定一个矩形区域,只对这个区域内的图像做处理,区域外的部分直接丢弃。
托盘检测的ROI怎么设?很简单:以托盘在图像中的位置为中心,向外扩展10-20厘米。这样裁剪出来的画面,基本只包含托盘本身,周围噪声被全部滤除。
假设原图是1280×1024像素,托盘占画面中间600×400像素的区域。设置ROI为(x=300, y=200, width=600, height=400),裁剪后只处理这24万像素,比全图130万像素少了80%以上。
ROI设置的具体方法
TrayVision系统提供了两种ROI设置方式:
- 固定ROI:相机位置固定、托盘位置固定时用。在系统里画一个矩形框,保存坐标即可。适合固定式安装(相机架在入库口上方)。
- 动态ROI:相机位置固定、托盘位置不固定时用。先用目标检测算法找到托盘的位置,再以此为中心设置ROI。适合AGV载着托盘经过相机下方。
设置时要注意:ROI要留有余量。托盘歪了、偏了,不能跑出ROI范围。我们一般留出20%的余量(比如托盘实际占300×200,ROI设360×240)。
设置前后的效果对比
| 指标 | 全图检测 | ROI检测 |
|---|---|---|
| 处理像素数 | 130万 | 24万 |
| 单帧处理时间 | 0.8-1.2秒 | 0.2-0.3秒 |
| 准确率 | 92% | 98.5% |
| 误判率 | 8% | 1.5% |
ROI不仅提高了准确率,还让处理速度提升了3-4倍。原来要1秒才能出结果,现在0.25秒搞定,吞吐量大了,入库效率自然上去了。