/** * デバック用の関数です。 ヒストグラムをラスタに書き出します。 * * @param i_output 書き出し先のラスタオブジェクト 256ピクセル以上の幅があること。 */ public void debugDrawHistgramMap(IFLARRaster i_input, IFLARRaster i_output) throws FLARException { IFLARBufferReader in_buffer_reader = i_input.getBufferReader(); IFLARBufferReader out_buffer_reader = i_output.getBufferReader(); assert (in_buffer_reader.isEqualBufferType(IFLARBufferReader.BUFFERFORMAT_INT2D_GLAY_8)); assert (out_buffer_reader.isEqualBufferType(IFLARBufferReader.BUFFERFORMAT_INT2D_GLAY_8)); FLARIntSize size = i_output.getSize(); int[][] out_buf = (int[][]) out_buffer_reader.getBuffer(); // 0で塗りつぶし for (int y = 0; y < size.h; y++) { for (int x = 0; x < size.w; x++) { out_buf[y][x] = 0; } } // ヒストグラムを計算 int[] histgram = new int[256]; int threshold = createHistgram(in_buffer_reader, i_input.getSize(), histgram); // ヒストグラムの最大値を出す int max_v = 0; for (int i = 0; i < 255; i++) { if (max_v < histgram[i]) { max_v = histgram[i]; } } // 目盛り for (int i = 0; i < size.h; i++) { out_buf[i][0] = 128; out_buf[i][128] = 128; out_buf[i][255] = 128; } // スケーリングしながら描画 for (int i = 0; i < 255; i++) { out_buf[histgram[i] * (size.h - 1) / max_v][i] = 255; } // 値 for (int i = 0; i < size.h; i++) { out_buf[i][threshold] = 255; } return; }
public void analyzeRaster(IFLARRaster i_input) throws FLARException { final IFLARBufferReader buffer_reader = i_input.getBufferReader(); assert (buffer_reader.isEqualBufferType(IFLARBufferReader.BUFFERFORMAT_INT2D_GLAY_8)); int[] histgram = new int[256]; this._threshold = createHistgram(buffer_reader, i_input.getSize(), histgram); }