省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

ImageJのコマンドをPythonのコードに落とす (1)

 とりあえず自分にとってよく使いそうなコードに関するメモです。

ImageCalculator (画像計算機)

Process > ImageCalculator

Image Calculator

コード

 操作対象はImagePlusです。

from ij import ImagePlus, plugin

ic = plugin.ImageCalculator()
imp2 = ic.run("Subtract create", Imp0, imp1)

命令部分は、Operation の選択肢にある通りです。そして新たな画像(ImagePlus)を作る場合は、Operation名の後に、空白を挟んで create を追加します。

 

Math (画像計算)

Process > Math

Process > Math

Add...

コード

マクロを動かす形式 

from ij import IJ, ImagePlus

IJ.run(imp, "Add...","value= 20")

 操作を行う対象は、ImagePlusになります。引数は、最初に対象となるImagePlus、次にMathコマンドのうちの使いたいコマンド名を表示通りに文字列として与え、次にパラメータを与えます。パラメータに関してもすべて文字列として与える必要があります。

APIを使う形式

 基本的に画像のピクセルを書き換える操作はImagePlusではなく、 ImageProcessor に対して行う必要があります。アクティブなImageProcessorであれば、ImagePlus から imp.gerProcessor() で取得することができますが、そうでなければImagePlusからStackを取得し、そこからImageProcessor を取得しなければなりません。なお、Mathの各コマンドに直接対応するメソッドがない場合もあります。

 

from ij.process import ImageProcessor 
ip.add(20.0)

使えるメソッド ※( )内はパラメータとして与えるデータ形式

add​(double or int value)
subtract​(double value)
multiply​(double value)
and​(int value)
or​(int value)
min​(double value)
max​(double value)
gamma​(double value)
set​(double value)
log()
exp()
sqr()   < square
sqrt()  < square root
abs()

 これを見ると、マクロで簡単に指定できる割り算のメソッドがありません。もっともこれは逆数を掛ければよい、ということかと。それ以外にもメソッドとして指定できないものがありますので、IJ.run を使うメリットはあると思います。

 なお、上の、gamma メソッドを使う場合の注意点があります。通常ガンマ値というと、例えば「ガンマ2.2 を掛けて明るくする」という場合、実際には乗数として 1/2.2 を掛けていますが、その乗数の分母をガンマ値と称しています。しかし gamma メソッドでは、乗数自体を入力する必要があります。つまり、ガンマ2.2 で明るくしたい場合、

imp.getProcessor().gamma(1 / 2.2)

と指定する必要があります。

 

Invert (反転)

Edit > Invert

Invert

コード

マクロを動かす形式

from ij import IJ, ImagePlus
IJ.run(imp, "Invert...","")

 

APIを使う形式

from ij import IJ, ImagePlus
imp.getProcessor().invert()

 

from ij import ImagePlus, ImageProcessor
ip = imp.getProcessor()
ip.invert()