Как экспортировать профиль калиброванного изображения с макросом imagej - PullRequest
0 голосов
/ 30 ноября 2018

Я написал небольшой макрос, который находит сферы на пространственно откалиброванном (Dicom-) изображении.Однажды найденный, он тянет много!линий и сохраняет профили яркости вдоль этих линий в CSV-файл.Пока это работает хорошо и быстро.Это фрагмент кода, который извлекает профили и сохраняет их:

for (i=0; i < 360; i++){
    run("Clear Results"); 
    angle = i*2*PI/360;
    makeLine(xm,ym,(xm+(length*sin(angle))), (ym-(length*cos(angle))));
    profile = getProfile();
    for (j=0; j<profile.length; j++) {
        setResult("Value", j, profile[j]);
    }
    updateResults;
    saveAs("Results",path + "\\angle_"+i+".csv");
}

Моя проблема в том, что фактический масштаб не экспортируется.Я получаю что-то вроде этого:

1,3070.070
2,3069.000
3,3069.986
4,3053.646

но я хочу

0.4395 3070
0.8789 3070
1.3184 3070
1.7578 069.8994

И так далее.Я попытался немного изменить эту строку:

setResult("Value", j*xscale, profile[j]);

, но это не работает.Я также попытался построить профили, а затем прочитать и сохранить их.

for (i=0; i < 360; i++){
        run("Clear Results"); 
        angle = i*2*PI/360;
        makeLine(xm,ym,(xm+(length*sin(angle))), (ym-(length*cos(angle))));
        run ("Plot Profile");
        Plot.getValues(xplot,yplot);
        for (j=0; j< xplot.length; j++){
            print (xplot[j],yplot [j]);         
        }

        selectWindow("Log");
        saveAs("Text",path + "\\angle_"+i+".csv");
        print("\\Clear");
        selectWindow("04");
    }

(Извините, переключение окон все еще экспериментальное, а профили не закрываются ..)

Это работает впринцип, но это, конечно, медленно медленно.Так что мой вопрос ... Как извлечь не онлайн номера строк, а правильный масштаб в профиле?Спасибо всем большое!

1 Ответ

0 голосов
/ 30 ноября 2018

Первый столбец - это просто не редактируемый номер строки.Код должен быть изменен следующим образом:

for (i=0; i < 360; i++){
    run("Clear Results"); 
    angle = i*2*PI/360;
    makeLine(xm,ym,(xm+(length*sin(angle))), (ym-(length*cos(angle))));
    profile = getProfile();
    for (j=0; j<profile.length; j++) {
        setResult("xvalues", j, j*dx);
        setResult("yvalues", j, profile[j]);
    }
    updateResults;
    saveAs("Results",path + "\\angle_"+i+".csv");
}
...