return;//未実装一号\r
}\r
\r
-\r
- private int createHistgram(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram) throws NyARException\r
+ private int[] _histgram_buf=new int[256];\r
+ public void analyzeRaster(INyARRaster i_input) throws NyARException\r
{\r
- //最大画像サイズの制限\r
- assert i_size.w*i_size.h<0x40000000;\r
+ final INyARBufferReader buffer_reader=i_input.getBufferReader(); \r
+ assert (buffer_reader.isEqualBufferType(INyARBufferReader.BUFFERFORMAT_INT1D_GLAY_8));\r
\r
- int[] histgram = o_histgram;\r
+ final int[] histgram = this._histgram_buf;\r
+ final NyARIntSize size=i_input.getSize();\r
\r
- //ヒストグラム作成 \r
+ //最大画像サイズの制限\r
+ assert size.w*size.h<0x40000000;\r
+\r
+ //ヒストグラム初期化\r
for (int i = 0; i < 256; i++) {\r
- o_histgram[i] = 0;\r
+ histgram[i] = 0;\r
}\r
- int sum_of_pixel=this._histgram.createHistgramImpl(i_reader, i_size, o_histgram);\r
+ int sum_of_pixel=this._histgram.createHistgramImpl(i_input.getBufferReader(), size, histgram);\r
\r
// 閾値ピクセル数確定\r
final int th_pixcels = sum_of_pixel * this._persentage / 100;\r
}\r
}\r
// 閾値の保存\r
- return (th_w + th_b) / 2;\r
- }\r
-\r
- public void analyzeRaster(INyARRaster i_input) throws NyARException\r
- {\r
- final INyARBufferReader buffer_reader=i_input.getBufferReader(); \r
- assert (buffer_reader.isEqualBufferType(INyARBufferReader.BUFFERFORMAT_INT1D_GLAY_8));\r
-\r
- int[] histgram = new int[256];\r
- // 閾値の基準値を出す。\r
- this._threshold = createHistgram(buffer_reader,i_input.getSize(), histgram);\r
- return;\r
- }\r
-\r
- /**\r
- * ヒストグラムをラスタに書き出す。\r
- * \r
- * @param i_output\r
- */\r
- public void debugDrawHistgramMap(INyARRaster i_input, INyARRaster i_output) throws NyARException\r
- {\r
- INyARBufferReader in_buffer_reader=i_input.getBufferReader(); \r
- INyARBufferReader out_buffer_reader=i_output.getBufferReader(); \r
- assert (in_buffer_reader.isEqualBufferType(INyARBufferReader.BUFFERFORMAT_INT1D_GLAY_8));\r
- assert (out_buffer_reader.isEqualBufferType(INyARBufferReader.BUFFERFORMAT_INT1D_GLAY_8));\r
-\r
- NyARIntSize size = i_output.getSize();\r
-\r
- int[] out_buf = (int[]) out_buffer_reader.getBuffer();\r
- // 0で塗りつぶし\r
- for (int y = 0; y < size.h; y++) {\r
- for (int x = 0; x < size.w; x++) {\r
- out_buf[y* size.w+x] = 0;\r
- }\r
- }\r
- // ヒストグラムを計算\r
- int[] histgram = new int[256];\r
- int threshold = createHistgram(in_buffer_reader,i_input.getSize(), histgram);\r
- for (int i = 255; i > 0; i--) {\r
- histgram[i] = Math.abs(histgram[i]);\r
- }\r
-\r
- // ヒストグラムの最大値を出す\r
- int max_v = 0;\r
- for (int i = 0; i < 255; i++) {\r
- if (max_v < histgram[i]) {\r
- max_v = histgram[i];\r
- }\r
- }\r
- // 目盛り\r
- for (int i = 0; i < size.h; i++) {\r
- out_buf[i* size.w+0] = 128;\r
- out_buf[i* size.w+128] = 128;\r
- out_buf[i* size.w+255] = 128;\r
- }\r
- // スケーリングしながら描画\r
- for (int i = 0; i < 255; i++) {\r
- out_buf[(histgram[i] * (size.h - 1) / max_v)* size.w+i] = 255;\r
- }\r
- // 値\r
- for (int i = 0; i < size.h; i++) {\r
- out_buf[i* size.w+threshold] = 255;\r
- }\r
+ this._threshold = (th_w + th_b) / 2;\r
return;\r
}\r
-\r
public int getThreshold()\r
{\r
return this._threshold;\r