OSDN Git Service

git-svn-id: http://svn.sourceforge.jp/svnroot/nyartoolkit/NyARToolkit/trunk@761 7cac0...
[nyartoolkit-and/nyartoolkit-and.git] / lib / src / jp / nyatla / nyartoolkit / core / analyzer / raster / NyARRasterAnalyzer_Histogram.java
diff --git a/lib/src/jp/nyatla/nyartoolkit/core/analyzer/raster/NyARRasterAnalyzer_Histogram.java b/lib/src/jp/nyatla/nyartoolkit/core/analyzer/raster/NyARRasterAnalyzer_Histogram.java
deleted file mode 100644 (file)
index a4540d0..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-package jp.nyatla.nyartoolkit.core.analyzer.raster;\r
-\r
-import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.*;\r
-import jp.nyatla.nyartoolkit.core.raster.rgb.*;\r
-import jp.nyatla.nyartoolkit.core.types.*;\r
-/**\r
- * 画像のヒストグラムを計算します。\r
- * RGBの場合、(R+G+B)/3のヒストグラムを計算します。\r
- * \r
- * \r
- */\r
-public class NyARRasterAnalyzer_Histogram\r
-{\r
-       protected ICreateHistogramImpl _histImpl;\r
-       /**\r
-        * ヒストグラム解析の縦方向スキップ数。継承クラスはこのライン数づつ\r
-        * スキップしながらヒストグラム計算を行うこと。\r
-        */\r
-       protected int _vertical_skip;\r
-       \r
-       \r
-       public NyARRasterAnalyzer_Histogram(int i_raster_format,int i_vertical_interval) throws NyARException\r
-       {\r
-               if(!initInstance(i_raster_format,i_vertical_interval)){\r
-                       throw new NyARException();\r
-               }\r
-       }\r
-       protected boolean initInstance(int i_raster_format,int i_vertical_interval)\r
-       {\r
-               switch (i_raster_format) {\r
-               case  NyARBufferType.BYTE1D_B8G8R8_24:\r
-               case  NyARBufferType.BYTE1D_R8G8B8_24:\r
-                       this._histImpl = new NyARRasterThresholdAnalyzer_Histogram_BYTE1D_RGB_24();\r
-                       break;\r
-               case  NyARBufferType.INT1D_GRAY_8:\r
-                       this._histImpl = new NyARRasterThresholdAnalyzer_Histogram_INT1D_GRAY_8();\r
-                       break;\r
-               case  NyARBufferType.BYTE1D_B8G8R8X8_32:\r
-                       this._histImpl = new NyARRasterThresholdAnalyzer_Histogram_BYTE1D_B8G8R8X8_32();\r
-                       break;\r
-               case  NyARBufferType.BYTE1D_X8R8G8B8_32:\r
-                       this._histImpl = new NyARRasterThresholdAnalyzer_Histogram_BYTE1D_X8R8G8B8_32();\r
-                       break;\r
-               case  NyARBufferType.WORD1D_R5G6B5_16LE:\r
-                       this._histImpl = new NyARRasterThresholdAnalyzer_Histogram_WORD1D_R5G6B5_16LE();\r
-                       break;\r
-               case  NyARBufferType.INT1D_X8R8G8B8_32:\r
-                       this._histImpl = new NyARRasterThresholdAnalyzer_Histogram_INT1D_X8R8G8B8_32();\r
-                       break;\r
-               default:\r
-                       return false;\r
-               }\r
-               //初期化\r
-               this._vertical_skip=i_vertical_interval;\r
-               return true;\r
-       }       \r
-       \r
-       \r
-       public void setVerticalInterval(int i_step)\r
-       {\r
-               assert(this._vertical_skip>0);\r
-               this._vertical_skip=i_step;\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * o_histogramにヒストグラムを出力します。\r
-        * @param i_input\r
-        * @param o_histogram\r
-        * @return\r
-        * @throws NyARException\r
-        */\r
-       public void analyzeRaster(INyARRaster i_input,NyARHistogram o_histogram) throws NyARException\r
-       {\r
-               \r
-               final NyARIntSize size=i_input.getSize();\r
-               //最大画像サイズの制限\r
-               assert(size.w*size.h<0x40000000);\r
-               assert(o_histogram.length==256);//現在は固定\r
-\r
-               int[] h=o_histogram.data;\r
-               //ヒストグラム初期化\r
-               for (int i = o_histogram.length-1; i >=0; i--){\r
-                       h[i] = 0;\r
-               }\r
-               o_histogram.total_of_data=size.w*size.h/this._vertical_skip;\r
-               this._histImpl.createHistogram(i_input,0,0,size.w,size.h,o_histogram.data,this._vertical_skip);\r
-               return;\r
-       }\r
-       public void analyzeRaster(INyARRaster i_input,NyARIntRect i_area,NyARHistogram o_histogram) throws NyARException\r
-       {\r
-               \r
-               final NyARIntSize size=i_input.getSize();\r
-               //最大画像サイズの制限\r
-               assert(size.w*size.h<0x40000000);\r
-               assert(o_histogram.length==256);//現在は固定\r
-\r
-               int[] h=o_histogram.data;\r
-               //ヒストグラム初期化\r
-               for (int i = o_histogram.length-1; i >=0; i--){\r
-                       h[i] = 0;\r
-               }\r
-               o_histogram.total_of_data=i_area.w*i_area.h/this._vertical_skip;\r
-               this._histImpl.createHistogram(i_input,i_area.x,i_area.y,i_area.w,i_area.h,o_histogram.data,this._vertical_skip);\r
-               return;\r
-       }\r
-       \r
-       protected interface ICreateHistogramImpl\r
-       {\r
-               public void createHistogram(INyARRaster i_raster,int i_l,int i_t,int i_w,int i_h, int[] o_histogram,int i_skip);\r
-       }\r
-\r
-       class NyARRasterThresholdAnalyzer_Histogram_INT1D_GRAY_8 implements ICreateHistogramImpl\r
-       {\r
-               public void createHistogram(INyARRaster i_raster,int i_l,int i_t,int i_w,int i_h, int[] o_histogram,int i_skip)\r
-               {\r
-                       assert (i_raster.isEqualBufferType(NyARBufferType.INT1D_GRAY_8));\r
-                       final int[] input=(int[])i_raster.getBuffer();\r
-                       NyARIntSize s=i_raster.getSize();\r
-                       int skip=(i_skip*s.w-i_w);\r
-                       final int pix_count=i_w;\r
-                       final int pix_mod_part=pix_count-(pix_count%8);                 \r
-                       //左上から1行づつ走査していく\r
-                       int pt=(i_t*s.w+i_l);\r
-                       for (int y = i_h-1; y >=0 ; y-=i_skip){\r
-                               int x;\r
-                               for (x = pix_count-1; x >=pix_mod_part; x--){\r
-                                       o_histogram[input[pt++]]++;\r
-                               }\r
-                               for (;x>=0;x-=8){\r
-                                       o_histogram[input[pt++]]++;\r
-                                       o_histogram[input[pt++]]++;\r
-                                       o_histogram[input[pt++]]++;\r
-                                       o_histogram[input[pt++]]++;\r
-                                       o_histogram[input[pt++]]++;\r
-                                       o_histogram[input[pt++]]++;\r
-                                       o_histogram[input[pt++]]++;\r
-                                       o_histogram[input[pt++]]++;\r
-                               }\r
-                               //スキップ\r
-                               pt+=skip;\r
-                       }\r
-                       return;                 \r
-\r
-               }       \r
-       }\r
-       class NyARRasterThresholdAnalyzer_Histogram_INT1D_X8R8G8B8_32 implements ICreateHistogramImpl\r
-       {\r
-               public void createHistogram(INyARRaster i_raster,int i_l,int i_t,int i_w,int i_h, int[] o_histogram,int i_skip)\r
-               {\r
-                       assert (i_raster.isEqualBufferType( NyARBufferType.INT1D_X8R8G8B8_32));\r
-                       final int[] input=(int[])i_raster.getBuffer();\r
-                       NyARIntSize s=i_raster.getSize();\r
-                       int skip=(i_skip*s.w-i_w);\r
-                       final int pix_count=i_w;\r
-                       final int pix_mod_part=pix_count-(pix_count%8);                 \r
-                       //左上から1行づつ走査していく\r
-                       int pt=(i_t*s.w+i_l);\r
-                       for (int y = i_h-1; y >=0 ; y-=i_skip){\r
-                               int x,v;\r
-                               for (x = pix_count-1; x >=pix_mod_part; x--){\r
-                                       v=input[pt++];o_histogram[((v& 0xff)+(v& 0xff)+(v& 0xff))/3]++;\r
-                               }\r
-                               for (;x>=0;x-=8){\r
-                                       v=input[pt++];o_histogram[((v& 0xff)+(v& 0xff)+(v& 0xff))/3]++;\r
-                                       v=input[pt++];o_histogram[((v& 0xff)+(v& 0xff)+(v& 0xff))/3]++;\r
-                                       v=input[pt++];o_histogram[((v& 0xff)+(v& 0xff)+(v& 0xff))/3]++;\r
-                                       v=input[pt++];o_histogram[((v& 0xff)+(v& 0xff)+(v& 0xff))/3]++;\r
-                                       v=input[pt++];o_histogram[((v& 0xff)+(v& 0xff)+(v& 0xff))/3]++;\r
-                                       v=input[pt++];o_histogram[((v& 0xff)+(v& 0xff)+(v& 0xff))/3]++;\r
-                                       v=input[pt++];o_histogram[((v& 0xff)+(v& 0xff)+(v& 0xff))/3]++;\r
-                                       v=input[pt++];o_histogram[((v& 0xff)+(v& 0xff)+(v& 0xff))/3]++;\r
-                               }\r
-                               //スキップ\r
-                               pt+=skip;\r
-                       }\r
-                       return;                 \r
-               }       \r
-       }\r
-\r
-       \r
-       class NyARRasterThresholdAnalyzer_Histogram_BYTE1D_RGB_24 implements ICreateHistogramImpl\r
-       {\r
-               public void createHistogram(INyARRaster i_raster,int i_l,int i_t,int i_w,int i_h, int[] o_histogram,int i_skip)\r
-               {\r
-                       assert (\r
-                                       i_raster.isEqualBufferType(NyARBufferType.BYTE1D_B8G8R8_24)||\r
-                                       i_raster.isEqualBufferType(NyARBufferType.BYTE1D_R8G8B8_24));\r
-                       final byte[] input=(byte[])i_raster.getBuffer();\r
-                       NyARIntSize s=i_raster.getSize();\r
-                       int skip=(i_skip*s.w-i_w)*3;\r
-                       final int pix_count=i_w;\r
-                       final int pix_mod_part=pix_count-(pix_count%8);                 \r
-                       //左上から1行づつ走査していく\r
-                       int pt=(i_t*s.w+i_l)*3;\r
-                       for (int y = i_h-1; y >=0 ; y-=i_skip){\r
-                               int x;\r
-                               for (x = pix_count-1; x >=pix_mod_part; x--){\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=3;\r
-                               }\r
-                               for (;x>=0;x-=8){\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=3*8;\r
-                               }\r
-                               //スキップ\r
-                               pt+=skip;\r
-                       }\r
-                       return; \r
-               }\r
-       }\r
-\r
-       class NyARRasterThresholdAnalyzer_Histogram_BYTE1D_B8G8R8X8_32 implements ICreateHistogramImpl\r
-       {\r
-               public void createHistogram(INyARRaster i_raster,int i_l,int i_t,int i_w,int i_h, int[] o_histogram,int i_skip)\r
-               {\r
-               assert(i_raster.isEqualBufferType(NyARBufferType.BYTE1D_B8G8R8X8_32));\r
-                       final byte[] input=(byte[])i_raster.getBuffer();\r
-                       NyARIntSize s=i_raster.getSize();\r
-                       int skip=(i_skip*s.w-i_w)*4;\r
-                       final int pix_count=i_w;\r
-                       final int pix_mod_part=pix_count-(pix_count%8);                 \r
-                       //左上から1行づつ走査していく\r
-                       int pt=(i_t*s.w+i_l)*4;\r
-                       for (int y = i_h-1; y >=0 ; y-=i_skip){\r
-                               int x;\r
-                               for (x = pix_count-1; x >=pix_mod_part; x--){\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                               }\r
-                               for (;x>=0;x-=8){\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                               }\r
-                               //スキップ\r
-                               pt+=skip;\r
-                       }\r
-                       return; \r
-           }\r
-       }\r
-\r
-       class NyARRasterThresholdAnalyzer_Histogram_BYTE1D_X8R8G8B8_32 implements ICreateHistogramImpl\r
-       {\r
-               public void createHistogram(INyARRaster i_raster,int i_l,int i_t,int i_w,int i_h, int[] o_histogram,int i_skip)\r
-               {\r
-               assert(i_raster.isEqualBufferType(NyARBufferType.BYTE1D_X8R8G8B8_32));\r
-                       final byte[] input=(byte[])i_raster.getBuffer();\r
-                       NyARIntSize s=i_raster.getSize();\r
-                       int skip=(i_skip*s.w-i_w)*4;\r
-                       final int pix_count=i_w;\r
-                       final int pix_mod_part=pix_count-(pix_count%8);                 \r
-                       //左上から1行づつ走査していく\r
-                       int pt=(i_t*s.w+i_l)*4;\r
-                       for (int y = i_h-1; y >=0 ; y-=i_skip){\r
-                               int x;\r
-                               for (x = pix_count-1; x >=pix_mod_part; x--){\r
-                                       o_histogram[((input[pt+1]& 0xff)+(input[pt+2]& 0xff)+(input[pt+ 3]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                               }\r
-                               for (;x>=0;x-=8){\r
-                                       o_histogram[((input[pt+1]& 0xff)+(input[pt+2]& 0xff)+(input[pt+3]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+1]& 0xff)+(input[pt+2]& 0xff)+(input[pt+3]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+1]& 0xff)+(input[pt+2]& 0xff)+(input[pt+3]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+1]& 0xff)+(input[pt+2]& 0xff)+(input[pt+3]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+1]& 0xff)+(input[pt+2]& 0xff)+(input[pt+3]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+1]& 0xff)+(input[pt+2]& 0xff)+(input[pt+3]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+1]& 0xff)+(input[pt+2]& 0xff)+(input[pt+3]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                                       o_histogram[((input[pt+1]& 0xff)+(input[pt+2]& 0xff)+(input[pt+3]& 0xff))/3]++;\r
-                                       pt+=4;\r
-                               }\r
-                               //スキップ\r
-                               pt+=skip;\r
-                       }\r
-                       return; \r
-           }\r
-       }\r
-\r
-       class NyARRasterThresholdAnalyzer_Histogram_WORD1D_R5G6B5_16LE implements ICreateHistogramImpl\r
-       {\r
-               public void createHistogram(INyARRaster i_raster,int i_l,int i_t,int i_w,int i_h, int[] o_histogram,int i_skip)\r
-               {\r
-               assert(i_raster.isEqualBufferType(NyARBufferType.WORD1D_R5G6B5_16LE));\r
-                       final short[] input=(short[])i_raster.getBuffer();\r
-                       NyARIntSize s=i_raster.getSize();\r
-                       int skip=(i_skip*s.w-i_w);\r
-                       final int pix_count=i_w;\r
-                       final int pix_mod_part=pix_count-(pix_count%8);                 \r
-                       //左上から1行づつ走査していく\r
-                       int pt=(i_t*s.w+i_l);\r
-                       for (int y = i_h-1; y >=0 ; y-=i_skip){\r
-                               int x,v;\r
-                               for (x = pix_count-1; x >=pix_mod_part; x--){\r
-                                       v =(int)input[pt++]; o_histogram[(((v & 0xf800) >> 8) + ((v & 0x07e0) >> 3) + ((v & 0x001f) << 3))/3]++;\r
-                               }\r
-                               for (;x>=0;x-=8){\r
-                                       v =(int)input[pt++]; o_histogram[(((v & 0xf800) >> 8) + ((v & 0x07e0) >> 3) + ((v & 0x001f) << 3))/3]++;\r
-                                       v =(int)input[pt++]; o_histogram[(((v & 0xf800) >> 8) + ((v & 0x07e0) >> 3) + ((v & 0x001f) << 3))/3]++;\r
-                                       v =(int)input[pt++]; o_histogram[(((v & 0xf800) >> 8) + ((v & 0x07e0) >> 3) + ((v & 0x001f) << 3))/3]++;\r
-                                       v =(int)input[pt++]; o_histogram[(((v & 0xf800) >> 8) + ((v & 0x07e0) >> 3) + ((v & 0x001f) << 3))/3]++;\r
-                                       v =(int)input[pt++]; o_histogram[(((v & 0xf800) >> 8) + ((v & 0x07e0) >> 3) + ((v & 0x001f) << 3))/3]++;\r
-                                       v =(int)input[pt++]; o_histogram[(((v & 0xf800) >> 8) + ((v & 0x07e0) >> 3) + ((v & 0x001f) << 3))/3]++;\r
-                                       v =(int)input[pt++]; o_histogram[(((v & 0xf800) >> 8) + ((v & 0x07e0) >> 3) + ((v & 0x001f) << 3))/3]++;\r
-                                       v =(int)input[pt++]; o_histogram[(((v & 0xf800) >> 8) + ((v & 0x07e0) >> 3) + ((v & 0x001f) << 3))/3]++;\r
-                               }\r
-                               //スキップ\r
-                               pt+=skip;\r
-                       }\r
-                       return; \r
-           }\r
-       }\r
-\r
-       public static void main(String[] args)\r
-       {\r
-               try{\r
-                       NyARRgbRaster raster=new NyARRgbRaster(100,100,NyARBufferType.WORD1D_R5G6B5_16LE);\r
-                       short[] buf=(short[])raster.getBuffer();\r
-                       for(int i=0;i<100;i++){\r
-                               for(int i2=0;i2<100;i2++){\r
-                                       buf[(i*100+i2)+0]=(short)(3); //buf[(i*100+i2)*3+1]=buf[(i*100+i2)*3+2]=(byte)i2;\r
-                               }\r
-                       }\r
-                       NyARIntRect rect=new NyARIntRect();\r
-                       rect.x=2;rect.y=2;rect.h=10;rect.w=10;\r
-                       NyARRasterAnalyzer_Histogram ha=new NyARRasterAnalyzer_Histogram(raster.getBufferType(),1);\r
-                       NyARHistogram h=new NyARHistogram(256);\r
-                       ha.analyzeRaster(raster,rect, h);\r
-//                     ha.analyzeRaster(raster, h);\r
-                       return;\r
-                       \r
-               }catch(Exception e){\r
-                       e.printStackTrace();\r
-               }\r
-       }\r
-\r
-}
\ No newline at end of file