画像中にある直線成分を探し出す


ハフ変換を用いた直線の検出                (2012/09/08)

ハフ変換という古典的な手法ですが、現時点でも非常に役立ちます。
(ただし、あくまで古典的アプローチ方法です。
現在なら任意の一点を通る直線群を表す方程式からアプローチする方がスマートかと思います。)



はじめに

画像を"認識"しようとすると、画像に描かれている物を判断する手法が必要になります。
画像中の引っかき傷を見つけるなら、画像の中から直線に見える部分を探すのが良いかも知れません。
人の目では簡単に見分けられますが、コンピューターが自動的に見つけ出すのは難しそうです。
画像の中から直線に見える部分を見つけ出せても、"認識"は出来ませんが、第一歩には違いありません。


直線の認識

直交座標上の任意の一点を通る直線は無限に存在しますが、異なる2点を通る直線は1本に限定されます。
これは、直交座標上に一本の線が存在している場合、全ての点の座標がある直線を表す関数の解となっいる
事を意味しています。次に、直交座標上に存在する一本の破線を考えて見ます。破線を構成する画素の座標
もまた、ある直線を表す関数の解となっている事は容易に理解できます。(破線には、連結性の途切れ有り)
では逆に、画面上にランダムに存在している十分に多くの画素があると仮定します。この画素の座標が、特定
の直線を表す関数の解になっているかを調べる事を考えて見ます。
すると、非常に多くの点(画素)を解に持つ直線の方程式が見つかるかも知れません。画面上に存在している
画素数に対して、検出される直線の方程式(多くの画素の座標が解となる)の数が十分に少ない時、画像上に
見つかった方程式分の、線成分と思われる部位が存在していると判断出来ます。
では、この直線の方程式はどの様に見つければ良いのでしょうか?
無限に存在する直線の方程式を場当り的に調べて、該当する方程式を探しすのでしょうか?
明らかに不可能である事は理解出来ると思います。 ただ、概念自体は正しい判断と言えるでしょう。

ここで登場するのが、ハフ変換と呼ばれる手法です。
ハフ変換では、直交座標上の任意の一点を通る直線群を、原点から概直線に対し下した垂点との距離 r と
その成す角度 θ(0~2π)で表現します。よって直交座標上の任意の一点を通る直線群は、ハフ空間上では
1本の曲線として表現されます。
ここで、先程の話に戻ってみます。 直交座標上の異なる2点を通る直線は、ハフ空間においては、直交座標
上の概点を通る直線群を表す2本の曲線の交点として出現します。  これで全てが氷解したと思います。
直交座標上の全対象画素を通る直線群を、ハフ空間上に変換し、激しく曲線が交差している部分を探し出せ
ば、直交座標上の多くの画素から構成される直線の方程式を特定できる事になります。
そして最も重要な事は、この処理が有限の範囲(とは言っても非常に多くの処理は必要になります)で、解決
できる事です。 ただし、期待する粒度により、処理速度と検出精度は大きく変化してしまいます。



処理の流れ


 図1、線成分を検出する画像 【クリックで拡大表示】



 図2、画像をハフ変換処理(投票空間:ハフ空間上に変換された曲線の軌跡を蓄積)
 輝度の高い部分は、直交座標上の直線成分を表す部分
 検証は行っていませんがこの画像に以下の処理を行っても r,  θの決定は可能
 画像左下原点、横軸は 0から2π、 縦軸 rには 任意のスケールを適用する事。



 図3、ハフ変換画像中の、高輝度部を拡大表示(ラインプロファイル表示有り)
 非常に鋭いピークがある事が分る。 
 直線成分(直線の方程式の解)が多い、信頼できる直線の位置を特定している。



 図4、ハフ変換画像から、ピーク部分を探すために、平滑化フィルターを施した画像を作成
 ハフ変換で得られた画像を、通常の濃淡画像と見做して、古典的な画像処理を施せれば良い



 図5、ハフ変換画像から平滑化フィルターを施した画像を算術的に引き算した画像



 図5、適切な閾値で2値化し、直線の方程式の候補となる範囲を絞り込む
 このブロブ(ROIとして使用)内のピーク値を持つ場所を探し、直線の方程式を作る。
 各領域を識別(個別に認識)出来るように、ラベリング処理を施しておく。



 図5、二値化しラベリングされた領域毎に抽出された、ハフ変換データ
 各領域内の最大値(ピーク)の値を持つ、r,  θ の座標を探す。
 各領域の r,  θ から、直交座標上の直線を決定する。

 ピークの探し方:
  二値化しラベリングされた領域を参照しながら、線成分を検出する画像の輝度値を
  検査し、ラベル付けされていない場所は無視しながら、ラベル付けされた領域毎の
  最大輝度を探す。1回の画像走査で、各領域毎の最大輝度値を容易に決定できる。



 図6、ハフ変換を使って検出した各  r,  θ の値から直線を決定し、
 元の画像上に直線を赤で描画 【クリックで拡大表示】



終わりに

演算時の誤差処理や、抽出領域内に複数のピークを持つ場合の処理等は必要になりますが、基本的な処理
の概念に関しては理解出来ると思います。

また線は、幅を持たない事を前提としていますが、実際の画像では幅を持って存在します。均一な幅を持つ
線の場合、ハフ空間上ではピーク値を持つ座標が広がりを持った領域を形成する可能性が高くなります。
この場合は、ピーク値が構成する領域を一つの対象物とみなし、その重心を算出して値を r,  θ の代表値
として使用する等の工夫が必要です。(r, θ 平面を、XY平面と見做して従来の2値画像の計測処理を行う)

投票空間では、1軌道(曲線)を1単位の輝度で描画し、その軌跡を積算(蓄積)する事で、複数の軌道の交点を
高輝度を持つ座標点として識別出来ます。



go to TopPage go to CategoryTop