画像の解析初級編 (傾きを検出してみる)
はじめに
筆者が以前よく扱っていた際に「楽して一括補正出来ないだろうか」と思い勉強した内容です。
※残念ながら完成間近にしてソースが全て消えたため、頓挫しました。
線の検出の仕方
直交座標(x-y座標)と極座標(ρ-θ)を行ったり来たりすることで傾きを検出します。
円の検出も出来るのですが、今回は割愛します。
ハフ変換の導入
この点を通る全ての直線は
のように表すことが出来ます。
それぞれ、原点から直線に垂直に線を引いた際の距離(ρ)、角度(θ)となります。
そしてこの距離と角度で表した座標のことを極座標と言います。
以下の図が参考事例です。
ハフ変換の簡単な事例
x-y座標に以下の様な y = -x + 2 の直線(1)があるとします。
この直線は(1,1)を通ります。
これを極座標に変換してみると
ρ = cos(θ) + sin(θ)
と、以下の様な円を描きます。
大抵の座標では放物線を描きますが、Mac標準搭載のGrapherでは何故か円を描きました。。ここはスルー。
更に、1の直線は(1.5, 0.5)も通ります。
この時の極座標は以下のような円となります。
上の2と3の交点を求めると
のようになります。
この交点は「(1,1)も通るし、(1.5,0.5)も通る直線」を意味します。
この点はρ=√2, θ=1/4πです。
Hough逆変換は、
y = -(cosθ/sinθ)・x + ρ/sinθ
および
x = -(sinθ/cosθ)・y + ρ/cosθ
より、x-y座標に逆変換すると・・・
y=-x+2
が求まります!
実際に使うとして
そのため、実際の実装としては、
・ノイズを除去する
・輪郭強調フィルタをかけてエッジ部分だけを処理するようにする
などの手順を踏まなければなりません。
また実際の画像は全て必ず一定の直線とは限らないため、
平均を取る処理など色々実践で使うには工夫が必要ですが、基本的な理論は三角関数と極座標を知っていれば理解可能なものです。
筆者の対象は書籍が主ですが、実写でも判別がしやすいものであれば・・・
このような画像も・・・
こんな感じに勝手に回転してくれます。
四隅に出来る余白の補間はひじょ〜〜〜〜に難しいので当面は対象外です。。。
Author Profile
スターフィールド編集部
SHARE