Bio Technical フォーラム

  • バイオ関連の実験をする上での、試薬、機器、プロトコールなどの情報交換の場です。
  • 新しいテーマで話を始める場合、質問をする場合は「新しいトピックを作る」から書き込みをしてください。
  • 質問に対して解答できる方は是非、書き込んで下さい。
  • このフォーラムにふさわしくないと管理人が判断した投稿は予告なく削除します。

新しいトピックを作る | トピック一覧 | 研究留学ネットに戻る

ひとつ前のフォーラム(readのみ)

このスレッドをはてなブックマークに追加このスレッドをはてなブックマークに追加

ImageJの操作法について(スタック画像の二値化) トピック削除
No.697-TOPIC - 2012/07/03 (火) 12:33:08 - toyo
ImageJに詳しい方にお伺いします。
16bitグレースケールのスタック画像について、Image->Adjust->Thresholdから、MaxEntoropy法などを用いて閾値を設定し、二値化してその後の処理を行うことを考えています。
Thresholdを設定するwindowのApplyボタンを押すと、設定した閾値に従ってスタック画像を二値化することができるのですが、この際画像ごとに閾値を設定しようとして"Calculate threshold for each image"にチェックを入れると、なぜか
Default(IJ_IsoData)法で閾値が計算されてしまうようで困っています。

スタック画像を一度バラせばなんとかなりそうな気はしますが、スタックのままで、こちらの指定した任意のthreshold法に従って、スタックの各画像毎に閾値を計算し二値化する方法は、ImageJに用意されているのでしょうか?

よろしくお願いいたします。
 
- このトピックにメッセージを投稿する -



3件 ( 1 〜 3 )  前 | 次  1/ 1. /1


(無題) 解決済み 削除/引用
No.697-3 - 2012/07/04 (水) 19:19:18 - toyo
toto様

お返事いただきありがとうございます。
また、マクロを作成していただき、大変ありがたく思います。
大いに参考にさせていただきます。

その後pluginなどもいろいろ調べてみましたところ、FijiのAutoThresholdというpluginを使うことで所望の動作ができることがわかりました。
わざわざそのようなpluginが作成されたということは、imagej本体ではスタックをバラさないと困難ということかと理解しております。

また、AutoThresholdは私の環境では16bit画像に対する動作が大変遅いため、toto様のマクロなどと比較しつつ、最適なやり方を見出したいと思います。

どうもありがとうございました。

(無題) 削除/引用
No.697-2 - 2012/07/04 (水) 07:53:46 - toto
適当に”一度バラせば”という方法のマクロを書いてみました。
下記の//////以下の部分をコピーペーストしてテキストファイルとして保存してください。その後、目的のスタック画像をクリックした後、ImageJのPluginsからMacrosの中のRun...を選択、保存したテキストファイルを選択してください。
そうすると、多分変換してくれると思います。ImageJのバージョンによっては動かない可能性があるので、なるべく最新版を使ってください。あまり詳しく検証していませんので、文句があればお教えいただければ改善いたします。


//////////////////////////////////////////////////////
macro StackAutoThreshold {
setBatchMode(true);
myTargetID = getImageID();
myTitle1 = "BinaryImage_";
myThresholdMehods = getList("threshold.methods");
myBackgrounds = newArray(2);
myBackgrounds[0] = "black";
myBackgrounds[1] = "white";
Dialog.create("Please select auto-threshold method...");
Dialog.addChoice("auto-threshold method: ", myThresholdMehods);
Dialog.addChoice("auto-threshold method: ", myBackgrounds);
Dialog.show();
myThresholdM = Dialog.getChoice();
myBackgroundColor = Dialog.getChoice();
if (myBackgroundColor == myBackgrounds[0]) {
myThresholdM = myThresholdM + " dark";
}
showStatus("Binarizing...");
for (i = 0; i < nSlices; i++) {
print(i);
showProgress(i / nSlices);
setSlice(i+1);
myTitle = "title=" + myThresholdM + "_" + myTitle1 + toString(i+1);
run("Duplicate...", myTitle);
setAutoThreshold(myThresholdM);
run("Convert to Mask");
selectImage(myTargetID);
}
run("Images to Stack", "name=BinaryImage title=[] use");
setBatchMode(false);
showMessage("DONE");
}

ImageJの操作法について(スタック画像の二値化) 削除/引用
No.697-1 - 2012/07/03 (火) 12:33:08 - toyo
ImageJに詳しい方にお伺いします。
16bitグレースケールのスタック画像について、Image->Adjust->Thresholdから、MaxEntoropy法などを用いて閾値を設定し、二値化してその後の処理を行うことを考えています。
Thresholdを設定するwindowのApplyボタンを押すと、設定した閾値に従ってスタック画像を二値化することができるのですが、この際画像ごとに閾値を設定しようとして"Calculate threshold for each image"にチェックを入れると、なぜか
Default(IJ_IsoData)法で閾値が計算されてしまうようで困っています。

スタック画像を一度バラせばなんとかなりそうな気はしますが、スタックのままで、こちらの指定した任意のthreshold法に従って、スタックの各画像毎に閾値を計算し二値化する方法は、ImageJに用意されているのでしょうか?

よろしくお願いいたします。

3件 ( 1 〜 3 )  前 | 次  1/ 1. /1


パスワードを入力してチェックした記事を チェックした記事を

このトピックにメッセージを投稿する
名前 
メール   アドレス非公開
   タイトル 
本文      
設定  クッキーを保存(次回の入力の手間を省けます)
上に上げない(トピックの一覧で一番上に移動させません)
解決(問題が解決した際にチェックしてください)
暗証  半角英数字8-12文字の暗証番号を入れると、あとで削除、修正ができます。
送信 

〔使い方〕
  • 「アドレス非公開」をチェックすれば、自分のメールアドレスを公開しないで他の方からメールを受け取れます。
  • 問題が解決した際には、解決ボタンをチェックして解決した旨のコメントをつけてください。これは、初めにトピックを作った人と管理人のみが可能です。
  • 半角カタカナ、機種依存文字(全角ローマ数字、○の中の数字等)は文字化けの原因となりますので使わないでください。