0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ImageJでコマンドラインから画像を開く

Last updated at Posted at 2024-12-01

概要

  • ターミナル上で処理した画像(一枚絵やスタック)をImageJで開いて確認することがよくある.流れ作業でやっていると,キーボードからマウスにいちいち持ち替えてD&Dで入力するのが面倒になってきた.
  • そこで,ターミナルでコマンドを打って画像を開く仕組みを作った.
  • これがあると,他の画像処理スクリプトに自動でImageJで開く処理を組み込まることもできるので,使い道が広そう.

作ったもの:コマンド化するためのバッチファイルとImageJマクロ

  • こちら:https://github.com/xrm-bl/imagej-tools/tree/main/cui-open
  • バッチファイルにPATHを通すことでコマンドijで入力できるようになる.
  • ij [file_path] 画像一枚を開く
  • ij [dir_path] 画像スタックを開く
  • ij [dir_path] v 画像をvirtual stackで開く
  • ij [dir_path] [i] [j] 指定フォルダ内のi番目からj番目までの画像をスタックで開く
  • ij [dir_path] [i] [j] v 指定フォルダ内のi番目からj番目までの画像をvirtual stackで開く
  • 画像の入力パスは絶対/相対両方OK(のはず)

解説

基本的な仕組み

  • 画像一枚だけ開くのであれば,以下でOK
ImageJ.exe C:\hogehoge\hogehoge\image.tif
  • スタック(ディレクトリ)を指定するには,ImageJマクロを作る.
open-macro.ijm
run("Image Sequence...", "open=[C:\\hogehoge\\image-dir-path] sort");
// sortはsort names numericallyオプションをオンにするという意味
  • ImageJをマクロ付きで実行する.
ImageJ.exe -macro open-macro.ijm
  • これで画像がスタック(Image sequence)で開かれる.

改良:virtual stackや画像番号の指定

  • virtual stackで読み込むときはuseをつける."use (virtual stack)"
run("Image Sequence...", "open=[C:\\hogehoge\\image-dir-path] sort use");
  • 画像番号はnumber=, starting=, increment=,で指定できる
run("Image Sequence...", "open=[C:\\hogehoge\\image-dir-path] number=4 starting=2 increment=1 sort");

改良:画像のパスを引数にする

  • シンプルに入力パスのみを引数にする場合は,以下.
open-macro2.ijm
input = getArgument();
input = File.getAbsolutePath(input);

run("Image Sequence...", "open=[" + input + "] sort");
  • パスを引数にして実行すればOK
ImageJ.exe -macro open-macro2.ijm C:\hogehoge\image-dir-path

改良:各種オプションを引数にする

  • virtual stackにするかどうか,とか,いろいろオプションをつける(引数を増やす)場合は,工夫が必要.
  • 理由① ImageJ macroは1個しか引数を受け付けてくれない.
  • 理由② ImageJ macroの引数で半角スペースで空いた文字列以降は,別の引数として無視される.
  • 理由③ コンマ記号は引数の区切り文字として認識される.(アットマークは区切り文字としては認識されない.)
  • 今回は,以下の仕組みとした.
  • ij [dir_path] [i] [j] vと入力されたら,バッチファイル内で[dir_path]@[i]@[j]@vという文字列を作り,ImageJマクロに1個の引数として読み込ませる.
  • ImageJマクロ内で引数をアットマークで分割する(argsArray = split(args, "@");).
  • 分割した変数をオプションとして使う.
  • これに加えて,作ったバッチファイルでは,引数の数に応じて場合分けや入力内容のエラー判定,相対パス→絶対パスへの変換,を行っている.
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?