Statistics
| Revision:

gvsig-raster / org.gvsig.raster.cache / trunk / org.gvsig.raster.cache / org.gvsig.raster.cache.lib.api / src / main / java / org / gvsig / raster / cache / buffer / BufferInterpolation.java @ 1023

History | View | Annotate | Download (4.99 KB)

1
package org.gvsig.raster.cache.buffer;
2

    
3
import org.gvsig.raster.cache.buffer.exception.ProcessInterruptedException;
4
import org.gvsig.raster.cache.buffer.task.IncrementableTask;
5

    
6
/**
7
 * Interface implemented by a buffer interpolation object 
8
 * 
9
 * @author Nacho Brodin (nachobrodin@gmail.com)
10
 */
11
public interface BufferInterpolation extends IncrementableTask {
12
        public final static int INTERPOLATION_Undefined        = 0;
13
        public final static int INTERPOLATION_NearestNeighbour = 1;
14
        public final static int INTERPOLATION_Bilinear         = 2;
15
        public final static int INTERPOLATION_InverseDistance  = 3;
16
        public final static int INTERPOLATION_Bicubic          = 4;
17
        public final static int INTERPOLATION_BSpline          = 5;
18
        
19
        /**
20
         * Get the supersampled buffer on a IRasterBuffer
21
         * @return
22
         * @throws ProcessInterruptedException 
23
         */
24
        public Buffer getSupersampledScrolledNearestNeighbour(double[] superSampStep, int w, int h) throws ProcessInterruptedException;
25
        
26
        public Buffer getSupersampledScrolledBilinearInterpolation(double[] superSampStep, int w, int h) throws ProcessInterruptedException;
27
        
28
        /**
29
         * Ajusta el raster al ancho y alto solicitado por el vecino m?s cercano. Promedia el valor de dos
30
         * pixeles contiguos.
31
         * @param w Nuevo ancho
32
         * @param h Nuevo alto
33
         */
34
        public Buffer adjustRasterNearestNeighbourInterpolation(int w, int h) throws ProcessInterruptedException;
35

    
36
        /**
37
         * Ajusta el raster al ancho y alto solicitado ajustando con una interpolaci?n bilineal. Promedia
38
         * el valor de cuatro pixeles adyacentes.
39
         * <P>
40
         * Para cada pixel del raster A:(x, y) obtiene el B:(x + 1, y), C:(x, y + 1), D:(x + 1, y + 1)
41
         * Para cada valor del kernel se calcula un valor 'd' que es un peso dependiendo de su posici?n.
42
         * Este peso depende de la posici?n del pixel destino dentro del origen. La posici?n del pixel destino
43
         * en el origen es un valor decimal que puede ir de 0 a 1. Si est? muy pegado a la esquina superior
44
         * izquierda estar? cercano a 0 y si est? muy pegado a la esquina inferior derecha estar? cercano a 1.
45
         * Este valor est? representado por 'dx' y 'dy'. 
46
         * </P>
47
         * <P>
48
         * Los pesos aplicados son a
49
         * <UL> 
50
         * <LI>A (1-dx) * (1-dy)</LI>
51
         * <LI>B dx * (1-dy)</LI>
52
         * <LI>C (1-dx) * dy</LI>
53
         * <LI>D dx * dy</LI>
54
         * </UL>
55
         * La variable 'z' contiene el valor acumulado de cada peso por el valor del pixel.
56
         * La variable 'n' contiene el valor acumulado de los pesos de los cuatro pixeles.
57
         * El valor final del pixel ser? 'z/n', es decir un promedio del valor de los cuatro teniendo
58
         * en cuenta el peso de cada uno.
59
         * </P>
60
         * @param w Nuevo ancho del buffer de salida
61
         * @param h Nuevo alto del buffer de salida
62
         */
63
        public Buffer adjustRasterBilinearInterpolation(int w, int h) throws ProcessInterruptedException;
64

    
65
        /**
66
         * Ajusta el raster al ancho y alto solicitado ajustando con una interpolaci?n de distancia inversa.
67
         * Asigna el valor de un pixel en funci?n inversa de la distancia.
68
         * <P>
69
         * Para cada pixel del raster A:(x, y) obtiene el B:(x + 1, y), C:(x, y + 1), D:(x + 1, y + 1)
70
         * Para cada valor del kernel se calcula un valor 'd' que es un peso dependiendo de su posici?n.
71
         * Este peso ser? dependiente de la posici?n del pixel destino dentro del origen. La posici?n del pixel destino
72
         * en el origen es un valor decimal que puede ir de 0 a 1. Si est? muy pegado a la esquina superior
73
         * izquierda estar? cercano a 0 y si est? muy pegado a la esquina inferior derecha estar? cercano a 1.
74
         * Este valor est? representado por 'dx' y 'dy'. En este caso, y a diferencia del m?todo
75
         * bilinear el peso vendr? representado por la inversa de la distancia entre la posici?n 
76
         * dentro del pixel y el origen del mismo.
77
         * </P>
78
         * <P>
79
         * Los pesos aplicados son a
80
         * <UL> 
81
         * <LI>A  1 / sqrt((1-dx) * (1-dy))</LI>
82
         * <LI>B  1 / sqrt(dx * (1-dy))</LI>
83
         * <LI>C  1 / sqrt((1-dx) * dy)</LI>
84
         * <LI>D  1 / sqrt(dx * dy)</LI>
85
         * </UL>
86
         * La variable 'z' contiene el valor acumulado de cada peso por el valor del pixel.
87
         * La variable 'n' contiene el valor acumulado de los pesos de los cuatro pixeles.
88
         * El valor final del pixel ser? 'z/n', es decir un promedio del valor de los cuatro teniendo
89
         * en cuenta el peso de cada uno.
90
         * </P>
91
         * @param w Nuevo ancho del buffer de salida
92
         * @param h Nuevo alto del buffer de salida
93
         */
94
        public Buffer adjustRasterInverseDistanceInterpolation(int w, int h) throws ProcessInterruptedException;
95
        /**
96
         * Ajusta el raster al ancho y alto solicitado ajustando con una interpolaci?n BSpline. Promedia
97
         * el valor de cuatro pixeles adyacentes.
98
         * @param w Nuevo ancho
99
         * @param h Nuevo alto
100
         */
101
        public Buffer adjustRasterBSplineInterpolation(int w, int h) throws ProcessInterruptedException;
102

    
103
        /**
104
         * Ajusta el raster al ancho y alto solicitado ajustando con una interpolaci?n de spline bicubica.
105
         * @param w Nuevo ancho
106
         * @param h Nuevo alto
107
         */
108
        public Buffer adjustRasterBicubicSplineInterpolation(int w, int h) throws ProcessInterruptedException;
109

    
110
        /**
111
         * Obtiene el porcentaje del proceso de interpolacion
112
         * @return
113
         */
114
        public int getPercent();
115
}