Revision 5493
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.api/src/main/java/org/gvsig/raster/lib/buffer/api/statistics/Statistics.java | ||
---|---|---|
79 | 79 |
* @return Valor medio |
80 | 80 |
*/ |
81 | 81 |
public double[] getMean(); |
82 |
|
|
82 |
|
|
83 | 83 |
/** |
84 | 84 |
* @return Gets median of bands |
85 | 85 |
*/ |
... | ... | |
107 | 107 |
public int getBandCount(); |
108 | 108 |
|
109 | 109 |
/** |
110 |
* Obtiene un valor de recorte de colas para un porcentaje dado. El valor ser? un array |
|
111 |
* bidimensional ([N?mero de bandas][2]) donde para cada banda se almacena el valor en |
|
112 |
* esa posici?n del recorte de colas. Este recorte consiste en ordenar los elementos del |
|
113 |
* raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando |
|
114 |
* desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo). |
|
115 |
* |
|
116 |
* @param percent Porcentaje de recorte |
|
117 |
* @param valueByBand array bidimensional de enteros o doubles. Depende del tipo de dato del raster. |
|
118 |
* @return El valor de recorte de colas para el porcentaje dado |
|
119 |
*/ |
|
120 |
public Object getTailTrimValue(double percent); |
|
121 |
|
|
122 |
/** |
|
123 |
* Obtiene un valor de recorte de colas para una posici?n dada. El valor ser? un array |
|
124 |
* bidimensional ([N?mero de bandas][2]) donde para cada banda se almacena el valor en |
|
125 |
* esa posici?n del recorte de colas. Este recorte consiste en ordenar los elementos del |
|
126 |
* raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando |
|
127 |
* desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo). |
|
128 |
* @param pos posici?n de recorte |
|
129 |
* @param valueByBand array bidimensional de enteros o doubles. Depende del tipo de dato del raster. |
|
130 |
* @return el valor de recorte de colas para la posici?n dada |
|
131 |
*/ |
|
132 |
public Object[] getTailTrimValue(int pos); |
|
133 |
|
|
134 |
/** |
|
110 | 135 |
* Obtiene el flag que informa de si las estad?sticas est?n calculadas o no. |
111 | 136 |
* @return true indica que est?n calculadas y false que no lo est?n |
112 | 137 |
*/ |
... | ... | |
142 | 167 |
*/ |
143 | 168 |
public Histogram getHistogram(); |
144 | 169 |
|
145 |
|
|
146 |
|
|
147 | 170 |
} |
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.api/src/main/java/org/gvsig/raster/lib/buffer/api/statistics/Histogram.java | ||
---|---|---|
118 | 118 |
// */ |
119 | 119 |
// public double[] getMax(); |
120 | 120 |
|
121 |
/** |
|
122 |
* Obtiene un valor de recorte de colas para un porcentaje dado. Este recorte consiste en ordenar los elementos del |
|
123 |
* raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando |
|
124 |
* desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo). |
|
125 |
* |
|
126 |
* @param percent Porcentaje de recorte |
|
127 |
* @return El valor de recorte de colas para el porcentaje dado |
|
128 |
*/ |
|
129 |
public Object getTailTrimValue(double percent); |
|
130 |
|
|
131 |
/** |
|
132 |
* Obtiene un valor de recorte de colas para una posici?n dada. Este recorte consiste en ordenar los elementos del |
|
133 |
* raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando |
|
134 |
* desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo). |
|
135 |
* @param pos posici?n de recorte |
|
136 |
* @return el valor de recorte de colas para la posici?n dada |
|
137 |
*/ |
|
138 |
public Object getTailTrimValue(int pos); |
|
139 |
|
|
121 | 140 |
} |
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.api/src/main/java/org/gvsig/raster/lib/buffer/api/statistics/StatisticsBand.java | ||
---|---|---|
109 | 109 |
* desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo). |
110 | 110 |
* |
111 | 111 |
* @param percent Porcentaje de recorte |
112 |
* @param valueByBand array bidimensional de enteros o doubles. Depende del tipo de dato del raster. |
|
113 | 112 |
* @return El valor de recorte de colas para el porcentaje dado |
114 | 113 |
*/ |
115 | 114 |
public Object getTailTrimValue(double percent); |
... | ... | |
124 | 123 |
public Object getTailTrimValue(int pos); |
125 | 124 |
|
126 | 125 |
/** |
127 |
* Devuelve el n?mero de valores de recorte de colas calculados. |
|
128 |
* @return N?mero de valores de recorte de colas calculados. |
|
129 |
*/ |
|
130 |
public int getTailTrimCount(); |
|
131 |
|
|
132 |
/** |
|
133 | 126 |
* Obtiene el flag que informa de si las estad?sticas est?n calculadas o no. |
134 | 127 |
* @return true indica que est?n calculadas y false que no lo est?n |
135 | 128 |
*/ |
... | ... | |
158 | 151 |
*/ |
159 | 152 |
public HistogramBand getHistogramBand(); |
160 | 153 |
|
154 |
|
|
155 |
|
|
161 | 156 |
} |
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.api/src/main/java/org/gvsig/raster/lib/buffer/api/statistics/HistogramBand.java | ||
---|---|---|
180 | 180 |
* @return |
181 | 181 |
*/ |
182 | 182 |
public double getMedian(); |
183 |
|
|
184 |
/** |
|
185 |
* Obtiene un valor de recorte de colas para un porcentaje dado. Este recorte consiste en ordenar los elementos del |
|
186 |
* raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando |
|
187 |
* desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo). |
|
188 |
* |
|
189 |
* @param percent Porcentaje de recorte |
|
190 |
* @return El valor de recorte de colas para el porcentaje dado |
|
191 |
*/ |
|
192 |
public Object getTailTrimValue(double percent); |
|
193 |
|
|
194 |
/** |
|
195 |
* Obtiene un valor de recorte de colas para una posici?n dada. Este recorte consiste en ordenar los elementos del |
|
196 |
* raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando |
|
197 |
* desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo). |
|
198 |
* @param pos posici?n de recorte |
|
199 |
* @return el valor de recorte de colas para la posici?n dada |
|
200 |
*/ |
|
201 |
public Object getTailTrimValue(int pos); |
|
183 | 202 |
} |
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/statistics/DefaultStatistics.java | ||
---|---|---|
101 | 101 |
} |
102 | 102 |
return result; |
103 | 103 |
} |
104 |
|
|
104 |
|
|
105 | 105 |
@Override |
106 | 106 |
public double[] getMedian() { |
107 | 107 |
double[] result = new double[statisticsBands.length]; |
... | ... | |
180 | 180 |
return histogram; |
181 | 181 |
} |
182 | 182 |
|
183 |
@Override |
|
184 |
public Object getTailTrimValue(double percent) { |
|
185 |
Object[] result = new Object[statisticsBands.length]; |
|
186 |
for (int i = 0; i < statisticsBands.length; i++) { |
|
187 |
result[i]=statisticsBands[i].getTailTrimValue(percent); |
|
188 |
} |
|
189 |
return result; |
|
190 |
} |
|
191 |
|
|
192 |
@Override |
|
193 |
public Object[] getTailTrimValue(int pos) { |
|
194 |
Object[] result = new Object[statisticsBands.length]; |
|
195 |
for (int i = 0; i < statisticsBands.length; i++) { |
|
196 |
result[i]=statisticsBands[i].getTailTrimValue(pos); |
|
197 |
} |
|
198 |
return result; |
|
199 |
} |
|
200 |
|
|
183 | 201 |
} |
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/statistics/DefaultHistogram.java | ||
---|---|---|
41 | 41 |
return histogramBands[band]; |
42 | 42 |
} |
43 | 43 |
|
44 |
@Override |
|
45 |
public Object getTailTrimValue(double percent) { |
|
46 |
Object[] result = new Object[histogramBands.length]; |
|
47 |
for (int i = 0; i < histogramBands.length; i++) { |
|
48 |
result[i]=histogramBands[i].getTailTrimValue(percent); |
|
49 |
} |
|
50 |
return result; |
|
51 |
} |
|
52 |
|
|
53 |
@Override |
|
54 |
public Object getTailTrimValue(int pos) { |
|
55 |
Object[] result = new Object[histogramBands.length]; |
|
56 |
for (int i = 0; i < histogramBands.length; i++) { |
|
57 |
result[i]=histogramBands[i].getTailTrimValue(pos); |
|
58 |
} |
|
59 |
return result; |
|
60 |
} |
|
61 |
|
|
44 | 62 |
// @Override |
45 | 63 |
// public long[][] getTable() { |
46 | 64 |
// table = new long[histogramBands.length][] |
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/statistics/DefaultStatisticsBand.java | ||
---|---|---|
145 | 145 |
|
146 | 146 |
@Override |
147 | 147 |
public Object getTailTrimValue(double percent) { |
148 |
// TODO Auto-generated method stub |
|
149 |
return null; |
|
148 |
return getHistogramBand().getTailTrimValue(percent); |
|
150 | 149 |
} |
151 | 150 |
|
152 | 151 |
@Override |
153 | 152 |
public Object getTailTrimValue(int pos) { |
154 |
// TODO Auto-generated method stub |
|
155 |
return null; |
|
153 |
return getHistogramBand().getTailTrimValue(pos); |
|
156 | 154 |
} |
157 | 155 |
|
158 |
@Override |
|
159 |
public int getTailTrimCount() { |
|
160 |
// TODO Auto-generated method stub |
|
161 |
return 0; |
|
162 |
} |
|
163 |
|
|
164 | 156 |
// @Override |
165 | 157 |
// public long getNumberOfCells() { |
166 | 158 |
// // TODO Auto-generated method stub |
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/statistics/DefaultHistogramBand.java | ||
---|---|---|
5 | 5 |
import java.util.List; |
6 | 6 |
|
7 | 7 |
import org.gvsig.raster.lib.buffer.api.Band; |
8 |
import org.gvsig.raster.lib.buffer.api.BufferManager; |
|
8 | 9 |
import org.gvsig.raster.lib.buffer.api.statistics.HistogramBand; |
9 | 10 |
import org.gvsig.raster.lib.buffer.api.statistics.HistogramClass; |
10 | 11 |
|
... | ... | |
120 | 121 |
|
121 | 122 |
@Override |
122 | 123 |
public double getMedian() { |
123 |
long halfn=0; |
|
124 |
if (getBandLenght()!=0){ |
|
125 |
halfn=getBandLenght()/2; |
|
126 |
} |
|
124 |
long halfn=getBandLenght()/2; |
|
125 |
return getUmpteenth(halfn); |
|
126 |
} |
|
127 |
|
|
128 |
/** |
|
129 |
* @param n |
|
130 |
* @return |
|
131 |
*/ |
|
132 |
private double getUmpteenth(long n) { |
|
127 | 133 |
long contValues=0; |
128 | 134 |
for (int i=0; i<histogramClasses.size(); i++){ |
129 | 135 |
HistogramClass histogramClass=histogramClasses.get(i); |
130 |
if (halfn==contValues){
|
|
136 |
if (n==contValues){ |
|
131 | 137 |
return histogramClass.getMin(); |
132 | 138 |
} |
133 | 139 |
long anteriorCont=contValues; |
134 | 140 |
contValues+=histogramClass.getValue(); |
135 |
if (halfn==contValues){
|
|
141 |
if (n==contValues){ |
|
136 | 142 |
return histogramClass.getMax(); |
137 | 143 |
} |
138 |
if (halfn<contValues){
|
|
144 |
if (n<contValues){ |
|
139 | 145 |
double median; |
140 | 146 |
if(histogramClass.getMax()-histogramClass.getMin()==0){ |
141 | 147 |
median = histogramClass.getMin(); |
142 | 148 |
} else { |
143 |
median=((halfn-anteriorCont)/(contValues-anteriorCont))*(histogramClass.getMax()-histogramClass.getMin());
|
|
149 |
median=((n-anteriorCont)/(contValues-anteriorCont))*(histogramClass.getMax()-histogramClass.getMin()); |
|
144 | 150 |
} |
145 | 151 |
return median; |
146 | 152 |
} |
... | ... | |
149 | 155 |
return 0; |
150 | 156 |
} |
151 | 157 |
|
158 |
/** |
|
159 |
* Adds value to histogram |
|
160 |
* |
|
161 |
* @param value |
|
162 |
*/ |
|
152 | 163 |
public void addValue(double value){ |
153 | 164 |
HistogramClass histogramClass = getHistogramClass(value); |
154 | 165 |
if(histogramClass == null){ |
... | ... | |
161 | 172 |
} |
162 | 173 |
} |
163 | 174 |
|
175 |
@Override |
|
176 |
public Object getTailTrimValue(double percent) { |
|
177 |
if(percent>100 || percent <0){ |
|
178 |
StringBuilder builder = new StringBuilder(); |
|
179 |
builder.append("Percent "); |
|
180 |
builder.append(percent); |
|
181 |
builder.append(" is out of range [0,100]"); |
|
182 |
throw new IllegalArgumentException(builder.toString()); |
|
183 |
} |
|
184 |
long lowPosition = Math.round(getBandLenght()*percent/100); |
|
185 |
long upperPosition = Math.round(getBandLenght()*(100-percent)/100); |
|
186 |
|
|
187 |
double[] result = new double[2]; |
|
188 |
|
|
189 |
result[0] = getUmpteenth(lowPosition); |
|
190 |
result[1] = getUmpteenth(upperPosition); |
|
191 |
return result; |
|
192 |
} |
|
193 |
|
|
194 |
@Override |
|
195 |
public Object getTailTrimValue(int pos) { |
|
196 |
long lowPosition = pos; |
|
197 |
long upperPosition = getBandLenght()-pos; |
|
198 |
|
|
199 |
double[] result = new double[2]; |
|
200 |
|
|
201 |
result[0] = getUmpteenth(lowPosition); |
|
202 |
result[1] = getUmpteenth(upperPosition); |
|
203 |
return result; |
|
204 |
} |
|
205 |
|
|
164 | 206 |
} |
Also available in: Unified diff