2012-07-05 8 views
10

OpenCVのHoughLinesまたはHoughLinesP関数は、HoughCircles関数のようにアキュムレータ順の行のリストを返しますか?私は線の順序を知りたいです。また、ラインのアキュムレータ値を取得するのが非常に便利なので、固定されたしきい値の代わりにインテリジェントで適応性のあるしきい値を使用できます。 rewriting OpenCV myselfなしで注文またはアキュムレータの値を使用できますか?OpenCVハフ最強の行

+1

良いものです。私はいつもラインが順番に与えられていると仮定しました。そして、この仮定はこれまでのところ私の結果と一致しています...しかし、確かに良いでしょう。 –

答えて

11

HoughTransformは、投票数を降順に並べ替えます。あなたはコードを見ることができますhere

しかし、投票数は関数が返すときに失われます - 唯一の方法はOpenCVを変更することです。

それは非常に複雑ではないということです - 私は一度それをしました。出力をvector<Vec2f>からvector<Vec3f>に変更し、最後のparamに投票数を入力するのは数分です。

さらに、3番目のパラメータ(houghがCに実装されています)を追加するには、CvLinePolarを変更する必要があります。C++にラッパーがあるため、実装とラッパーの両方を変更する必要があります。

変更するための主なコードはここに

for(i = 0; i < linesMax; i++) 
{ 
     CvLinePolar line; 
     int idx = sort_buf[i]; 
     int n = cvFloor(idx*scale) - 1; 
     int r = idx - (n+1)*(numrho+2) - 1; 
     line.rho = (r - (numrho - 1)*0.5f) * rho; 
     line.angle = n * theta; 

     // add this line, and a field voteCount to CvLinePolar 
     // DO NOT FORGET TO MODIFY THE C++ WRAPPER 
     line.voteCount = accum[idx];   

     cvSeqPush(lines, &line); 
} 
+0

これを明確にしてコードを指摘してくれてありがとう。私は確率的なバージョンを使用しているし、コードを通過する、それはラインを提供することも素晴らしいでしょうスピードアップ物事。 – zzzz

+1

Probabilisticは同じファイルにありますが、あなたがすでにそれを見つけたと思います。ライン検索における異なるアプローチは、投票数が古典的なHほど重要でないことを意味する。ラインに必要最低投票がある限り、それは結果キューにプッシュされる。並べ替えは実​​行されません。 – Sam

+0

こんにちは、 このスレッドを修正して申し訳ありませんが、確率的ハフ変換でアキュムレータ値を取得するアイデアはありますか?私はアキュムレータ行列の中でどこの票がどこにあるのかよく分かりません。 – Aeefire