我正在尝试使用来自DLIB的霍夫变换,但最多只能显示一行。 DLIB文档中的示例仅使用一个要点:

point p = max_point(mat(himg));

如何显示所有强线(超过特定阈值或N个多数票)?

我试图遍历所有点并掩盖每个已经找到的点,但是dlib::max_point仍然找到相同的点,尽管点已经被清零了:
for(int i = 0; i < nPoints; ++i){
    dlib::point p = dlib::max_point(dlib::mat(hImg));
    maxPoints.push_back(p);
    std::cout << "Turning point " << p.x() << ", " << p.y() << " = " << hImg[p.x()][p.y()] << std::endl;

    hImg[p.x()][p.y()] = 0;

    std::pair<dlib::point, dlib::point> line = ht.get_line(p);

    dlib::draw_line(temp, line.first+5, line.second+5, dlib::rgb_pixel(255,255,0));
}

在第一次循环迭代后产生相同的值:
Turning point 595, 584 = 78540
Turning point 595, 584 = 0
Turning point 595, 584 = 0

是否有“正确的”方法通过DLIB中的霍夫空间进行过滤?

更新:
正如戴维斯·金(Davis King)所指出的,我交换了坐标(行,列)与(x,y),这解决了眼前的问题,但核心问题仍然存在。
我的哈夫空间看起来像这样:

c&#43;&#43; - 通过Hough变换进行过滤会产生DLIB-LMLPHP

可以看出,存在一些局部最大值,但是一切都由中间的巨大 Blob 控制。我最初的想法是可以将每个模糊区域减少到一个最主要的点

我当时正在考虑对每个阈值以上的点进行聚类,但是循环遍历整个图像以找到此类点,并将聚类算法找到的补给点效率非常低,因此必须有一种更智能的方法,也许是图像的内部边缘本身是否可以被抑制(小的物体,例如不规则的杂波)?

最佳答案

您已交换行和列。 hImg[p.x()][p.y()] = 0;是向后的,应该是hImg[p.y()][p.x()] = 0;

关于c++ - 通过Hough变换进行过滤会产生DLIB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43472964/

10-12 21:21