以亚像素精度检测激光线中心
Detect center of laser line with sub-pixel accuracy
我正在使用c++和OpenCV开发一个简单的"激光线"扫描仪。到目前为止我能发现激光线的中心,精度为1像素,所以我有一个可能的"亚像素"函数/算法的起点。(激光线约为。15-20pixels宽)
现在我有兴趣将其细化到亚像素精度。我知道OpenCV有一些亚像素检测功能,但据我所知这些只是用于检测角落。
如果有人有什么建议,我想听听。
一些信息;
-
系统:QT框架,c++, OpenCV库
-
相机;单色(无色),配红色滤镜
-
图像分辨率;2560 * 1920
-
注:激光线只分析一张图像
我使用过两种基本方法,并取得了良好的效果:
-
简单:在一帧上,阈值并定位包含激光条纹图像的区域,然后在每个图像行周围的强度最大值周围以小间隔(5-7个像素,取决于您的聚焦程度)拟合原始像素强度的抛物线。你的拟合程序必须有一个鲁棒器,因为异常值是可能的,例如,在具有显著镜面反射的场景区域附近。
-
如果你的相机帧率足够高(或者光束移动得足够慢),更难,但更精确:Curless的时空分析。
搜索"亚像素激光拟合"返回几个最近的结果。
在实用方面,密切注意饱和度:你的曝光时间(或镜头光圈)应该确保你的传感器不会饱和,即使光束击中物体表面最轻的部分。在信号被饱和截断的区域寻找峰值显然是没有意义的。
对焦(和景深)是另一个需要注意的地方——物体表面上光束的模糊图像会产生一个偏峰。
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 检测特定像素上的某种颜色并在检测到后发送点击的最快方法是什么?
- 检测像素的颜色变化
- openCV中的颜色检测-像素检查问题
- 漫画气球检测:如何在 OpenCV 中计算矢量椭圆内的白色像素<RotatedRect>?
- 访问检测到的对象/c++内部的像素值
- 如何从图像中访问被检测人脸中的人脸像素
- 以亚像素精度检测激光线中心