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


機械学習以前のレガシーな超解像変換のひとつ ICBI を試すのに参照コードが MATLAB で、それを Octave で動かすだけのメモ書きです。

なお、以前、iNEDI で似た事をしたのですが、それより少し手順を改善してます。

準備

Octave インストール

  • Ubuntu だと snap install octave
  • macOS は brew install octave で良いでしょう。

octave forge

image パッケージを入れます。

$ octave
GNU Octave, version 4.2.2
(略)
octave:1> pkg install -forge image
For information about changes from previous versions of the image package, run 'news image'.
octave:2> pkg list
Package Name  | Version | Installation directory
--------------+---------+-----------------------
       image  |  2.12.0 | /home/yoya/octave/image-2.12.0

環境設定 (.octave)

octave コマンドを引数なしで実行して対話モードに入り、毎度 pkg load image しても良いですが、.octave に一行入れるとサボれます。

  • .octave
pkg("load", "image");

また、ICBI は div zero の警告が大量に出て、メッセージが埋もれるので以下の設定も入れると良いでしょう。

warning("off","Octave:divide-by-zero");

警告が減って、大事なメッセージを見落としにくくなります。ICBI を試した後はコメントアウトしとくと良いでしょう。

変換

なお自分は imshow をコメントアウトして、imwrite をコメントから戻して実行してます。

% octave icbiexample.m
ICBI function example.
This is an example script that shows you how to use the icbi.m function.
Please check the documentation inside this file for further information.

[   0.000 sec] LAYER: 01
[   0.000 sec]    ZF: 01
[   0.012 sec]        PHASE: 00
warning: division by zero
warning: called from
    icbi at line 375 column 34
    icbiexample at line 55 column 10
(略)
[4615.394 sec]        PHASE: 01
warning: division by zero
warning: called from
    icbi at line 375 column 34
    icbiexample at line 55 column 10
(略)
[5796.262 sec] END
testimage.png testimage_icbi.png

128x128 を 255x255 にするのに 1時間36分!!! なかなか重たいアルゴリズムのようです。

追記

MATLAB (2020年版)で試したところ、約2秒でした。 3000倍近く速い。。
恐らくは、div zero 警告の出力に足を引っ張られているのでしょう。