Macro: Volume Fraction of Bone

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Macro: Volume Fraction of Bone

Michael Doube-2
Hi all

I've been alerted to the fact that the old version of
VolumeFractionOfBone.txt doesn't work on stacks.

It is now fixed - plus it calculates a modal (non-zero/bone matrix) grey
value from the ROI x stack depth.

Code follows,

Mike
--------
// VolumeFractionOfBone

// We do a lot of quantitative backscattered electron
// microscopy (qBSE) of mineralised tissues in our lab.  I've
// just written a macro for measuring the volume fraction of
// bone matrix, the mineral density of bone matrix and the
// apparent mineral density of the ROI (which is usually less
// becuase the ROI tends to contain some non-bone-matrix marrow
// space).

// I guess it would work for any situation where you want to
// measure the mean grey values of only the foreground pixels.

// The macro uses threshold values from
// Image-Adjust-Threshold... You have to set a threshold or
// else it can't work out what to measure!

//  If you install it, it runs when you hit q.

// You will need ij.jar version 1.34h or later.

// If you spot any mistakes or have any improvements
// then please let me know.

// Michael Doube BPhil BVSc MRCVS (m.doube at QMUL.AC.UK)
// MPhil / PhD Student
// Dental Institute
// Barts and The London School of Medicine and Dentistry
// Queen Mary, University of London

macro "Volume Fraction of Bone [q]" {
    requires("1.34h");
    n = getSliceNumber();
    row = nResults;
    vhistogram = newArray(0);
    for (i=1; i<=nSlices; i++) {
        setSlice(i);
        getRawStatistics(count, mean, min, max, std, histogram);
        getThreshold(lower, upper);
        if (lower==-1)
            exit("Use Image>Adjust>Threshold to set the threshold");

       background = 0;
       for (k=0; k<lower; k++) {
            background = background + histogram[k];
            fraction = (count - background) / count;
       }

        cumulative = 0;
        av= 0;
        for (j=lower; j<upper; j++) {
            cumulative = cumulative + histogram[j];
            av = av + j * histogram[j];
            bmmd = av / cumulative;
       }


      vfraction = vfraction+fraction;
      vbmmd = vbmmd+bmmd;
      vmean = vmean+mean;

for (p=0; p==upper; p++) {
    vhistogram[p] = vhistogram[p]+histogram[p];
    }
 
    }

    mode = 0;
    for (p=lower; p<upper; p++) {
        if (mode < histogram[p]) {
        mode = histogram[p];
       setResult("Mode Matrix", row, p);
        modep = p;
    }
    }
     vfraction = vfraction/(i-1);
     vbmmd = vbmmd/(i-1);  
     vmean = vmean/(i-1);
      setResult("Vfb", row, vfraction);
      setResult("Mean Matrix", row, vbmmd);
      setResult("Mean ROI", row, vmean);
      setSlice(n);
     updateResults();
}
------------------------

--
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