bicotiImagePixelInterpolator2D
bicotiImagePixelInterpolator2DLinear
bicotiImagePixelInterpolator2DLagrange
bicotiImagePixelInterpolator3D
bicotiImagePixelInterpolator3DLinear
bicotiImagePixelInterpolator3DLagrange
class bicotiImagePixelInterpolator3DLagrange<
class PixelType,
class PrecisionType = PixelType >
El template en PrecisionType es un tipo de pixel adecuado para obtener una buena precisión numérica, sin el costo de que la imagen a interpolar sea de este tipo ( PrecisionType ), que por lo general es mas costoso en terminos de memoria a utilizar. Es RESPONSABILIDAD DEL USUARIO contemplar este hecho y elegir un tipo adecuado de precisión numérica.
Por ejemplo si tenemos una bicotiImageImplementation3DArray<
unsigned
char > uno puede utilizar un bicotiImagePixelInterpolator3DLagrange<
unsigned
char >, como existe un default template
PrecisionType = PixelType en este caso, pero la precisión
lograda será pobre y el resultado será inservible. Pero si
se utiliza un interpolador del tipo
bicotiImagePixelInterpolator3DLagrange< unsigned
char, float >, como internamente la
cuentas se hacen con float se logra una mejor precisión y el resultado
tiene mas sentido. Observar que no hace falta que la imagen sea de float,
si no fuera así uno necesitaría tres veces mas memoria para
guardar la imagen en float en ves de unsigned char.
Si esta interesando en conocer mas sobre PrecisionType ir a Restricciones de Pixels y Criterios de Diseño.
Breve explicación del algoritmo matemático:
Dado un punto p ( punto rojo en la imagen ), considero F( p ) valor de pixel interpolado como lo indica la ecuación, siendo F( pi ) el valor de pixel en el punto pi.
void
bicotiImagePixelInterpolator3DLagrange(
bicotiImageImplementation3D< PixelType > * = NULL )
PixelType
operator(
) ( bicotiCoordinate< REAL > & )
Dado un punto, uno obtiene el "valor de pixel" interpolado usando este operador.