- BufferedImage img = ImageIO.read(newFile("model3.jpg"));
- intpixelsize = img.getWidth() * img.getHeight();
- double[][][] YCbCr = new double[img.getWidth()][img.getHeight()][3];
- doubleMr = 0,
- Mb = 0,
- Ymax = 0;
- for (inti = 0; i < img.getWidth(); i++) {
- for (intj = 0; j < img.getHeight(); j++) {
- YCbCr[i][j] = toYCbCr(img.getRGB(i, j));
- Mr += YCbCr[i][j][2];
- Mb += YCbCr[i][j][1];
- Ymax = Math.max(Ymax, YCbCr[i][j][0]);
- }
- }
- Mr /= pixelsize;
- Mb /= pixelsize;
- doubleDr = 0,
- Db = 0;
- for (inti = 0; i < YCbCr.length; i++) {
- for (intj = 0; j < YCbCr[i].length; j++) {
- Db += Math.abs(YCbCr[i][j][1] - Mb);
- Dr += Math.abs(YCbCr[i][j][2] - Mr);
- }
- }
- Dr /= pixelsize;
- Db /= pixelsize;
- double[][] Y = new double[img.getWidth()][img.getHeight()];
- double[] Yhistogram = new double[256];
- doubleYsum = 0;
- for (inti = 0; i < Y.length; i++) {
- for (intj = 0; j < Y[i].length; j++) {
- intvalue = (Math.abs(YCbCr[i][j][1] - (Mb + Db * Math.signum(Mb))) < 1.5 * Db) & //
- (Math.abs(YCbCr[i][j][2]) - (1.5 * Mr + Dr * Math.signum(Mr))) < 1.5 * Dr ? 1 : 0;
- if (value <= 0) continue;
- doubley = YCbCr[i][j][0];
- Y[i][j] = y;
- Yhistogram[(int) Y[i][j]]++;
- Ysum++;
- }
- }
- doubleYhistogramsum = 0;
- doubleYmin = 0;
- for (inti = Yhistogram.length - 1; i >= 0; i--) {
- Yhistogramsum += Yhistogram[i];
- if (Yhistogramsum > 0.1 * Ysum) {
- Ymin = i;
- break;
- }
- }
- doubleRaver = 0,
- Gaver = 0,
- Baver = 0;
- doubleaverSum = 0;
- for (inti = 0; i < Y.length; i++) {
- for (intj = 0; j < Y[i].length; j++) {
- if (Y[i][j] > Ymin) {
- intcolor = img.getRGB(i, j);
- intr = (color >> 16) & 0xFF;
- intg = (color >> 8) & 0xFF;
- intb = color & 0xFF;
- Raver += r;
- Gaver += g;
- Baver += b;
- averSum++;
- }
- }
- }
- Raver /= averSum;
- Gaver /= averSum;
- Baver /= averSum;
- doubleRgain = Ymax / Raver,
- Ggain = Ymax / Gaver,
- Bgain = Ymax / Baver;
- for (inti = 0; i < img.getWidth(); i++) {
- for (intj = 0; j < img.getHeight(); j++) {
- Color color = new Color(img.getRGB(i, j));
- intr = ensureColor((int) Math.floor(color.getRed() * Rgain));
- intg = ensureColor((int) Math.floor(color.getGreen() * Ggain));
- intb = ensureColor((int) Math.floor(color.getBlue() * Bgain));
- img.setRGB(i, j, new Color(r, g, b).getRGB());
- }
- }
- ImageIO.write(img, "jpg", newFile("xxx.jpg"));
来源: http://www.cnblogs.com/zc22/p/7101930.html