kuroの覚え書き

96の個人的覚え書き

ImageJのマクロをpythonで動かす

1000枚以上あるようなTIFF画像にImageJで一律の処理を行いたい。
とてもじゃないが手ではやってられないのでマクロを使って自動運転する。

f:id:k-kuro:20200827194949p:plain
File>New>Text Window
を開き、次のようなスクリプトを作成して、Runする。

from ij import IJ
from ij.io import DirectoryChooser
import os


def Analysis(imagepath):
    imp = IJ.openImage(imagepath)
    savefilepath = os.path.join(os.path.dirname(imagepath), "../bc/")
    filename = os.path.basename(imagepath)

    IJ.run(imp, "Median 3D...", "x=3 y=3 z=3") #ノイズを和らげる
    IJ.run(imp, "Enhance Contrast...", "saturated=0.1 normalize") #コントラストをつける
    IJ.saveAs(imp, "Tiff", savefilepath + filename) #出来上がったファイルを保存する
    imp.close()

srcDir = DirectoryChooser("Choose Folder").getDirectory()
IJ.log("directory: " + srcDir)

for root, directories, filenames in os.walk(srcDir):
    for filename in filenames:
        if filename.endswith(".tif"):
            path = os.path.join(root, filename)
            IJ.log(path)
            Analysis(path)

IJ.log("Finish")

ファイルの在処を聞いてくるので指定してやる
それだけ。