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