public void run(String arg) { ImagePlus imp = WindowManager.getCurrentImage(); if (imp == null) { IJ.noImage(); return; } ImageStack stack1 = imp.getStack(); String fileName = imp.getTitle(); int endslice = stack1.getSize(); ImagePlus imp2 = duplicateStack(imp); imp2.show(); String duplicateName = imp2.getTitle(); // IJ.showMessage("Box",fileName); ImageStack stack2 = imp2.getStack(); stack1.deleteSlice(1); stack2.deleteSlice(endslice); String calculatorstring = ("image1='" + fileName + "' operation=Subtract image2=" + imp2.getTitle() + " create stack"); IJ.run("Image Calculator...", calculatorstring); ImagePlus imp3 = WindowManager.getCurrentImage(); imp3.setTitle(fileName + " DeltaF up"); imp2.getWindow().close(); imp.getWindow().close(); }
/** * Splits the specified RGB stack into three 8-bit grayscale stacks. Deletes the source stack if * keepSource is false. */ public static ImageStack[] splitRGB(ImageStack rgb, boolean keepSource) { int w = rgb.getWidth(); int h = rgb.getHeight(); ImageStack[] channels = new ImageStack[3]; for (int i = 0; i < 3; i++) channels[i] = new ImageStack(w, h); byte[] r, g, b; ColorProcessor cp; int slice = 1; int inc = keepSource ? 1 : 0; int n = rgb.getSize(); for (int i = 1; i <= n; i++) { IJ.showStatus(i + "/" + n); r = new byte[w * h]; g = new byte[w * h]; b = new byte[w * h]; cp = (ColorProcessor) rgb.getProcessor(slice); slice += inc; cp.getRGB(r, g, b); if (!keepSource) rgb.deleteSlice(1); channels[0].addSlice(null, r); channels[1].addSlice(null, g); channels[2].addSlice(null, b); IJ.showProgress((double) i / n); } return channels; }