2012-04-21 42 views
13

透視投影を調整する前に輪郭検出で矩形検出を行い、OpenCvでポリゴンを適用して矩形の位置を取得しました。そしてそれは素晴らしい仕事です。しかし私のグループの一部の人々は、ハフ変換を代わりに提案しました。矩形検出にハフ変換を使用する利点があるのだろうかと思います。ハフ変換と透視投影による矩形認識の輪郭検出

更新:私は両方の方法を試しました。私の例では、両方のメソッドがCannyエッジ検出の後に正常に機能しました。しかし、ハフ変換は線を生成するので、線の長さや線の接続性などのいくつかを仮定しなければならず、接続された線の検索や接続された線からの角の点の検索などの追加計算を行う必要があります。個人的にはコンセプトが簡単なのでコンター・メソッドがよかったです。この方法では、四隅の閉じた凸ポリゴンで近似できる等高線を検索し、その透視投影のためにポリゴンを調整します。それはそれです。

答えて

12

ここまで輪郭検出の結果はどんなものですか?どのような例がありますか?

ハフ変換は、矩形検出に適しています。IFFでは、矩形の辺がイメージ内で最も顕著な線であると仮定できます。 次に、ハフ空間の4つの最大ピークを検出するだけで、長方形が得られます。

これは、たとえば、暗い背景の前に白い紙の写真で動作します。

ハフ変換の前に小規模な構造を削除するには、ぼかし、しきい値、形態素演算子を使用して画像を前処理するのが理想的です。

画像に小さな矩形や他の種類の目立つ線が複数ある場合は、輪郭検出が適しているかもしれません。

ハフのためのいくつかの一般的な利点は、私の頭の上をオフに変換:矩形の一部を妨げ、又はフレームの外にされている場合

  • ハフ変換はまだ動作することができます。
  • ハフ変換は輪郭検出より速いはずですか?
  • ハフ変換は、直線ではないものをすべて無視します。そのため、乱雑な画像でより大きな成功を収めることができます。 (矩形の辺が最も顕著な線である場合)

最終的には入力データに依存するでしょう。どのような例がありますか?

おそらく、組み合わせたアプローチが最適でしょうか?私はハフ変換を使用していくつかの実験は、しばらく前に四角形を検出するために、変換、あなたがここにいくつかの予備的な結果を見ることができなかった Combining Hough Transform and Contour Algorithm for detecting Vehicles License-Plates

を参照してください。残念ながらそれは現時点で存在するすべてである http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=14491&start=9

を、プロジェクトは現在、中断してしまったとき、私は忙しさが減っているときにそれを再開したいと思っています。

私はあなたの結果に非常に興味があります。

(あなたがproportions of a perspective-deformed rectangleをチェックアウトも、遠近補正を行っている場合)

+0

あなたの答えをありがとう。実際、私のコードはopencv sample [squares](https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/squares.cpp?rev=4079)と大きく異なりません。その方法は基本的にライン検出のため、ハフ変換を使って実際に矩形をどのように検出することができますか?私はすべてのラインを通過し、接続されたラインを見つけて、閉じられているかどうかを確認しなければならないと思います。 –

+0

ええ、私はそれについてのメモを追加しました。ハングを使った長方形の検出は、長方形が写真の中で最も大きくて目立つ構造であればうまく機能します。 – HugoRune

5

ハフと輪郭検出の検索SOこれに私をもたらした変換。

将来サーチャーを助けるために、このブログ記事は、OpenCVのでこれを行うには良いチュートリアルを持っている:
http://opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects/

コンセプト:
1.エッジマップ取得 - 気の利いた、ソーベル
2.ラインを検出ハフ変換を使用します
3.線の間に交差点を見つけることによって角を取得します。
4.近似多角形カーブに、と約4つの頂点があるかどうかを確認します。ポリデュプレックス
5.左上、左下、右上、右下隅を決定します。
6.変換行列を得るにはgetPerspectiveTransformで透視変換を適用し、変換を適用するにはwarpPerspectiveを適用します。

+1

リンクがスパムサイトにつながる場合は、https://github.com/bsdnoobz/opencv-code/blob/master/quad-segmentation.cppを試してみてください。 – dirkjot