/** Returns Lab in 3 byte arrays. */ public static void getLab(ImageProcessor ip, byte[] L, byte[] a, byte[] b) { ColorSpaceConverter converter = new ColorSpaceConverter(); int[] pixels = (int[])ip.getPixels(); for (int i=0; i<pixels.length; i++) { double[] values = converter.RGBtoLAB(pixels[i]); int L1 = (int) (values[0] * 2.55); int a1 = (int) (Math.floor((1.0625 * values[1] + 128) + 0.5)); int b1 = (int) (Math.floor((1.0625 * values[2] + 128) + 0.5)); L[i] = (byte)((int)(L1<0?0:(L1>255?255:L1)) & 0xff); a[i] = (byte)((int)(a1<0?0:(a1>255?255:a1)) & 0xff); b[i] = (byte)((int)(b1<0?0:(b1>255?255:b1)) & 0xff); } }
/** Returns Lab in 3 byte arrays. */ public static void getLab(ImageProcessor ip, byte[] L, byte[] a, byte[] b) { ColorSpaceConverter converter = new ColorSpaceConverter(); int[] pixels = (int[])ip.getPixels(); for (int i=0; i<pixels.length; i++) { double[] values = converter.RGBtoLAB(pixels[i]); int L1 = (int) (values[0] * 2.55); int a1 = (int) (Math.floor((1.0625 * values[1] + 128) + 0.5)); int b1 = (int) (Math.floor((1.0625 * values[2] + 128) + 0.5)); L[i] = (byte)((int)(L1<0?0:(L1>255?255:L1)) & 0xff); a[i] = (byte)((int)(a1<0?0:(a1>255?255:a1)) & 0xff); b[i] = (byte)((int)(b1<0?0:(b1>255?255:b1)) & 0xff); } }
/** Converts a Lab stack to RGB. */ public void convertLabToRGB() { if (imp.getStackSize()!=3) throw new IllegalArgumentException("3-slice 32-bit stack required"); ColorSpaceConverter converter = new ColorSpaceConverter(); ImagePlus imp2 = converter.LabToRGB(imp); imp2.setCalibration(imp.getCalibration()); imp.setImage(imp2); }
/** Converts a Lab stack to RGB. */ public void convertLabToRGB() { if (imp.getStackSize()!=3) throw new IllegalArgumentException("3-slice 32-bit stack required"); ColorSpaceConverter converter = new ColorSpaceConverter(); ImagePlus imp2 = converter.LabToRGB(imp); imp2.setCalibration(imp.getCalibration()); imp.setImage(imp2); }
/** Converts an RGB image to a Lab stack. */ public void convertToLab() { if (type!=ImagePlus.COLOR_RGB) throw new IllegalArgumentException("Image must be RGB"); ColorSpaceConverter converter = new ColorSpaceConverter(); ImagePlus imp2 = converter.RGBToLab(imp); Point loc = null; ImageWindow win = imp.getWindow(); if (win!=null) loc = win.getLocation(); ImageWindow.setNextLocation(loc); imp2.show(); imp.hide(); imp2.copyAttributes(imp); imp.changes = false; imp.close(); }
/** Converts an RGB image to a Lab stack. */ public void convertToLab() { if (type!=ImagePlus.COLOR_RGB) throw new IllegalArgumentException("Image must be RGB"); ColorSpaceConverter converter = new ColorSpaceConverter(); ImagePlus imp2 = converter.RGBToLab(imp); Point loc = null; ImageWindow win = imp.getWindow(); if (win!=null) loc = win.getLocation(); ImageWindow.setNextLocation(loc); imp2.show(); imp.hide(); imp2.copyAttributes(imp); imp.changes = false; imp.close(); }
ImagePlus rgb,hsb,lab; ImageStack stack = new ImageStack(image.getWidth(),image.getHeight()); ColorSpaceConverter converter = new ColorSpaceConverter(); for(int i=0;i<channels.size();++i){ if(channels.get(i).toString()=="Red"||channels.get(i).toString()=="Blue"||channels.get(i).toString()=="Green"){
/** Converts a Lab stack into an RGB image. */ public ImagePlus LabToRGB(ImagePlus img) { int w = img.getWidth(); int h = img.getHeight(); ImageStack stack = img.getStack(); FloatProcessor L = (FloatProcessor)stack.getProcessor(1); FloatProcessor a = (FloatProcessor)stack.getProcessor(2); FloatProcessor b = (FloatProcessor)stack.getProcessor(3); ColorProcessor cp = new ColorProcessor(w, h); ColorSpaceConverter converter = new ColorSpaceConverter(); int[] values = new int[3]; double[] dvalues = new double[3]; for (int y=0; y<h; y++) { for (int x=0; x<w; x++) { dvalues[0] = L.getf(x,y); dvalues[1] = a.getf(x,y); dvalues[2] = b.getf(x,y); values = converter.LABtoRGB(dvalues); cp.putPixel(x,y,values); } } ImagePlus img2 = new ImagePlus(img.getTitle(), cp); return img2; }
/** Converts a Lab stack into an RGB image. */ public ImagePlus LabToRGB(ImagePlus img) { int w = img.getWidth(); int h = img.getHeight(); ImageStack stack = img.getStack(); FloatProcessor L = (FloatProcessor)stack.getProcessor(1); FloatProcessor a = (FloatProcessor)stack.getProcessor(2); FloatProcessor b = (FloatProcessor)stack.getProcessor(3); ColorProcessor cp = new ColorProcessor(w, h); ColorSpaceConverter converter = new ColorSpaceConverter(); int[] values = new int[3]; double[] dvalues = new double[3]; for (int y=0; y<h; y++) { for (int x=0; x<w; x++) { dvalues[0] = L.getf(x,y); dvalues[1] = a.getf(x,y); dvalues[2] = b.getf(x,y); values = converter.LABtoRGB(dvalues); cp.putPixel(x,y,values); } } ImagePlus img2 = new ImagePlus(img.getTitle(), cp); return img2; }
ImagePlus rgb, hsb, lab; ImageStack stack = new ImageStack(image.getWidth(), image.getHeight()); ColorSpaceConverter converter = new ColorSpaceConverter(); for (int i = 0; i < channels.size(); ++i) { if (channels.get(i).toString() == "Red" || channels.get(i).toString() == "Blue" || channels.get(i).toString() == "Green") {
/** Converts an RGB image into a Lab stack. */ public ImagePlus RGBToLab(ImagePlus img) { ColorProcessor cp = (ColorProcessor)img.getProcessor(); ColorSpaceConverter converter = new ColorSpaceConverter(); int[] pixels = (int[])cp.getPixels(); int w = cp.getWidth(); int h = cp.getHeight(); ImageStack stack = new ImageStack(w,h); FloatProcessor L = new FloatProcessor(w,h); FloatProcessor a = new FloatProcessor(w,h); FloatProcessor b = new FloatProcessor(w,h); stack.addSlice("L*",L); stack.addSlice("a*",a); stack.addSlice("b*",b); for (int i=0; i<pixels.length; i++) { double[] values = converter.RGBtoLAB(pixels[i]); L.setf(i,(float)values[0]); a.setf(i,(float)values[1]); b.setf(i,(float)values[2]); } ImagePlus img2 = new ImagePlus("Lab_"+img.getTitle(),stack); CompositeImage img3 = new CompositeImage(img2,IJ.GRAYSCALE); img3.resetDisplayRanges(); return img3; }
/** Converts an RGB image into a Lab stack. */ public ImagePlus RGBToLab(ImagePlus img) { ColorProcessor cp = (ColorProcessor)img.getProcessor(); ColorSpaceConverter converter = new ColorSpaceConverter(); int[] pixels = (int[])cp.getPixels(); int w = cp.getWidth(); int h = cp.getHeight(); ImageStack stack = new ImageStack(w,h); FloatProcessor L = new FloatProcessor(w,h); FloatProcessor a = new FloatProcessor(w,h); FloatProcessor b = new FloatProcessor(w,h); stack.addSlice("L*",L); stack.addSlice("a*",a); stack.addSlice("b*",b); for (int i=0; i<pixels.length; i++) { double[] values = converter.RGBtoLAB(pixels[i]); L.setf(i,(float)values[0]); a.setf(i,(float)values[1]); b.setf(i,(float)values[2]); } ImagePlus img2 = new ImagePlus("Lab_"+img.getTitle(),stack); CompositeImage img3 = new CompositeImage(img2,IJ.GRAYSCALE); img3.resetDisplayRanges(); return img3; }