以亚像素精度检测激光线中心

时间:2013-05-01 07:42:41

标签: c++ opencv computer-vision detection subpixel

我正在使用C ++和OpenCV开发一个简单的“激光线”扫描仪。到目前为止我可以检测到 激光线的中心,精度为1像素,所以我有一个可能的“子像素”功能/算法的起点。 (激光线宽约15-20像素)

现在我有兴趣将其提升到亚像素精度。我知道OpenCV有一些 子像素检测功能,但据我所知这些仅用于检测 角落。

如果有人有任何建议,我想听听。

一些信息;

  • 系统: QT框架,C ++,OpenCV库

  • 相机; 单色(无色),配备红色滤镜

  • 图像分辨率; 2560 x 1920

  • 注意:仅分析激光线的1张图像。

1 个答案:

答案 0 :(得分:7)

我使用了两种基本方法,效果很好:

  • 简单:在一帧,阈值和定位包含激光条纹图像的区域,然后在一个小间隔(5-7像素,根据您的聚焦程度,以5-7像素)拟合抛物线到原始像素强度在每个图像行的强度最大值附近。你的拟合程序必须有一个算法,因为异常值很可能,例如具有显着镜面反射的近场景区域。

  • 更难,但如果你的相机的帧速率足够高(或光束移动得足够慢),则更精确:Curless spacetime analysis

搜索“亚像素激光拟合”会返回几个最近的结果。

在实际方面,请密切注意饱和度:曝光时间(或镜头光圈)应确保即使光束照射到物体表面最轻的部分,传感器也不会饱和。在信号被饱和度削减的区域中搜索峰值显然是没有意义的。

聚焦(和景深)是需要注意的其他方面 - 物体表面上光束的模糊图像会产生偏差峰值。