import org.python.bouncycastle.util.Arrays; import ij.*; import ij.process.*; import ij.plugin.filter.*; public class Grow_Regions implements PlugInFilter { ImagePlus imp; int width, height; public int setup(String arg, ImagePlus imp) { this.imp = imp; this.width = imp.getWidth(); this.height = imp.getHeight(); return DOES_8G+DOES_8C; } public void run(ImageProcessor ip) { boolean changedSomething = true; byte[] pixels = (byte[]) this.imp.getProcessor().getPixels(); byte[] newPixels = Arrays.copyOf(pixels, pixels.length); int i = 0; while(changedSomething && i<1001) { IJ.log("\\Update0:generation " + i); changedSomething = this.attachPointsToNearestObjects(pixels, newPixels); if (changedSomething) { pixels = Arrays.copyOf(newPixels, newPixels.length); byte[] tmp = newPixels; newPixels = pixels; pixels = tmp; } i++; } this.imp.getProcessor().setPixels(newPixels); this.imp.getProcessor().setSnapshotPixels(null); this.imp.setProcessor(this.imp.getProcessor()); this.imp.updateAndDraw(); WindowManager.setCurrentWindow(imp.getWindow()); } private boolean attachPointsToNearestObjects(byte[] pixels, byte[] newPixels) { boolean changedSomething = false; for (int x=0; x=1) n1=pixels[(y-1)*width+x]&0xff; if (n1==255) n1 = 0; n2 = 0; if (x<(width-1)) n2=pixels[y*width+(x+1)]&0xff; if (n2==255) n2 = 0; n3 = 0; if (x>=1) n3=pixels[y*width+(x-1)]&0xff; if (n3==255) n3 = 0; n4 = 0; if (y<(height-1)) n4=pixels[(y+1)*width+x]&0xff; if (n4==255) n4 = 0; int max = Math.max(Math.max(n1, n2), Math.max(n3,n4)); if (max>0) { newPixels[y*width+x] = (byte)max; changedSomething = true; } } } } return changedSomething; } public static void main(String[] args) { new ImageJ(); IJ.getInstance().setVisible(true); ImagePlus image = IJ.openImage("/media/baecker/donnees/mri/in/Jolanta Jagodzinska/new/wetransfer-390e37/test.tif"); image.show(); Grow_Regions gr = new Grow_Regions(); gr.setup("", IJ.getImage()); gr.run(IJ.getProcessor()); } }