Мя убил себе мозг, но всё-таки написал этот макрос для ImageJ, чтобы считать динамику роста флуоресценции на конфокальных изображениях по отношению к объёму или площади, занимаемомой объектом в каждый момент времени... Макрос поддерживает обработку выбранных пар стэков, а также пакетную обработку всех открытых пар стэков, позволяет выбирать каналы и пороговое значение для маски... На выходе формирует готовую таблицу для экспорта в Origin с заголовками, взятыми из названий изображений...
На создание такого графика вручную из серий картинок с микроскопа мог уйти весь рабочий день и не одна чашка кофе, а теперь это занимает 5-10 минут... Тем не менее, мозг устал во время выискивания багов...
var n, nn, t, z, mask, data, lbound, wndname, tabstring,datstring;
var shead,sunits,scomment;
//Do not show intermediate images
setBatchMode(true);
//Inspect opened images
n=0;
for (i=0; i0)&&(max<255)) {
setMinAndMax(min, max);
run("Apply LUT", "stack");
}
//Make mask binary
setThreshold(lbound, 255);
run("Convert to Mask", " black");
imageCalculator("AND create stack", mask, data);
setThreshold(1, 255);
run("Set Scale...", "distance=0 known=0 pixel=1 unit=pixel");
run("Plot Z-axis Profile");
for (i=0; ii*slices+j) {
iArea=getResult("Area", i*slices+j);
iMean=getResult("Mean", i*slices+j);
}
else {
iArea=0;
iMean=0;
}
if (isNaN(iArea)) {iArea=0;}
if (isNaN(iMean)) {iMean=0;}
isum=isum+iArea*iMean;
ivol=ivol+iArea;
}
if (ivol==0) {ivol=1;}
//Filling the list
List.set("Stack"+n+"t"+i,(isum/ivol));
}
}
//Processing the list
t=0;
do {
n=0;
ipass=false;
datstring=""+(t+1)+"";
for (n=0; n