2011年5月17日火曜日

【OpenCV】cvSobel / cvLaplace

画像のエッジ抽出をするのにcvSobelとcvLaplaceがでてきたのでメモ。
そもそもエッジ抽出をするとはどういう事なのか?と言うところから。
画像内にみることのできる輪郭線を抽出する、つまり色や形の変化がはっきり見えるところを特徴として抽出すると言う事、正確に言うと濃度の変化が大きいところをエッジと言うらしい。
つまり濃度の変化の値(つまり変化の傾き)が大きいところ、言い換えると変化を表す曲線の接戦がより垂直に近いところがエッジとなる。結果的に言うと2次微分をしたときに、その傾きの値が0になる点をエッジとなると見なせばよい、と言う事だそうだ。

そこで使うのがcvSobelと、cvLaplaceと言う事らしい。
Sobelを調べたけど元のいみはわからず。でてきたのは↓こちら。※一次微分と言う意味かと思ったらそれはGradientと言うらしい。
ソーベルフィルター《画像処理での edge detection filter の一つ; 水平方向と垂直方向のものがあり, 組み合わせて用いることもある; Prewitt filter に比べ, そのピクセルのある行・列の重みが高くなっている》.

「Weblio 辞書 / 英和辞典・和英辞典」より

ちなみにLaplaceはLaplacian(2次微分)で元はピエール=シモン・ラプラスという数学者からなんだそうな。
2 階線型の偏微分方程式である。
「wikipedia / ラプラス方程式」より


と書いてあったけど、正直のところぼんやりとしかわからない。とりあえず読み込んだ画像をグレースケールに直して、cvSobelとcvLaplaceをそれぞれ適応させてみると、以下のような結果を得ることができた。




ちなみにSobelは一次微分なので、X、Y方向を指定してあげて抽出する。みた通り、X、Y軸方向それぞれのエッジを検出することができる。また、Laplacianに比べて細い部分は取得できていないものの、細かいノイズを気にしなくても良いそう。

と、ここまでやってなんとなくどういうところに使えるかや、根本的な原理はなんとなくわかったものの、処理そのものがあまり理解できていないので、もう少し詳しくみた方が良さそう。

メモ:こちらのPDFが参考になそう。
http://www.osakac.ac.jp/labs/hild/IPslide7.pdf