Refine search
public static void crop(ImagePlus image, Rectangle rect) { if (image.getWidth() == rect.width && image.getHeight() == rect.height) return; image.changes = true; if (image.getStackSize() == 1) { image.setProcessor(image.getTitle(), crop(image.getProcessor(), rect)); return; } ImageStack stack = new ImageStack(rect.width, rect.height); ImageStack orig = image.getStack(); for (int i = 1; i < orig.getSize(); i++) stack.addSlice("", crop(orig.getProcessor(i), rect)); image.setStack(image.getTitle(), stack); } }
private ImagePlus[] splitRGBStack(ImagePlus rgb) { Calibration cal = rgb.getCalibration(); FileInfo fi = rgb.getOriginalFileInfo(); RGBStackSplitter splitter = new RGBStackSplitter(); splitter.split(rgb.getStack(), false); rgb.close(); ImagePlus[] ret = new ImagePlus[3]; ret[0] = new ImagePlus(rgb.getTitle(), splitter.red); ret[0].setCalibration(cal); ret[0].setFileInfo(fi); ret[1] = new ImagePlus(rgb.getTitle(), splitter.green); ret[1].setCalibration(cal); ret[1].setFileInfo(fi); ret[2] = new ImagePlus(rgb.getTitle(), splitter.blue); ret[2].setCalibration(cal); ret[2].setFileInfo(fi); return ret; } }
public static ImagePlus focus(ImagePlus image, double radius, boolean showProgress) { int nSlices = image.getNSlices(); int nChannels = image.getNChannels(); int nFrames = image.getNFrames(); ImageStack stack = image.getStack(); ImageStack output = new ImageStack(image.getWidth(), image.getHeight()); for (int frame = 1; frame <= nFrames; frame++) for (int channel = 1; channel <= nChannels; channel++) { FloatProcessor[] slices = new FloatProcessor[nSlices]; for (int slice = 1; slice <= nSlices; slice++) { int index = image.getStackIndex(channel, slice, frame); ImageProcessor ip = stack.getProcessor(index); if (ip instanceof FloatProcessor) slices[slice - 1] = (FloatProcessor)ip; else slices[slice - 1] = (FloatProcessor)ip.convertToFloat(); } output.addSlice("", focus(slices, radius)); if (showProgress) IJ.showProgress((frame - 1) * nChannels + channel, nFrames * nChannels); } ImagePlus result = new ImagePlus("Focused " + image.getTitle(), output); result.setDimensions(nChannels, 1, nFrames); return result; }
public void run(String arg) { imp = WindowManager.getCurrentImage(); if (imp!=null) { if (imp.isComposite() && arg.equals("RGB Color") && !imp.getStack().isRGB() && !imp.getStack().isHSB() && !imp.getStack().isLab()) { if (imp.getWindow()==null && !ij.macro.Interpreter.isBatchMode()) RGBStackConverter.convertToRGB(imp); else { (new RGBStackConverter()).run(""); imp.setTitle(imp.getTitle()); // updates size in Window menu } } else if (imp.lock()) { convert(arg); imp.unlock(); imp.setTitle(imp.getTitle()); } else IJ.log("<<Converter: image is locked ("+imp+")>>"); } else IJ.noImage(); }
/** Converts a 3-slice (hue, saturation, brightness) 8-bit stack to RGB. */ public void convertHSBToRGB() { if (imp.getStackSize()!=3) throw new IllegalArgumentException("3-slice 8-bit stack required"); ImageStack stack = imp.getStack(); byte[] H = (byte[])stack.getPixels(1); byte[] S = (byte[])stack.getPixels(2); byte[] B = (byte[])stack.getPixels(3); int width = imp.getWidth(); int height = imp.getHeight(); imp.trimProcessor(); ColorProcessor cp = new ColorProcessor(width, height); cp.setHSB(H, S, B); imp.setImage(cp.createImage()); imp.killStack(); if (IJ.isLinux()) imp.setTitle(imp.getTitle()); }
private ImagePlus extractZSlice(ImagePlus imp, int zslice) { int width = imp.getWidth(); int height = imp.getHeight(); int channels = imp.getNChannels(); int frames = imp.getNFrames(); FileInfo fileInfo = imp.getOriginalFileInfo(); // create empty stack ImageStack stack2 = new ImageStack(width, height); // create new ImagePlus for selected frame ImagePlus imp2 = new ImagePlus(); imp2.setTitle("Z" + zslice + "-" + imp.getTitle()); // copy slices for (int f = 1; f <= frames; f++) for (int c = 1; c <= channels; c++) { int slice = imp.getStackIndex(c, zslice, f); stack2.addSlice("", imp.getStack().getProcessor(slice)); } imp2.setStack(stack2); imp2.setDimensions(channels, 1, frames); if (channels*frames > 1) imp2.setOpenAsHyperStack(true); imp2.setFileInfo(fileInfo); return imp2; }
public void run(String arg) { imp = WindowManager.getCurrentImage(); if (imp!=null) { if (imp.isComposite() && arg.equals("RGB Color") && !imp.getStack().isRGB() && !imp.getStack().isHSB() && !imp.getStack().isLab()) { if (imp.getWindow()==null && !ij.macro.Interpreter.isBatchMode()) RGBStackConverter.convertToRGB(imp); else { (new RGBStackConverter()).run(""); imp.setTitle(imp.getTitle()); // updates size in Window menu } } else if (imp.lock()) { convert(arg); imp.unlock(); imp.setTitle(imp.getTitle()); } else IJ.log("<<Converter: image is locked ("+imp+")>>"); } else IJ.noImage(); }
/** Converts a 3-slice (hue, saturation, brightness) 8-bit stack to RGB. */ public void convertHSBToRGB() { if (imp.getStackSize()!=3) throw new IllegalArgumentException("3-slice 8-bit stack required"); ImageStack stack = imp.getStack(); byte[] H = (byte[])stack.getPixels(1); byte[] S = (byte[])stack.getPixels(2); byte[] B = (byte[])stack.getPixels(3); int width = imp.getWidth(); int height = imp.getHeight(); imp.trimProcessor(); ColorProcessor cp = new ColorProcessor(width, height); cp.setHSB(H, S, B); imp.setImage(cp.createImage()); imp.killStack(); if (IJ.isLinux()) imp.setTitle(imp.getTitle()); }
public void reduceHyperstack(ImagePlus imp, int factor, boolean reduceSlices) { int channels = imp.getNChannels(); int slices = imp.getNSlices(); int frames = imp.getNFrames(); int zfactor = reduceSlices?factor:1; int tfactor = reduceSlices?1:factor; ImageStack stack = imp.getStack(); ImageStack stack2 = new ImageStack(imp.getWidth(), imp.getHeight()); boolean virtual = stack.isVirtual(); int slices2 = slices/zfactor + ((slices%zfactor)!=0?1:0); int frames2 = frames/tfactor + ((frames%tfactor)!=0?1:0); int n = channels*slices2*frames2; int count = 1; for (int t=1; t<=frames; t+=tfactor) { for (int z=1; z<=slices; z+=zfactor) { for (int c=1; c<=channels; c++) { int i = imp.getStackIndex(c, z, t); IJ.showProgress(i, n); ImageProcessor ip = stack.getProcessor(imp.getStackIndex(c, z, t)); //IJ.log(count++ +" "+i+" "+c+" "+z+" "+t); stack2.addSlice(stack.getSliceLabel(i), ip); } } } imp.setStack(stack2, channels, slices2, frames2); Calibration cal = imp.getCalibration(); if (cal.scaled()) cal.pixelDepth *= zfactor; if (virtual) imp.setTitle(imp.getTitle()); IJ.showProgress(1.0); }
@Override public void run(String arg) { ImagePlus imp = WindowManager.getCurrentImage(); if (imp==null) {IJ.noImage(); return;} ImageStack stack = imp.getStack(); if (stack.getSize()==1) {IJ.error("Stack Required"); return;} if (!showDialog(stack)) return; title=imp.getTitle(); keepSlices(stack, first, last, inc, imp.getCalibration()); //imp.setStack(null, stack); IJ.register(Slice_Keeper.class); }
/** Constructs an ImagePlus from a TIFF, BMP, DICOM, FITS, PGM, GIF or JPRG specified by a path or from a TIFF, DICOM, GIF or JPEG specified by a URL. */ public ImagePlus(String pathOrURL) { Opener opener = new Opener(); ImagePlus imp = null; boolean isURL = pathOrURL.indexOf("://")>0; if (isURL) imp = opener.openURL(pathOrURL); else imp = opener.openImage(pathOrURL); if (imp!=null) { if (imp.getStackSize()>1) setStack(imp.getTitle(), imp.getStack()); else setProcessor(imp.getTitle(), imp.getProcessor()); setCalibration(imp.getCalibration()); properties = imp.getProperties(); setFileInfo(imp.getOriginalFileInfo()); setDimensions(imp.getNChannels(), imp.getNSlices(), imp.getNFrames()); setOverlay(imp.getOverlay()); setRoi(imp.getRoi()); if (isURL) this.url = pathOrURL; setID(); } }
private ImagePlus extractChannel(ImagePlus imp, int channel) { int width = imp.getWidth(); int height = imp.getHeight(); int zslices = imp.getNSlices(); int frames = imp.getNFrames(); FileInfo fileInfo = imp.getOriginalFileInfo(); // create empty stack ImageStack stack2 = new ImageStack(width, height); // create new ImagePlus for selected channel ImagePlus imp2 = new ImagePlus(); imp2.setTitle("C" + channel + "-" + imp.getTitle()); // copy slices for (int t = 1; t <= frames; t++) for (int z = 1; z <= zslices; z++) { int slice = imp.getStackIndex(channel, z, t); stack2.addSlice("", imp.getStack().getProcessor(slice)); } imp2.setStack(stack2); imp2.setDimensions(1, zslices, frames); if (zslices*frames > 1) imp2.setOpenAsHyperStack(true); imp2.setFileInfo(fileInfo); return imp2; }
/** Asks for the compression type and filename; then saves as AVI file */ public void run(ImageProcessor ip) { if (!showDialog(imp)) return; //compression type dialog SaveDialog sd = new SaveDialog("Save as AVI...", imp.getTitle(), ".avi"); String fileName = sd.getFileName(); if (fileName == null) return; String fileDir = sd.getDirectory(); FileInfo fi = imp.getOriginalFileInfo(); if (fi!=null && imp.getStack().isVirtual() && fileDir.equals(fi.directory) && fileName.equals(fi.fileName)) { IJ.error("AVI Writer", "Virtual stacks cannot be saved in place."); return; } try { writeImage(imp, fileDir + fileName, COMPRESSION_TYPES[compressionIndex], jpegQuality); IJ.showStatus(""); } catch (IOException e) { IJ.error("AVI Writer", "An error occured writing the file.\n \n" + e); } IJ.showStatus(""); }
/** Constructs an ImagePlus from a TIFF, BMP, DICOM, FITS, PGM, GIF or JPRG specified by a path or from a TIFF, DICOM, GIF or JPEG specified by a URL. */ public ImagePlus(String pathOrURL) { Opener opener = new Opener(); ImagePlus imp = null; boolean isURL = pathOrURL.indexOf("://")>0; if (isURL) imp = opener.openURL(pathOrURL); else imp = opener.openImage(pathOrURL); if (imp!=null) { if (imp.getStackSize()>1) setStack(imp.getTitle(), imp.getStack()); else setProcessor(imp.getTitle(), imp.getProcessor()); setCalibration(imp.getCalibration()); properties = imp.getProperties(); setFileInfo(imp.getOriginalFileInfo()); setDimensions(imp.getNChannels(), imp.getNSlices(), imp.getNFrames()); setOverlay(imp.getOverlay()); setRoi(imp.getRoi()); if (isURL) this.url = pathOrURL; setID(); } }
/** Asks for the compression type and filename; then saves as AVI file */ public void run(ImageProcessor ip) { if (!showDialog(imp)) return; //compression type dialog SaveDialog sd = new SaveDialog("Save as AVI...", imp.getTitle(), ".avi"); String fileName = sd.getFileName(); if (fileName == null) return; String fileDir = sd.getDirectory(); FileInfo fi = imp.getOriginalFileInfo(); if (fi!=null && imp.getStack().isVirtual() && fileDir.equals(fi.directory) && fileName.equals(fi.fileName)) { IJ.error("AVI Writer", "Virtual stacks cannot be saved in place."); return; } try { writeImage(imp, fileDir + fileName, COMPRESSION_TYPES[compressionIndex], jpegQuality); IJ.showStatus(""); } catch (IOException e) { IJ.error("AVI Writer", "An error occured writing the file.\n \n" + e); } IJ.showStatus(""); }
/** Converts a 2 or 3 slice 8-bit stack to RGB. */ public void convertRGBStackToRGB() { int stackSize = imp.getStackSize(); if (stackSize<2 || stackSize>3 || type!=ImagePlus.GRAY8) throw new IllegalArgumentException("2 or 3 slice 8-bit stack required"); int width = imp.getWidth(); int height = imp.getHeight(); ImageStack stack = imp.getStack(); byte[] R = (byte[])stack.getPixels(1); byte[] G = (byte[])stack.getPixels(2); byte[] B; if (stackSize>2) B = (byte[])stack.getPixels(3); else B = new byte[width*height]; imp.trimProcessor(); ColorProcessor cp = new ColorProcessor(width, height); cp.setRGB(R, G, B); if (imp.isInvertedLut()) cp.invert(); imp.setImage(cp.createImage()); imp.killStack(); if (IJ.isLinux()) imp.setTitle(imp.getTitle()); }
private ImagePlus resizeZ(ImagePlus imp, int newDepth, int interpolationMethod) { ImageStack stack1 = imp.getStack(); int width = stack1.getWidth(); int height = stack1.getHeight(); int depth = stack1.getSize(); int bitDepth = imp.getBitDepth(); ImagePlus imp2 = IJ.createImage(imp.getTitle(), bitDepth+"-bit", width, height, newDepth); if (imp2==null) return null; ImageStack stack2 = imp2.getStack(); ImageProcessor ip = imp.getProcessor(); ImageProcessor xzPlane1 = ip.createProcessor(width, depth); xzPlane1.setInterpolationMethod(interpolationMethod); ImageProcessor xzPlane2; Object xzpixels1 = xzPlane1.getPixels(); IJ.showStatus("Z Scaling..."); for (int y=0; y<height; y++) { IJ.showProgress(y, height-1); for (int z=0; z<depth; z++) { // get xz plane at y Object pixels1 = stack1.getPixels(z+1); System.arraycopy(pixels1, y*width, xzpixels1, z*width, width); } xzPlane2 = xzPlane1.resize(width, newDepth, averageWhenDownsizing); Object xypixels2 = xzPlane2.getPixels(); for (int z=0; z<newDepth; z++) { Object pixels2 = stack2.getPixels(z+1); System.arraycopy(xypixels2, z*width, pixels2, y*width, width); } } return imp2; }
private static ImagePlus convertRGBToComposite(ImagePlus imp) { if (imp.getBitDepth()!=24) throw new IllegalArgumentException("RGB image or stack required"); if (imp.getStackSize()==1) return new CompositeImage(imp, IJ.COMPOSITE); int width = imp.getWidth(); int height = imp.getHeight(); ImageStack stack1 = imp.getStack(); int n = stack1.getSize(); ImageStack stack2 = new ImageStack(width, height); for (int i=0; i<n; i++) { ColorProcessor ip = (ColorProcessor)stack1.getProcessor(1); stack1.deleteSlice(1); byte[] R = new byte[width*height]; byte[] G = new byte[width*height]; byte[] B = new byte[width*height]; ip.getRGB(R, G, B); stack2.addSlice(null, R); stack2.addSlice(null, G); stack2.addSlice(null, B); } n *= 3; ImagePlus imp2 = new ImagePlus(imp.getTitle(), stack2); imp2.setDimensions(3, n/3, 1); imp2 = new CompositeImage(imp2, IJ.COMPOSITE); return imp2; }
void doComplexInverseTransform() { ImageStack stack = imp.getStack(); if (!stack.getSliceLabel(1).equals("Real")) return; int maxN = imp.getWidth(); swapQuadrants(stack); float[] rein = (float[])stack.getPixels(1); float[] imin = (float[])stack.getPixels(2); float[] reout= new float[maxN*maxN]; float[] imout = new float[maxN*maxN]; c2c2DFFT(rein, imin, maxN, reout, imout); ImageStack stack2 = new ImageStack(maxN, maxN); swapQuadrants(stack); stack2.addSlice("Real", reout); stack2.addSlice("Imaginary", imout); stack2 = unpad(stack2); String name = WindowManager.getUniqueName(imp.getTitle().substring(10)); ImagePlus imp2 = new ImagePlus(name, stack2); imp2.getProcessor().resetMinAndMax(); imp2.show(); }
/** Converts a 2 or 3 slice 8-bit stack to RGB. */ public void convertRGBStackToRGB() { int stackSize = imp.getStackSize(); if (stackSize<2 || stackSize>3 || type!=ImagePlus.GRAY8) throw new IllegalArgumentException("2 or 3 slice 8-bit stack required"); int width = imp.getWidth(); int height = imp.getHeight(); ImageStack stack = imp.getStack(); byte[] R = (byte[])stack.getPixels(1); byte[] G = (byte[])stack.getPixels(2); byte[] B; if (stackSize>2) B = (byte[])stack.getPixels(3); else B = new byte[width*height]; imp.trimProcessor(); ColorProcessor cp = new ColorProcessor(width, height); cp.setRGB(R, G, B); if (imp.isInvertedLut()) cp.invert(); imp.setImage(cp.createImage()); imp.killStack(); if (IJ.isLinux()) imp.setTitle(imp.getTitle()); }