Re: RGB profiler
Posted by dpoburko on Apr 30, 2011; 12:41am
URL: http://imagej.273.s1.nabble.com/RGB-profiler-tp3684784p3684785.html
On 4/29/2011 2:13 PM, Cammer, Michael wrote:
> Is there an RGB or multichannel profiler for 16 bit images?
> Thanks!
>
> ________________________________________________________
> Michael Cammer, Assistant Research Scientist
> Skirball Institute of Biomolecular Medicine
> Lab: (212) 263-3208 Cell: (914) 309-3270
Hi Michael,
Based on some previous threads, I worked up the code below. I am
pretty sure that there are other macros around that have a very similar
function. Feel free to have a whirl with this and see what you think.
(code below)
Damon--
Post Doctoral Fellow
Tsien Lab, Molecular& Cellular Physiology
Stanford University
requires("1.42l");
print("\\Clear"); //clear log
print("Results", "\\Clear");
run("Clear Results");
//================================================================================================================
if (selectionType==-1)
exit("Area selection required");
run("Set Measurements...", "area mean min centroid shape redirect=None decimal=3");
length = selectionLength();
imageName = getTitle();
baseName = imageName;
selectWindow(baseName);
setSlice(1);
profile1=getProfile();
Array.getStatistics(profile1, min, max, mean, stdDev);
max1 = max;
selectWindow(baseName);
setSlice(2);
profile2=getProfile();
Array.getStatistics(profile2, min, max, mean, stdDev);
max2 = max;
profilesMax = maxOf(max1,max2);
selectWindow(baseName);
if (nSlices() == 3) {
selectWindow(baseName);
setSlice(3);
profile3=getProfile();
Array.getStatistics(profile3, min, max, mean, stdDev);
max3 = max;
// max = maxOf(max,max3);
profilesMax = maxOf(max3,profilesMax);
}
chkSkipBlue = call("ij.Prefs.get", "dialogDefaults.default3", true);
if ( (chkSkipBlue != true)&& (chkSkipBlue != false) ) chkSkipBlue = false;
Dialog.create("Align Images");
Dialog.addCheckbox("run background subtraction?:", false);
Dialog.addNumber("rolling ball size (pixels)", 20);
Dialog.addNumber("scale green vs red", 1.0);
Dialog.addNumber("set Y Max (0 = autoscale)", 0);
Dialog.addCheckbox("common autoscale?:", false);
Dialog.addCheckbox("skip blue channel ?:", chkSkipBlue);
Dialog.addNumber("plot scale (plot width/line length))", 1);
Dialog.show();
//----------------------------------------------------------------------------------------
runBkgdSubtr = Dialog.getCheckbox();
ballSize = Dialog.getNumber();
scaleFactor = Dialog.getNumber();
yMax = Dialog.getNumber();
commonYMax = Dialog.getCheckbox();
skipBlue = Dialog.getCheckbox();
call("ij.Prefs.set", "dialogDefaults.default3", skipBlue);
plotScale = Dialog.getNumber();
plotWidth = round(length / plotScale);
setBatchMode(true);
if (runBkgdSubtr == true) run("Subtract Background...", "rolling="+ballSize+"");
if (commonYMax == true) yMax = profilesMax;
if (yMax == 0 ) {
setMax = "";
} else {
setMax = "maximum="+ yMax + " fixed ";
}
run("Profile Plot Options...", "width="+plotWidth+" height=200 minimum=0 " + setMax + "draw");
selectWindow(baseName);
setSlice(1);
run("Plot Profile");
run("Invert");
rename("red");
selectWindow(baseName);
setSlice(2);
run("Plot Profile");
run("Invert");
rename("green");
selectWindow(baseName);
if ( (nSlices() == 3)&& skipBlue == false) {
selectWindow(baseName);
setSlice(3);
run("Plot Profile");
run("Invert");
rename("blue");
mergeBlue = "blue";
} else {
mergeBlue = "*None*";
}
run("Merge Channels...", "red=red green=green blue="+mergeBlue+" gray=*None* create");
setBatchMode("exit and display");
//================================================================================
//================================================================================
function selectionLength() {
getSelectionCoordinates(x, y);
segments = newArray(x.length-1);
lineLength =0;
for (i=1; i<x.length; i++) {
segments[i-1] = sqrt( pow( (x[i-1] - x[i]),2) + pow( (y[i-1] - y[i]),2) );
lineLength = lineLength + segments[i-1];
}
return lineLength;
}
//================================================================================
//================================================================================