38

私は冒険していて、コンピュータビジョンに向かって私の最初の赤ちゃんに足を踏み入れています。私はハフ変換を自分で実装しようとしましたが、私は全体の画像を取得しません。私はウィキペディアのエントリーを読んだり、リチャード・ドゥダとピーター・ハートのオリジナルの "ハーフ変換を使って絵のラインとカーブを検出"していましたが、助けにはなりませんでした。ハフ変換を説明してください

誰かがより親しみやすい言葉で私に説明するのに役立つことができますか?

答えて

32

矩形座標の行を考えると、一般的にはy = mx + bです。ウィキペディアの記事では、線を極座標形式で表現することもできます。ハフ変換はこの表現の変化を利用します(行については、とにかく、円や楕円などにも適用できます)。

ハフ変換の最初のステップは、イメージをエッジのセットに縮小することです。 Cannyエッジ検出器は頻繁に選択されます。結果として生じるエッジ画像は、ハフプロセスへの入力として働く。要約する

、エッジ画像で「点灯」ピクセルは、すなわち、それらの位置が方向シータ距離 R用いて表現され、極形式に変換される - その代わり X Yのを。 (イメージの中心は、この座標の変更の基準点として一般的に使用されます。)

ハフ変換は基本的にヒストグラムです。同じthetaとrにマッピングされているエッジピクセルは、イメージ内に線を定義するものとみなされます。発生頻度を計算するには、 theta rが離散化されます(いくつかのビンに分割されます)。すべてのエッジピクセルが極座標形式に変換されると、ビンが分析されて元の画像の線が決定されます。

N最も頻度の高いパラメータを探すのが一般的である - またはしきい値いくつかより小さい数のnが無視されるようにパラメータを設定します。

私は、この回答が最初に提示した情報よりも優れているとは確信していません。あなたが固執している特定の点はありますか?

+0

あなたの答えは良いです。それは私が他の場所で読んだことを再確認します。以下のRay Hの答えは、私が問題を抱えていることを示しました。パラメータのすべての組み合わせが計算されます。だから私の頭は、違ったやり方でそれを聞くだけで、より明確になっています。 – Haoest

+3

[http://gmarty.github.io/hough-transform-js/](http://gmarty.github.io/hough-transform-js/) – user1311069

15

ハフ変換は、線(または円、または他の多くのもの)を表す最も可能性の高い値を見つける方法です。

あなたはハフ変換に入力としてラインの画像を与えます。この画像には、線の一部であるものと背景の一部であるものの2種類のピクセルが含まれます。

ラインの一部である各ピクセルについて、すべての可能なパラメータの組み合わせが計算されます。例えば、座標(1,100)のピクセルがラインの一部である場合、それはグラジエント(m)= 0およびy-インターセプト(c)= 100のラインの一部であり得る。また、 m = 1、c = 99の一部である;またはm = 2、c = 98;またはm = 3、c = 97;等々。線方程式y = mx + cを解いて、すべての可能な組み合わせを見つけることができます。

各ピクセルは、それを説明できるパラメータ(mおよびc)のそれぞれに1つの投票を与えます。あなたのラインに1000ピクセルがある場合、mとcの正しい組み合わせには1000票があると想像することができます。

最も投票数の多いmとcの組み合わせが、行のパラメータとして返されます。

+0

に投票スペースを表示するためのクールなjavascriptツールがあります非常に有用な、ありがとう。 – Haoest

102

はここハフ画像内の行を検出するための作品を変換する方法の非常に基本的な、視覚的な説明です:

ここenter image description here

+0

あなたの素晴らしい絵の説明をありがとう!非常に素晴らしい! –

+1

すばらしい例!ちょっと必要があるかもしれませんが、辺に沿って線を描いていることを言及し、それらの辺をポイントとして示しましたが、実際にはこれらの線はその辺に接しています。 – SIslam

+0

@ mlai、この画像を作成しましたか?もし私がマスターズの論文に使うことができたら、もしあなたがそれを手に入れた場所を私に見せてもらえますか?ありがとう! –

1

は、テレビ番組のパイロットエピソードで使用される別の視点(一つだ番号 ):噴水のような芝生のスプリンクラーが、以前に芝生のどこかにいて、周りに水滴を投げかけていたとしましょう。今度はスプリンクラーがなくなりましたが、滴が残っています。それぞれのドロップを自分のスプリンクラーに変えてみましょう。スプリンクラー自体は、自分自身の周りにドロップレットを投げかけます。ドロップはどの方向から来たのかわからないため、あらゆる方向にあります。これは地面にたくさんの水を薄く散らすが、一度にすべての水滴が一斉にぶつかる場所があることを除いて。その場所は元のスプリンクラーがあった場所です。

(例えば)ライン検出へのアプリケーションは似ています。画像の各点は元の液滴の1つです。スプリンクラーとして機能するとき、それはその点を通過する可能性のある全ての線を示すそれ自身の液滴を送る。たくさんの二次液滴が着地する場所は、多数の画像点を通る線のパラメータを表します。 - VOILA!ラインが検出されました!

関連する問題