nph*_*ity 4 c++ opencv detection computer-vision subpixel
我正在使用C++和OpenCV开发一个简单的"激光线"扫描仪.到目前为止,我能够以1像素的精度检测激光线的中心,因此我有一个可能的"子像素"功能/算法的起点.(激光线宽约15-20像素)
现在我有兴趣将其提高到亚像素精度.我知道OpenCV有一些亚像素检测功能,但据我所知这些仅用于检测角落.
如果有人有任何建议,我想听听他们的意见.
一些信息;
系统:QT框架,C++,OpenCV库
相机; 单色(无色),配红色滤镜
图像分辨率; 2560 x 1920
注意:仅分析1个图像用于激光线.
我使用了两种基本方法,效果很好:
简单:在一帧,阈值和定位包含激光条纹图像的区域,然后在一个小间隔(5-7像素,取决于您的聚焦程度)周围的原始像素强度拟合抛物线强度最大值,在每个图像行.你的拟合程序必须具有一个算法,因为异常值很可能,例如在具有显着镜面反射的场景区域附近.
如果您的相机的帧速率足够高(或光束移动得足够慢),则更难,但更精确:Curless的时空分析.
搜索"亚像素激光拟合"会返回几个最近的结果.
在实际方面,要密切注意饱和度:曝光时间(或镜头光圈)应确保即使光束照射到物体表面最轻的部分,传感器也不会饱和.在信号被饱和度削减的区域中搜索峰值显然是没有意义的.
聚焦(和景深)是需要注意的其他方面 - 物体表面上光束的模糊图像将产生偏差峰值.
归档时间: |
|
查看次数: |
3506 次 |
最近记录: |