public int[] HSBtoRGB(double[] HSB) { return HSBtoRGB(HSB[0], HSB[1], HSB[2]); }
public double[] RGBtoHSB(int[] RGB) { return RGBtoHSB(RGB[0], RGB[1], RGB[2]); }
/** 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(); }
/** 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 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; }
/** * Convert LAB to XYZ. * @param Lab * @return XYZ values */ public double[] LABtoXYZ(double[] Lab) { return LABtoXYZ(Lab[0], Lab[1], Lab[2]); }
/** * Convert XYZ to LAB. * @param XYZ * @return Lab values */ public double[] XYZtoLAB(double[] XYZ) { return XYZtoLAB(XYZ[0], XYZ[1], XYZ[2]); }
/** * Convert RGB to XYZ * @param RGB * @return XYZ in double array. */ public double[] RGBtoXYZ(int[] RGB) { return RGBtoXYZ(RGB[0], RGB[1], RGB[2]); }
/** 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(); }
/** 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 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; }
/** * Convert LAB to XYZ. * @param Lab * @return XYZ values */ public double[] LABtoXYZ(double[] Lab) { return LABtoXYZ(Lab[0], Lab[1], Lab[2]); }
/** * Convert XYZ to LAB. * @param XYZ * @return Lab values */ public double[] XYZtoLAB(double[] XYZ) { return XYZtoLAB(XYZ[0], XYZ[1], XYZ[2]); }
/** * Convert RGB to XYZ * @param RGB * @return XYZ in double array. */ public double[] RGBtoXYZ(int[] RGB) { return RGBtoXYZ(RGB[0], RGB[1], RGB[2]); }
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"){ lab = converter.RGBToLab(new ImagePlus("Lab", image.getStack().getProcessor(slice))); }else { lab = null;