OSDN Git Service

[更新]NyARToolkit for Java
[nyartoolkit-and/nyartoolkit-and.git] / src / jp / nyatla / nyartoolkit / core2 / rasteranalyzer / threshold / NyARRasterThresholdAnalyzer_SlidePTile.java
index 1e5114a..009c3ac 100644 (file)
@@ -150,19 +150,23 @@ public class NyARRasterThresholdAnalyzer_SlidePTile implements INyARRasterThresh
                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
@@ -186,72 +190,9 @@ public class NyARRasterThresholdAnalyzer_SlidePTile implements INyARRasterThresh
                        }\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