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

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

DEFINITIONS

This source file includes following definitions.
  1. WhiteBlackOp
  2. Calculation
  3. MakeWB
  4. MakeWByuv

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

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

/**
 * 画像計測の為に自動的に白黒画像にするクラス
 * 
 * 画像を判別分析法を用いて二値化する
 * 二値化画像は、色成分を抜いて白黒画像とする。
 * 二値化画像は、白黒反転することが可能。
 * @author Kikuchi
 * @since 0.5
 * @version 1.0.0
 */
public class WhiteBlackOp {
        
        /** imgSrcの画像を判別分析法で二値化してimgDstに出力する。
         *  flgaの内容で、出力画像の白黒を反転させることができる。
         * 
         * @param flag 1のとき白黒を反転して出力する(白紙に黒画像がある場合をイメージしてください)
         * @param imgSrc 元画像(GrpSimBufferのYUV画像)
         * @param imgDst 出力画像(GrpSimBufferのYUV画像)
         */
        public static void Calculation(int flag, BufferedImage imgSrc, BufferedImage imgDst) {
                HistogramBinaryAnaDisc hbad = new HistogramBinaryAnaDisc();
                int[] dummy = new int[1];
                // 輝度データを二値化する
                hbad.Calculation(imgSrc, imgDst, dummy);
                // このときのimgDstは、色つきなので、色をなくす
                MakeWB(flag, imgDst);
        }

        /** 指定画像の色成分を0にする
         * 
         * @param flag 1のとき白黒を反転する
         * @param imgDst 色成分を0にする画像(yuv画像)
         */
        public static void MakeWB(int flag, BufferedImage imgDst) {
                // 全ピクセルの変換
                for (int h = 0; h < imgDst.getHeight(); h ++) {
                        for (int w = 0; w < imgDst.getWidth(); w ++) {
                                int ayuv = imgDst.getRGB(w, h); // ARGB つまり AYUV
                                int a = ayuv & 0xff000000;
                                int y = (ayuv & 0x00ff0000) >> 16;
                                // flagで指定されていたら反転する
                                if (flag == 1) { // yデータの反転
                                        y = 0xff - y;
                                }
                                // 白黒yuvデータに変換
                                int yuv = MakeWByuv(y);
                                ayuv = yuv | a;
                                // set
                                imgDst.setRGB(w, h, ayuv);
                        }
                }
        }

        /** 輝度情報 y を白黒とするYUVデータを作成する
         * @param y     輝度情報
         * @return BufferedImage用のintデータ(YUV)
         */
        public static int MakeWByuv(int y) {
                // データを YUVに変更する
                int yuv = (y << 16) + (128 << 8) + (128);
                return yuv;
        }       
}

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