画像の特徴点を抽出する

 画像から特徴点を抽出する処理は、画像処理分野で広く行われており、 この技術は、パノラマ写真の合成・ステレオ写真からの距離測定・パターンマッチングなどに応用できます。  ここでは、個人的な興味により、工業分野(生産装置の高精度位置決め制御) で使うパターンマッチングに利用できるような特徴点抽出を考えていくことにします。


画像特徴を抽出するための画像
[写真1]画像特徴を抽出するための画像
画像特徴を抽出した結果
[写真2]画像特徴を抽出した結果

コーナー・角とは、どのようなモノか?

 コーナーや角とは、一体、どのようなモノなのでしょうか?また、それらは、画像中でどんな特徴を示すのでしょうか? これを諸先生方の文章から探してみると、「ガウス曲面」などの難し〜い理論に行き着くようです。 当研究所では、高校数学以上の難しい理論には、書いている本人がついていけませんので、何とか簡単に物事を進めます。

 画像を数ドットx数ドットの小さな窓から観察してみると、コーナーには、以下のような特徴が観察できるハズです。

このような部分を見つけ出せば、これを特徴点とすることができそうです。

特徴抽出のアルゴリズム(1)エッジ検出

コーナー画像の様子  右図は、画像中のあるコーナーを拡大したものです。 現在、中央のピンク枠で囲まれた画素に注目しているとします。 まず、上下左右の4画素と中央の画素を比べます。いずれも、多少の輝度差が見えます。 もし、これが、境界線の上でなければ、そのほど大きな輝度差は見えないことでしょう。 これを利用して、前述の条件1である、エッジがあることを検出します。 この作業は、与えられた画像のすべての画素について計算しなければなりませんから、 なるべく早く、無駄な位置を除外できることが、最終的に計算速度のアップにつながります。


輝度差=絶対値(中央の画素輝度 - 1つ隣の画素輝度)

を、上下左右に計算して、その合計がある程度の値を切れば、エッジなしとして、 以下の計算を行わないことにします。
 ただし、この「脚きり」は、コントラストの悪い画像からの特徴点抽出を不能にしてしまいます。 実際にライブラリ化するときには、「しきい値」を外部から設定できるようにするべきです。
 また斜めの画素を考慮していないので、「45度方向から近づく鋭い頂点」は検出できない可能性があります。 必要な場合、近傍斜めの4画素も考慮して「脚きり」を実行します。

特徴抽出のアルゴリズム(2)外周調査

 次に、薄紫色で囲まれたエリアに注目します。 中央の画素を取り囲むような形になっています。

「もし中央付近を通るエッジが直線であれば、
外周円内の、そのエッジで分割される領域の面積は同じくらいである」

なハズです。領域すべてを計算すると量が多いので、面積を求める代わりに、円周上の輝度合計を求めます。 薄紫色のエリアが円には見えないかもしれませんが、これで近似しています。

 薄紫色のエリアは全部で12ドットあります。これらの輝度合計を12で割ったものが、 中央ドット輝度(または、中央5ドットなどの輝度平均)と変わらなければ、エッジは直線です。 簡単にいえば、12ドットのうち、6ドットが白、6ドットが黒の場合、ほぼ直線となるであろうということです。 この図で見ても、12ドットのうち、右3ドット、下3ドット以外にも、左側下や、上側右のドットが明るさに貢献しています。したがって、この部分は、中央の画素輝度または中央の平均画素の輝度よりも高い値をとります。

中央輝度 = 中央画素の輝度 または 中央画素と周囲画素の輝度平均値
外周輝度 = 中央から離れた、ぐるり一周の輝度平均値
特徴点度 = 外周輝度 - 中央輝度

コントラスト補正

 通常1枚の画像の中でコントラストの違う2つの画像を認識することは、 (少なくとも生産装置の位置決め制御などでは)ほとんどないのですが、他分野で需要があるかもしれません。
 今回の方式であれば、外周を調査した時の最大値、最小値によって、ある程度の「局所コントラスト」がわかります。
せっかく「鋭い角度を持ったエッジ」(=明るい点が多い、または暗い点が多い)状態でも、 画像のコントラストが低い箇所であれば、特徴点度が落ちることになります。
そこで、外周上の輝度最大値と最小値の差を計算して、この逆数を掛けることにより、コントラスト補正が可能になります。  そして、外周上の最大値・最小値の差があまりに小さい場合、これを誤認(孤立点を見ているなど)として、排除することにも使えます。

特徴点の方向

 特徴点にある、コーナーや角の向いている方向がわかれば、後段で行うマッチング処理に使えるかもしれません。 そこで、特徴点の方向を検討してみることにします。
コーナー画像の方向  これは、先ほどの図に方向を書いたものです。黒い90度くらいの黒と、270度くらいの白(灰色)があります。 ここでいう特徴点の向きは、常に明るい方向を向くものとします。つまり、黒地に白の90度でも、 白の中央付近を向くことにします。この図の場合、中央から右下に向かっているというものを求めます。
 難しく考えると、輝度をZ座標として、3次元の曲面における法線ベクトルなんてことになるのでしょうが、 ようは、中央画素から見て、上半分と下半分を点対称な形にして、各々の合計の差をY成分、 同様に右半分と左半分に対して計算したものをX成分としたベクトルは、なんとなく、命題の方向を向きます。(笑)
 この思いつきを使ってエッジの角度検出を作ってみました。
(07-04-27追記)この角度、誤差を多く含む角度帯があります。エッジ角度検出のページで検証します。


無作為研究所トップページに戻る

copyright(c)2007 by MUSAKUI-LABO