アーカイブ

‘c言語’ タグのついている投稿

OpenCVによるフィルタ処理

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

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

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

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

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

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

mallocとcallocの違い

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

プログラムの高速化を試みている間に,callocとmallocの違いを知らないことに気づいた。いつも初めてC言語を習ったときに使ったmallocを使っていたが,実際のところどうなのだろう。

この疑問に答えてくれたのがこのページ↓

BohYoh.com-C/C++ FAQ mallocに対するcallocのメリットは何ですか。

結論はcallocを使ったほうが安全で速くなりそうだということ。確かに”malloc(メモリ確保のサイズ)”よりも”calloc(メモリ確保の個数, メモリ確保の1単位サイズ)”のほうがいい加減さが少ない印象がある。

カテゴリー: プログラミング タグ: , ,

GDALとBLASで激速画像間演算

2008 年 8 月 29 日 コメントはありません

きまぐれにGDALを使ったCプログラミングをやってみた.久々のCプログラミングだったが,意外とすんなりとモノを作ることができた.

作っていたのは,画像間演算をするためのプログラムで,NDVIなどを計算するもの.GDAL経由で読み込んだ画像データに対して,for( i = 0; i < XSize * YSize; i++)といった繰り返しで,ピクセルごとに計算させていたわけだが...

この手の行列計算は,RやMatlabにもあるように,forで計算させるよりも速くする手順があるはず,と思って,BLAS (Basic Linear Algebra Subprograms)という線形代数計算ライブラリがあることを思い出した.これなら僕の要求に答えてくれるはずだ!と思って試してみた.

試行計算は,2つの5076*4770の8bit画像を足し合わせて,16bitで出力するというもの.3回の時間計測の結果,以下のようになった.

(BLASなし,BLASありの順,単位は秒)
1回目:25.873,6.545
2回目:21.293,5.297
3回目:25.030,5.425

BLASの導入で確実に速くなっている!さらに,シンプルな関数でコードもすっきりして一石二鳥.

なお,関数のレファレンスはここここがよさげ.

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