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

Detect center of laser line with sub-pixel accuracy

本文关键字:检测 像素 精度      更新时间:2023-10-16

我正在使用c++和OpenCV开发一个简单的"激光线"扫描仪。到目前为止我能发现激光线的中心,精度为1像素,所以我有一个可能的"亚像素"函数/算法的起点。(激光线约为。15-20pixels宽)

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

如果有人有什么建议,我想听听。

一些信息;

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

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

  • 图像分辨率;2560 * 1920

  • 注:激光线只分析一张图像

我使用过两种基本方法,并取得了良好的效果:

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

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

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

在实用方面,密切注意饱和度:你的曝光时间(或镜头光圈)应该确保你的传感器不会饱和,即使光束击中物体表面最轻的部分。在信号被饱和截断的区域寻找峰值显然是没有意义的。

对焦(和景深)是另一个需要注意的地方——物体表面上光束的模糊图像会产生一个偏峰。