2017-04-18 50 views
1

我试图从DLIB使用Hough变换,但无法获取多行显示。在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 

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

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

Hough Image in color for clarity

可以看出,有一些局部最大值,但一切都被在中间的巨大团块为主。我最初的想法是,每个模糊区域可以减少到一个最主要的点

我正在考虑聚集每个点超过一定的阈值,但遍历整个图像找到这样的点,并找到喂食点聚类算法效率非常低,所以必须有一个更智能的方法,也许图像本身的内边缘可以被抑制(像不规则杂波这样的小物体)?

回答

2

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

+0

谢谢,我有时混在一起时有一个地方使用x,y和另一行,col – user3002166