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)を入れ替えましたが、コアの問題はまだあります。 マイハフ空間は、次のようになります見ることができるように
、そこに極大値の数がありますが、すべてが中央に巨大なブロブによって支配されます。私の最初のアイデアは、すべてのぼやけた領域を1つの最も支配的な点に減らすことでした。
私はある閾値以上の点の点集合を考えていましたが、画像全体をループして、クラスタリングアルゴリズムは非常に非効率的であるため、よりスマートな方法が必要です。おそらく、画像そのものの内側エッジが抑制される可能性があります(不規則なクラッタのような小さなオブジェクト)?
ありがとうございます。ありがとうございました。ある場所にx、y、もう1つの行を使用すると混乱することがあります。col – user3002166