1

私は最近、顕微鏡写真を分析するために ImageJ を使い始めました (したがって、マクロ プログラミングの経験はあまりありません)。スペクトル ブリードを補正した FRET ピクセル単位の画像を生成するために、プラグインpixFRETを使用しています。このプラグインが機能するには、FRET、Donor、Acceptor の 3 つのイメージのスタックが必要です。これまでのところ、すべての画像を自分で開かなければならず、これは大量のタイム スタック (> 1000 画像) にとっては非常に不便です。プラグインをループする方法、またはこれを行うための何らかのマクロを作成する方法を探しています。

私のデータ構造の簡単な説明: workfolder\filename_t001c1 (チャンネル 1 画像 - 時点 001 のドナー)、filename_t001c2 (チャンネル 2 画像 - 時点 001 の FRET)、...t001c3 (無視できます) ...t001c4 (チャネル 4 画像 - 時点 001 でのアクセプター)。

各時点で C2/C1/C4 のスタックを作成し、pixFRET (パラメーターを設定して) によって自動的に分析し、結果を出力フォルダーに保存する必要があります。

私の最大の問題は、この全体のスタック生成/pixFRET 分析のループであるため、すべての提案に感謝しています (現在、このマニュアルしか実行できません)。

ありがとうデビッド

4

2 に答える 2

1

pixFRET PlugIn からパラメータとコマンドを直接インクルードする方法が見つかりませんでした。ただし、ここでは、IJ_Robot と連携してこれらのコマンドを追加する回避策を示します。さらに、時系列の最初の画像に基づいてカメラ チャネルの位置合わせを実行するためのいくつかの要素を含めました。

   // Macro for creating time resolved pixFRET images with a alignment of both cameras used
// a separate setting file is required for pixFRET -> put this into the same folder as the pixFRET plugin
// the background region has to be set manually in this macro
// IJ_robot uses cursor movements - DO NOT move the cursor while excuting the macro + adjust IJ_robot coordinates when changing the resolution/system.




dir = getDirectory("Select Directory");
list = getFileList(dir);

//single alignment
 run("Image Sequence...", "open=[dir] number=2 starting=1 increment=1 scale=100 file=[] or=[] sort");
rename(File.getName(dir));
WindowTitle=getTitle()
rename(WindowTitle+toString(" Main"))
MainWindow=getTitle()
NSlices=getSliceNumber()
xValue=getWidth()/2
yValue=getHeight()/2

//setTool("rectangle");
makeRectangle(0, 0, xValue, yValue);
run("Align slices in stack...", "method=5 windowsizex="+toString(xValue*2-20)+" windowsizey="+toString(yValue*2-20)+" x0=10 y0=10 swindow=0 ref.slice=1 show=true");
selectWindow("Results");

XShift=getResult("dX", 0);
YShift=getResult("dY", 0);


File.makeDirectory(toString(File.getParent(dir))+toString("\\")+"test"+" FRET");

for(i=0;i<list.length;i+=4){
open(dir+list[i+1]);
run("Translate...", "x=XShift y=YShift interpolation=None stack");

open(dir+list[i]);


open(dir+list[i+3]);
run("Translate...", "x=XShift y=YShift interpolation=None stack");

wait(1000);
run("Images to Stack", "name=Stack title=[] use");
selectWindow("Stack");
makeRectangle(15, 147, 82, 75); //background region
run("PixFRET...");
run("IJ Robot", "order=Left_Click x_point=886 y_point=321 delay=500 keypress=[]");
run("IJ Robot", "order=Left_Click x_point=874 y_point=557 delay=500 keypress=[]");
selectWindow("NFRET (x100) of Stack");

save(toString(File.getParent(dir))+toString("\\")+"test"+" FRET"+toString(i) +".tif");

selectWindow("Stack");
close();
selectWindow("FRET of Stack");
close();

selectWindow("NFRET (x100) of Stack");
close();
run("IJ Robot", "order=Left_Click x_point=941 y_point=57 delay=300 keypress=[]");
}

Jan さん、ご協力ありがとうございます。Ij_robot を使用せずに、これらの pixFRET コマンドを直接呼び出す方法を考えられる場合は、お知らせください。

于 2013-06-07T19:20:35.043 に答える
0

フィジーのこのチュートリアル(ImageJ のみ)を出発点として、マクロ レコーダー (プラグイン > マクロ > 記録... ) を使用して、必要なコマンドを取得します。

マクロ コードは次のようになります。

function pixfret(path, commonfilename) {
    open(path + commonfilename + "c2");
    open(path + commonfilename + "c1");
    open(path + commonfilename + "c4");
    run("Images to Stack", "name=Stack title=[] use");
    run("PixFRET"); // please adjust this to your needs
}

setBatchMode(true); 
n_timepoints = 999;
dir = "/path/to/your/images/";
for (i = 0; i < n_timepoints; i++)
    pixfret(dir, "filename_t" + IJ.pad(i, 4));
setBatchMode(false);

それが役立つことを願っています。

于 2013-05-27T21:00:18.953 に答える