【发布时间】:2017-04-18 13:01:45
【问题描述】:
我正在尝试使用 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 中是否有“正确”的过滤霍夫空间的方法?
更新: 正如戴维斯金指出的那样,我交换了坐标 (row, col) 与 (x, y) 解决了当前的问题,但核心问题仍然存在。 我的霍夫空间是这样的:
可以看出,有许多局部最大值,但一切都被中间的巨大斑点支配。我最初的想法是每个模糊区域都可以减少到一个最主要的点
我正在考虑对高于某个阈值的每个点进行聚类,但是循环遍历整个图像以找到这样的点并且找到聚类算法的馈送点将非常低效,因此必须有一种更智能的方法,也许是内部边缘图像本身的影响可以被抑制(像不规则杂波这样的小物体)?
【问题讨论】:
标签: c++ hough-transform dlib