アーカイブ

‘image processing’ タグのついている投稿

Snakesによるfeature extractionの説明

2009 年 2 月 14 日 コメントはありません

都市域マッピングとは別件でSnakesによる線形オブジェクトの抽出を扱っている。パラメータの調整に関して調べているのだが,OpenCVの説明書は無学の私には意味不明。エネルギーってなんなんだよ!

研究室の人に相談したら,Snakesによる線形オブジェクトの抽出の解説として,下記論文を教えてくれた。

Road Extraction Based on Line Extraction and Snakes”, Master thesis, Computational Vision and Active Perception

Chapter 4 Theory of Snakesに解説がある。

またSnakesの大元は下記。こっちのほうがわかりやすいかも。

Snakes: Active contour models

とりあえず自分の理解した範囲でOpenCVの関数のパラメータを解釈すると,

alpha: 外部エネルギー。desired local minimumの意味がよくわかっていないが,画素値が谷になっているところ(極小点)に近づける度合いをコントロールするのだと思う
beta: 内部エネルギー。滑らかさをコントロールする。大きいと抽出結果が滑らかになる
gamma: 画像エネルギー。エッジへの近接具合をコントロールする。大きいとコントロールポイントが画像のエッジに近づく

カテゴリー: 研究 タグ: ,

OpenCVによるフィルタ処理

2009 年 2 月 3 日 コメントはありません

以前に,衛星画像に平滑化フィルタ(平均値)をかけるためのプログラムを作ったのだが,どえらい時間がかかる。全ての画素に総当りって基本的に時間がかかる。

で,OpenCVにフィルタ処理の関数が実装されていないものかと探してみたら,やっぱりあった。このフィルタ処理は離散フーリエ変換を経由することで,計算量が劇的に減っているようだ

とりあえず手持ちの画像で比較してみた。下記はtimeで計測した実時間。

以前Ver. OpenCVの関数
1m19.410s 0m5.836s
1m18.861s 0m7.015s
1m17.823s 0m5.427s

結果は一目瞭然。10倍以上も速くなった!!

OpenCVでエッジ検出するときの注意

2009 年 1 月 21 日 コメントはありません

OpenCVに実装されているCannyエッジ検出で衛星画像を処理しているとエラーが出ることがある。いろいろと検討した結果、画像サイズの素因数分解に大きな素数を持つとき、エラーになる傾向があるようだ。なお、CannyのアルゴリズムにはSobelフィルタが使われているようなので、Sobelでのエラーにも適用できると思う。

エラーが出る画像サイズ

画像1: x : 4986: 2 3 3 277; y : 4776: 2 2 2 3 199;
画像2: x: 5034: 2 3 839; y : 4836: 2 2 3 13 31;

エラーが出ない画像サイズ

画像1: x : 4968: 2 2 2 3 3 3 23; y : 4752: 2 2 2 2 3 3 3 11;
画像2: x : 5016: 2 2 2 3 11 19; y : 4794: 2 3 17 47;
画像3: x : 5052: 2 2 3 421; y: 4806: 2 3 3 3 89;
画像4: x : 5064: 2 2 2 3 211; y : 4764: 2 2 3 397;
画像5: x : 5040: 2 2 2 2 3 3 5 7; y : 4824: 2 2 2 3 3 67;
画像6: x : 5388: 2 2 3 449; y : 5112: 2 2 2 3 3 71;
画像7: x : 5064: 2 2 2 3 211; y : 4866: 2 3 811;

上記を見てみると、エラーが出ない画像サイズにも大きな素数が含まれる場合があって、正直のところ線引きがよくわからん。とりあえず僕の場合、結果が出てくれりゃそれでいいので、あまり深く考えない。

エラーが出た場合、元の画像をほんの少しサブセットしてあげればうまくいく。このとき、画像サイズが奇数よりも偶数のほうがうまくいきやすいようなので、縦横2ピクセルずつ切り詰めればOK。gdal_translateのsrcwinオプションを活用すると楽。

ALOS AVNIR2にも縦縞

2008 年 3 月 13 日 コメントはありません

久しぶりに衛星画像処理。

ALOSのAVNIR2を眺めていたところ、カラムごとにピクセルがずれている
ことに気づいた。説明書によれば、

CCD はスタガ配置になっており、奇数画素と偶数画素とでは地表上で約5 ライン離れた場所を撮像することになる。奇数画素が相対的に衛星進行方向前方を撮像し、偶数画素が後方を撮像する。

確かに5ピクセルずれている。それじゃ、5ピクセルずらすプログラムを自分で書くか、と思って、久しぶりにCで書いた。5ピクセルずらした結果がこちら。ぴったり!

しかし、ピクセルをずらしたあとにもうっすら縦縞が残っているような気がする。多分、PRISMと同様の現象なんだろうが、上記プログラムで処理するためにフォーマットを変換しているので、これで試したノイズ除去を試行できない。

PRISMで試したノイズ除去を試行するには、CEOSフォーマットのままで読み書きしなきゃならんのか。あー、めんどくさ。

カテゴリー: GIS/RS タグ: , ,