OSDN Git Service

git-svn-id: http://svn.sourceforge.jp/svnroot/nyartoolkit/NyARToolkit/trunk@648 7cac0...
[nyartoolkit-and/nyartoolkit-and.git] / lib / src / jp / nyatla / nyartoolkit / core / types / NyARHistogram.java
1 package jp.nyatla.nyartoolkit.core.types;\r
2 \r
3 /**\r
4  * ヒストグラムを格納するクラスです。\r
5  */\r
6 public class NyARHistogram\r
7 {\r
8         /**\r
9          * サンプリング値の格納変数\r
10          */\r
11         public final int[] data;\r
12         /**\r
13          * 有効なサンプリング値の範囲。[0-data.length-1]\r
14          */\r
15         public int length;\r
16         /**\r
17          * 有効なサンプルの総数 data[i]\r
18          */\r
19         public int total_of_data;\r
20         \r
21         \r
22         \r
23         public NyARHistogram(int i_length)\r
24         {\r
25                 this.data=new int[i_length];\r
26                 this.length=i_length;\r
27                 this.total_of_data=0;\r
28         }\r
29         /**\r
30          * 区間i_stからi_edまでの総データ数を返します。\r
31          * @param i_st\r
32          * @param i_ed\r
33          * @return\r
34          */\r
35         public int getTotal(int i_st,int i_ed)\r
36         {\r
37                 assert(i_st<i_ed && i_ed<this.length);\r
38                 int result=0;\r
39                 int[] s=this.data;\r
40                 for(int i=i_st;i<=i_ed;i++){\r
41                         result+=s[i];\r
42                 }\r
43                 return result;\r
44         }\r
45         /**\r
46          * 指定したi_pos未満サンプルを0にします。\r
47          * @param i_pos\r
48          */\r
49         public void lowCut(int i_pos)\r
50         {\r
51                 int s=0;\r
52                 for(int i=0;i<i_pos;i++){\r
53                         s+=this.data[i];\r
54                         this.data[i]=0;\r
55                 }\r
56                 this.total_of_data-=s;\r
57         }\r
58         /**\r
59          * 指定したi_pos以上のサンプルを0にします。\r
60          * @param i_pos\r
61          */\r
62         public void highCut(int i_pos)\r
63         {\r
64                 int s=0;\r
65                 for(int i=this.length-1;i>=i_pos;i--){\r
66                         s+=this.data[i];\r
67                         this.data[i]=0;\r
68                 }\r
69                 this.total_of_data-=s;\r
70         }\r
71         /**\r
72          * 最小の値が格納されているサンプル番号を返します。\r
73          */\r
74         public int getMinSample()\r
75         {\r
76                 int[] data=this.data;\r
77                 int ret=this.length-1;\r
78                 int min=data[ret];\r
79                 for(int i=this.length-2;i>=0;i--)\r
80                 {\r
81                         if(data[i]<min){\r
82                                 min=data[i];\r
83                                 ret=i;\r
84                         }\r
85                 }\r
86                 return ret;\r
87         }\r
88         /**\r
89          * サンプルの中で最小の値を返します。\r
90          * @return\r
91          */\r
92         public int getMinData()\r
93         {\r
94                 return this.data[this.getMinSample()];\r
95         }\r
96         /**\r
97          * 平均値を計算します。\r
98          * @return\r
99          */\r
100         public int getAverage()\r
101         {\r
102                 long sum=0;\r
103                 for(int i=this.length-1;i>=0;i--)\r
104                 {\r
105                         sum+=this.data[i]*i;\r
106                 }\r
107                 return (int)(sum/this.total_of_data);\r
108         }\r
109         \r
110 }\r