以前、コントラスト・濃度を調整するためのMacro (Contrast_Adjust.txt)を紹介しました。
その記事では、調整に必要なMax値とMin値を目視で調べる方法を用いました。
この作業も自動化できれば、仕上がりが安定するし、何よりラクチン!ということで、
今回は、調整に必要なMax値とMin値を、「自動」で求めるMacroです。
マクロコード
2020.05.14.修正 処理中の画像を非表示にして、高速化を図りました。
//Optimize_MaxAndMin.txt
print("");
print("OptimizeMinAndMax");
if(nImages == 0) waitForUser("Open an image, then click [OK]");
//Enter parameter
Dialog.create("Processing Setting");
Dialog.addNumber("targetMeanWhite",254.97);
Dialog.addNumber("targetMeanBlack",18);
Dialog.show;
targetMeanWhite = Dialog.getNumber();
targetMeanBlack = Dialog.getNumber();
name = getTitle();
saveDir = "/Users/Yu3xx/Desktop/";
saveAs("Jpeg", saveDir+"CheckMaxAndMin.jpg");
//optimize Max
setTool("rectangle");
run("Specify...", "width=100 height=100 x=10 y=10");
waitForUser("ROI selection","Set ROI on the \"WHITE BACK GROUND\", then click [OK].");
getStatistics(area,mean);
setBatchMode(true);
if(mean < 200){
exit("Error!! This area is not WHITE BACK GROUND.");
}
run("Crop");
saveAs("Jpeg", saveDir+"CheckMax.jpg");
close();
Max = 254;
min = 0;
print("optimized Max Macro, TargetMean =",targetMeanWhite);
for (i=0; i<254; i++){
open(saveDir+"CheckMax.jpg");
setMinAndMax(min, Max);
run("Apply LUT");
getStatistics(area,mean);
print("Max=",Max," mean=",mean);
if(mean >= targetMeanWhite){
optimizedMax = Max;
i = 255; //break
}
Max = Max-1;
close();
}
print("OptimizedMax =",optimizedMax);
setBatchMode(false);
//optimize min
open(saveDir+"CheckMaxAndMin.jpg");
setTool("rectangle");
run("Specify...", "width=100 height=100 x=10 y=10");
waitForUser("ROI selection","Set ROI on the \"BLACK ZONE\", then click [OK].");
getStatistics(area,mean);
setBatchMode(true);
if(mean > 100){
exit("Error!! This area is not BLACK ZONE.");
}
run("Crop");
saveAs("Jpeg", saveDir+"CheckMin.jpg");
close();
max = optimizedMax;
min = 1;
print("");
print("OptimizedMin Macro, TargetMean=",targetMeanBlack);
for (i=0; i<254; i++){
open(saveDir+"CheckMin.jpg");
setMinAndMax(min, max);
run("Apply LUT");
getStatistics(area,mean);
print("min=",min," mean=",mean);
if(mean <= targetMeanBlack){
optimizedMin = min;
i=255; //break
}
min = min+1;
close();
}
print("");
print("Title =",name);
print("OptimizedMin =",optimizedMin);
print("OptimizedMax =",max);
print("oshimai");
beep();
※保存先ディレクトリ (saveDir) をデスクトップに設定しているので、上記の該当部位をお使いのPCに合わせて書き換えてください。
Windowsの場合は スラッシュ(/) がバックスラッシュに変わるので、 ¥¥ (2つ!)になると思います。
もしわからなければ、
saveDir = getDirectory("Choose a Directory");
で毎回指定してもOKだと思います。
使い方
「白い背景部分」と「黒ベタの部分」を持つ画像を1枚ImageJで開いてから、マクロを起動します。
マクロ起動後、指示に従って「背景部分」と「黒ベタ部分」にそれぞれROIを設定してください。
(ヤケを白く飛ばしたい場合は、背景部分にROIを設置する時に、ヤケを含めるように置きます)
画像引用:池上遼一, 傷追い人, 文庫版第6巻, 10ページ, スタジオ・シップ, 1995
画像引用:池上遼一, 傷追い人, 文庫版第6巻, 10ページ, スタジオ・シップ, 1995
ROIはデフォルトで100×100のものが生成されますが、自分でサイズを変えてOKです。長方形でもOKです。
ここでデスクトップに保存される画像は解析の過程で使うだけのデータなので、終わったら消してOKです!
おまけのTool(2020.05.14追記)
ROIが一度消えてしまった時に、100×100のROIをカンタンに設定するためのToolです。
ちょっとだけややこしいですが、一度設定してしまえば常に有効になります。説明は以下から!
① ImageJ上部タブから[Plugins]→[Macros]→[Startup Macros]
② 起動されたStartup Macros.txtのエディタ(コードが色々書かれてるやつ)の一番下に、下記コードをコピペして、上書き保存。
(「まるっと書き換え」ではなく、「一番下に追加」です!)
③ 一度ImageJを閉じて、また起動する。
ここまでが準備の設定です!この作業は一度だけでOKです!
(Startup Macrosをいじることで、ImageJ起動時に自動インストールされるマクロの設定をしました)
Toolを使う際には、ImageJツールバーのアイコンに追加された「真顔」アイコンをクリックしてから、画像上のROIを設置したい部分をクリックしてください。
このアイコン
//create 100*100 ROI
macro "Specify Tool [Create 100*100 ROI]- C222o0244ob244L2ccc"{
getCursorLoc(x,y,z,flags);
run("Specify...", "width=100 height=100 x=x y=y centered")
setTool("rectangle");
}
マクロの起動方法
①ImageJ上部タブの[Plugins]→[New]→[Macro]で起動したエディタに、上のコードをコピペしてtxtファイル(Optimize_MaxAndMin.txt)を作成・保存する。
②保存したファイルをImageJフォルダ内の[plugins]フォルダにしまう。
このとき、[plugins]フォルダの中に新たに適当な名前のフォルダを作って、その中にしまってもOKです。ここでは仮に「自炊」というフォルダにtxtファイルを突っ込んだとします。
③一度ImageJを再起動すると、マクロがインストールされ、起動準備OK。
④上部タブ[Plugins]→[自炊]→[Optimize_MaxAndMin]でマクロが実行されます。
注意
ImageJはPDFファイルをサポートしていないので、PDFで自炊している方はあらかじめ全てのファイルをJPGに直しておいて下さい!
Macの方はデフォルトでインストールされている「Automator」を使用するとJPGに直すことが出来ます。
ライセンスなんかは一切無いので、ぜひぜひ自由に使ってみてください!