dialog box
Posted by Michael Doube-2 on Nov 09, 2005; 10:21am
URL: http://imagej.273.s1.nabble.com/dialog-box-tp3704509.html
Dear List
I have a macro that measures length and density within 2-300 manually
placed ROIs in a stack of images. This part works fine.
I'd like to have a dialog box open that the macro looks at to get data
about the specimen that the images are of - whether the surface was
milled or polished and the orientation of the specimen. I only have to
set this data at the beginning of a set of measurements, after opening
the image stack. I tried putting a dialog in the macro, which works,
only it asks me to set the variables every time I take a measurement.
How can I make a dialog that I can set at the beginning, that my macro
will refer to each time it is run? At the moment I have to edit the
macro manually each time I change images. Not too onerous, but inelegant.
I'm OK at macro writing but haven't written a plugin yet.
The measure and dialog macros follow.
Thanks,
Mike
----------------SpecimenInfo.txt---------------
Dialog.create("Specimen Information");
Dialog.addChoice("Finish", newArray("Milled", "Polished"));
Dialog.addChoice("Lateral is to the", newArray("Left", "Right"));
Dialog.show();
finish = Dialog.getChoice();
lateral = Dialog.getChoice();
--------------------------------------------------
----------------CalcifiedCartilage.txt-------------
macro "Calcified Cartilage [q]" {
requires("1.34h");
var bmmd;
var fraction;
//set the side that lateral is on, either left (1) or right (0)
lateral = 0;
//get the pixel information from inside the ROI
getRawStatistics(count, mean, min, max, std, histogram);
row = nResults;
//get the number of image fields in the stack from ImageJ
fields = nSlices();
//use this line if dealing with a stacked series of images
name=getMetadata();
//use this line if dealing with single images
// name = getTitle();
// The following section is to speed up my labelling
horse = substring(name, 0, 2);
leg = substring(name, 2, 3);
section = substring(name, 3, 4);
//use these lines to manually control the threshold
lower=1;
upper=255;
for (k=0; k<lower; k++) {
background = background + histogram[k];
fraction = (count - background) / count;
setResult("Vfc ", row, fraction);
}
for(j=lower; j<upper; j++) {
cumulative = cumulative + histogram[j];
av = av + j * histogram[j];
bmmd = av / cumulative;
setResult("Mean Matrix", row, bmmd);
}
modep=0;
mode = 0;
for (p=lower; p<upper; p++) {
if (mode < histogram[p]) {
mode = histogram[p];
setResult("Mode", row, p);
modep = p;
}
}
setResult("Mean ROI ", row, mean);
//get the coordinates of the ends of the straight line selection
getLine(a,b,c,d,w);
//calculate line length - go pythagoras
thickness=sqrt((a-c)*(a-c)+(b-d)*(b-d));
//Calculate relative position from left, lateral is always left, image
sequences start on left
ni = getSliceNumber();
if (lateral == 1)
pos = ni / fields;
else if (lateral == 0)
pos = (-1)*(ni / fields-1);
//the next line prints results in a log window
print(horse, " \t", leg, "\t", section, "\t", "p","\t", modep, " \t",
mean, " \t", bmmd, " \t", fraction, "\t", thickness, "\t", pos,"
\n");
}
setSlice(n);
}
-----------------------------------
--
Michael Doube BPhil BVSc MRCVS
MPhil / PhD Student
Dental Institute
Barts and The London School of Medicine and Dentistry
Queen Mary, University of London
New Rd
London E1 1BB
United Kingdom
Phone +44 (0)20 7377 7000 ext 2681