iNEDI の MATLAB コードを GNU Octave で動かす


機械学習以前のレガシーな超解像変換のひとつ iNEDI を試すのに参照コードが MATLAB で、それを Octave で動かすのに image パッケージのインストールとロード設定が必要でした。というだけのメモ書きです。

この後、ICBI でも同様の事をしてるのと、ちょっぴり手順を改善したので参考までに。

準備

octave インストール

  • Ubuntu だと apt-get install octave liboctave-dev
  • macOS は brew install octave で良いでしょう。

octave forge

image パッケージを入れます。
bwselect 関数を使う為です。

% octave
GNU Octave, version 4.2.2
(略)
octave:1> ls
LICENSE  README.md  image-2.12.0.tar.gz  inedi.m  inediexample.m  testimage.png
octave:2> pkg install image-2.12.0.tar.gz
octave:3> pkg list
Package Name  | Version | Installation directory
--------------+---------+-----------------------
       image  |  2.12.0 | /home/yoya/octave/image-2.12.0

追記

tarball を持ってこなくても、以下の命令で良いみたいです。(未確認

pkg install -forge image

変換

pkg load image する事で bwselect 関数が使えるようになります。
なお自分は imshow をコメントアウトして、imwrite をコメントから戻して実行してます。

% octave
GNU Octave, version 4.2.2
(略)
octave:1> pkg load image
octave:2> run inediexample.m
iNEDI function by Nicola Asuni.
This is an example script that shows you how to use the inedi.m function.
Please check the documentation inside this file for further information.

[   0.014 sec] LAYER: 01
[   0.015 sec]    ZF: 01
[   0.015 sec]        PHASE: 00
[ 201.778 sec]        PHASE: 01
[ 566.965 sec] END
testimage.png testimage_inedi.png

150x150 を 299x299 にするのに 9分半!!! なかなか重たいアルゴリズムのようです。

おまけ

image パッケージなしで実行すると、以下のようなエラーが出ます。

'bwselect' undefined near line 366 column 44
error: called from
    inedi at line 366 column 42
    inediexample at line 83 column 9
    run at line 86 column 5

追記

MATLAB (2020年版)で試したところ、76秒でした。7倍以上速い。
思ってた以上に性能違いますね。