/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- WhiteBlackOp
- Calculation
- MakeWB
- 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;
}
}