我有一个LRF,它返回我需要用来检测圆的2D点云(好吧,在任何时间点只能看到一个半圆)。在Canny和GaussianBlur返回圆圈之后使用OpenCV中的HoughCircles,但即使花费数小时玩值,它仍然会返回误报。这是检测圈子的代码部分。 image
基本上是从LRF输入创建的Mat
类型的图像。
cv::Mat destination;
cv::Canny(image, destination, 200, 20);
cv::GaussianBlur(destination, destination, Size(7, 7), 2, 2 );
vector<Vec3f> circles;
cv::HoughCircles(destination, circles, CV_HOUGH_GRADIENT, 1, 100, 200, 15, 10, 20);
可以假设点云中只有一个真圆。在大多数情况下,它工作正常 但是,有时会发生诸如此类的误报。
到目前为止,我设法通过将HoughCircles的minDist参数增加到大于图像大小来将任意点的圆数减少到1,但是仍然会导致误报,因为它没有检测到实际的圆圈。我认为这些误报来自LRF输入中的噪声。有没有办法可以将这个点云图像转换为带有线而不是点的图像?所以如果在应该有线的地方检测到一个圆圈,我知道这是一个误报。或者也许有人有一种我一直都缺少的更好的方法。
任何意见都会受到赞赏。