ホーム > linux > Octaveで画像処理:画像ファイルの入出力モジュールのインストール覚書

Octaveで画像処理:画像ファイルの入出力モジュールのインストール覚書

諸々の事情でMatlabのコードをOctaveで動かすことになった。imreadとimwriteで画像の入出力が出来るようにするための手順の覚書。

実はdebianならばapt-get install octave-image で一発インストールなのだが、これもまた諸々の事情で自分でビルドする必要があった。以下。

Octaveと拡張パッケージimageのバージョン

2009/11/27現在、Octaveの最新版は3.2.3であるが、imreadで呼び出される__magick_read__.octとやらが”error: imread: invalid image file: __magick_read__: not available in this version of Octave”というエラーを出して使えない。使えないなら始めから入れるな、と。

Debianのパッケージの構成を参考にして、Octave3.0.*、image-1.0.6をインストールすることにする。

Octaveのインストール

3.0.*系のソースコードをここからダウンロードして展開して”./configure ; make; make install”でOK。画像の読書きにlibpng、libjpegが必要なので場合によってはコンパイルオプションの設定が必要かもしれない。しかし、大抵の環境ではlibpng、libjpegとも標準的なパスにおいてあるっしょ。

imageパッケージのインストール

Octaveをインストールしたら、ここからimage-1.0.6を見つけて(R2008-04-29の中にある)アーカイブファイルをダウンロードする。ここでは展開しないでOctaveを起動し、パッケージインストールのコマンドを打ち込む。

cd [image-1.0.6.tar.gzを保存するディレクトリ]
octave
#スタートアップのメッセージ
octave:1> pkg install image-1.0.6.tar.gz #エラーなしで完了したらOK。警告メッセージが大量に出る場合がある。
# 試しに画像の読書き
octave:2> img=imread('hoge.png');
octave:3> imwrite('fuga.png',img(:,:,1));

最新版では__magick_read__.octの機能で様々なフォーマットを読書きできるのだろうが、前述の事情で使うことが出来ない。したがって、画像の読書きはjpegとpngに限られるが、octaveに放り込む前にImageMagickのconvertでフォーマットを変換すれば問題ない。

余談

その1:Matlabでは減色してカラーマップをつくるrgb2indという関数があるが、同じ名前の関数で挙動がかなり違う関数がOctaveにもある。Octaveでは原色しない上に、単に画素値をカラーマップ風に並べるだけで集約されてもいない。rgb2indに近い機能を期待すると泥沼にはまる。同様の処理を行うならばImageMagickのconvertの-colorsオプションで減色してからidentify -verboseでカラーマップを出力し、画像ファイルからカラーマップを取り除いて、Octaveに放り込めばMatlabと同様のデータ構造で読み込むことが出来る。面倒くさい。

その2:衛星データなどサイズが大きい画像を扱う場合には、デフォルトのコンパイルオプションでは”error: memory exhausted or requested size too large for range of Octave’s index type — trying to return to prompt”といわれて対応できない場合がある。./configure –enable-64としてビルドしてあげれば対応できるみたい。ただし、under experimental。

カテゴリー: linux タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。