通过霍夫变换进行过滤导致DLIB

时间:2017-04-18 13:01:46

标签: c++ hough-transform dlib

我正在尝试使用DLIB中的Hough变换,但不能显示多行。 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

是否有正确的&#34;在DLIB中通过霍夫空间过滤的方法?

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

Hough Image in color for clarity

可以看出,有很多局部最大值,但是一切都被中间的巨大斑点所支配。我最初的想法是,每个模糊区域都可以减少到一个最主要的点

我正在考虑聚集每个特定阈值以上的斑点,但是在整个图像中循环以找到这样的点并且发现聚类算法的进给点将是非常低效的,因此必须有更聪明的方法,也许是内边缘可以抑制图像本身(像不规则杂乱的小物体)?

1 个答案:

答案 0 :(得分:2)

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