root/graph/JavaPopWeb/src/jp/ac/nime/computer/grpsimulator/ImgPr/HistogramFlat.java

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. HistogramFlat
  2. Calculation
  3. Calculation

package jp.ac.nime.computer.grpsimulator.ImgPr;

import java.awt.*;
import java.awt.image.*;
import java.util.*;

/**
 * ヒストグラム平坦化
 * @author kikuchi
 * @version 1.0.0
 */
public class HistogramFlat extends HistogramOp {
        
        /**
         * ヒストグラム平坦化の実行
         * (輝度プレーンに関する計算しかサポートしない)
         *
         * @param flag          計算するプレーン 0 で濃度になる
         * @param imgSrc        ソース画像(YUV)
         * @param imgDst        出力画像
         * @param params        未使用
         */
        public void Calculation(int flag, BufferedImage imgSrc, BufferedImage imgDst, int[] params) {
                // 引数チェック
                if (flag == 0) flag = YP;
                int num = 256;          
                // ヒストグラムを求める
                int nHistY[] = getHistgram(YP, imgSrc, num);
                // 平坦化のための変換テーブルを作成する
                int nRuikei = 0;
                int j = 0;
                int nHenkanY[] = new int[256];
                int nHeikin = (imgSrc.getHeight() * imgSrc.getWidth() / num)  + 1;
                Arrays.fill(nHenkanY, 0);
                for (int i = 0; i < 256; i++) {
                        nRuikei += nHistY[i];
                        j += nRuikei / nHeikin;
                        nRuikei %= nHeikin;
                        nHenkanY[i] = j;
                }

                // 全ピクセルの変換
                for (int h = 0; h < imgSrc.getHeight(); h ++) {
                        for (int w = 0; w < imgSrc.getWidth(); w ++) {
                                int ayuv = imgSrc.getRGB(w, h); // ARGB つまり AYUV
                                int y = (ayuv & 0x00ff0000) >> 16;
                                int auv = ayuv & 0xff00ffff;
                                // 計算
                                int ny = nHenkanY[y];
                                ayuv = auv | (ny << 16);
                                imgDst.setRGB(w, h, ayuv);
                        }
                }
        }

        /**
         * ヒストグラム平坦化の実行
         *(輝度プレーンに関する計算)
         *
         * @param imgSrc        ソース画像
         * @param imgDst        出力画像
         * @param params        未使用
         */
        public void Calculation(BufferedImage imgSrc, BufferedImage imgDst, int[] params) {
                Calculation(0, imgSrc, imgDst, params);
        }
        
}

/* [<][>][^][v][top][bottom][index][help] */