macros.SmoothWandTool.txt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ij Show documentation
Show all versions of ij Show documentation
ImageJ is an open source Java image processing program inspired by NIH Image for the Macintosh.
//Smooth Wand version 1d
//N.Vischer
//01.07.17 20:20
var count, polyX, polyY
getSelectionBounds(x, y, w, h);
if (w<2 || h<2)
exit("Width and height must be > 1 px");
if (selectionType != 4)
exit("No traced selection found");
getThreshold(lowThr, hiThr);
getSelectionCoordinates(xx, yy);
len = xx.length;
polyX = newArray(len);
polyY = newArray(len);
count = 0;
for(jj = 0; jj < len; jj++) {
x1 = xx[jj];
y1 = yy[jj];
x2 = xx[(jj+1)%len];
y2 = yy[(jj+1)%len];
dd = 1;
if (y1 == y2) {//horizontal separator
if (x1 > x2) dd = -1;
for(x = x1; x != x2; x+= dd){
processPixelPair(x, y1, x+dd, y1);
}
}
else {//vertical separator
if (y1 > y2) dd = -1;
for(y = y1; y != y2; y+= dd){
processPixelPair(x1, y, x1, y+dd);
}
}
}
polyX = Array.trim(polyX, count);
polyY = Array.trim(polyY, count);
makeSelection("polygon", polyX, polyY);
run("Interpolate", "interval=1 adjust"); //after button released
//processes neighbors of this separator line and adds vertex
function processPixelPair(x1, y1, x2, y2) {
if (x1 == x2) {
val1 = getPixel(x1, minOf(y1, y2));
val2 = getPixel(x1 - 1, minOf(y1, y2));
}
if (y1 == y2){
val1 = getPixel(minOf(x1, x2), y1);
val2 = getPixel(minOf(x1, x2), y1 -1);
}
bright = maxOf(val1, val2);
dark = minOf(val1, val2);
if (bright>=lowThr && dark<=lowThr)
thr = lowThr;
if (bright>=hiThr && dark<=hiThr)
thr = hiThr;
if (dark==bright)
fraction = 0.5;
else
fraction = (thr - dark)/(bright - dark);
if (val1 < val2)
fraction = 1 - fraction;
if (y1 == y2) {
newY = minOf(y1, y2) + fraction - 0.5;
newX = (x1 + x2)/2;
}
if (x1 == x2) {
newX = minOf(x1, x2) + fraction - 0.5;
newY = (y1 + y2)/2;
}
polyX[count] = newX;
polyY[count] = newY;
count++;
if (count == polyX.length){
polyX = Array.concat(polyX, polyX);
polyY = Array.concat(polyY, polyY);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy