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

nph*_*ity 4 c++ opencv detection computer-vision subpixel

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

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

如果有人有任何建议,我想听听他们的意见.

一些信息;

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

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

  • 图像分辨率; 2560 x 1920

  • 注意:仅分析1个图像用于激光线.

Fra*_*ari 8

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

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

  • 如果您的相机的帧速率足够高(或光束移动得足够慢),则更难,但更精确:Curless的时空分析.

搜索"亚像素激光拟合"会返回几个最近的结果.

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

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