2017-04-18 13 views
1

DLIBからハフ変換を使用しようとしていますが、複数の行を表示することはできません。 DLIBドキュメントの例では一つだけ、強力なポイントを使用します。ハフ変換によるフィルタリング結果DLIB

point p = max_point(mat(himg)); 

はどのようにして表示するすべての強力な(一定のしきい値またはN最も多くの票以上)の線を得ることができますか?

Iポイントをループしようとし、既に検出された各マスクが、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のハフ空間を介したフィルタリングに「正しい」アプローチがありますか?

UPDATE: Davis Kingが指摘しているように、私はすぐに問題を解決した座標(行、列)vs(x、y)を入れ替えましたが、コアの問題はまだあります。 マイハフ空間は、次のようになります見ることができるように

Hough Image in color for clarity

、そこに極大値の数がありますが、すべてが中央に巨大なブロブによって支配されます。私の最初のアイデアは、すべてのぼやけた領域を1つの最も支配的な点に減らすことでした。

私はある閾値以上の点の点集合を考えていましたが、画像全体をループして、クラスタリングアルゴリズムは非常に非効率的であるため、よりスマートな方法が必要です。おそらく、画像そのものの内側エッジが抑制される可能性があります(不規則なクラッタのような小さなオブジェクト)?

答えて

2

行と列を入れ替えました。 hImg[p.x()][p.y()] = 0;は後方です。hImg[p.y()][p.x()] = 0;

+0

ありがとうございます。ありがとうございました。ある場所にx、y、もう1つの行を使用すると混乱することがあります。col – user3002166

関連する問題