image processing - maxlinegap - ハウ変換の説明



houghlines opencv c++ example (3)

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

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

https://ffff65535.com

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

誰かが私にもっとフレンドリーな言葉で説明するのを助けることができますか?


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

Houghに入力としてラインの画像を変換させます。 この画像には、線の一部であるものと背景の一部であるものの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の組み合わせが、行のパラメータとして返されます。


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

ハフ変換の第1ステップは、画像をエッジの集合に縮小することである。 Cannyエッジ検出器は頻繁に選択されます。 結果として生じるエッジ画像は、ハフプロセスへの入力として働く。

要約すると、エッジ画像内の「点灯」画素は、極座標に変換される。すなわち、それらの位置は、方向θおよび距離r- xおよびyの代わりに使用される。 (イメージの中心は、この座標の変更の基準点として一般的に使用されます)。

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

N個の最も頻繁なパラメータを探すこと、またはいくつかのnよりも小さいカウントが無視されるようにパラメータを閾値化することが一般的です。

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





pattern-recognition