La fachada de
NeighbourFilter Proporciona una forma más "amigable" de usar
la funcionalidad de bicotiNeighbourFilter.
Como se muestra en la figura 5.6.2
la fachada tiene referencias a :
Cuando creamos la fachada del filtro debemos pasarle la referencia a la imagen funete ( ptr_ima_src ). Todas las demás referencias se ponen en NULL .
Todos estos objetos son necesarios para poder realizar
un filtrado de vecindad. La fachada nos provee funciones para hacerlo de
forma más sencilla.
Por ejemplo con la funciones Build podemos crear el filtro
y seleccionar la función que queremos.
Con BuildLinearFilterCreamos un filtro con una función
lineal.
Luego tenemos funciones para seleccionar varias estrategias
de extrapolación y la función Filter para realizar el filtrado.
Supongamos que tenemos una imagen 2D de enteros.
bicotiImageImplementation2DArray< int > * ptr_ima_1;
Cremos la fachada para el filtro :
bicotiNeighbourFilterFacade2DSingle< int , float > fachada( ptr_ima_1 );
Como se muestra en la figura 5.6.1, hay especializaciones de la fachada porque algunas funciones dependen de la dimensión o de si el pixel es básico o vectorial.
Figura 5.6.1
En este ejemplo tenemos una imagen 2D de tipo básico,
por eso instanciamos una fachada 2D simple.
La fachada tiene 2 templates, el primero es el tipo de
pixel de la imagen y el segundo es el tipo con el que se hacen las cuentas,
en este caso se convierten los pixeles de enteros a flotantes se hacen
las cuentas con flotantes y se convierte el resultado a entero.
Dependiendo de que tipo de función se trate valdrá
la pena o no usar una precisión más alta, por defecto se
toma la misma precisión que el pixel.
Ahora si queremos crear un filtro lineal con una ventana de tamaño 3 hacemos:
fachada.BuildLinearFilter( 3 );
Ahora tengo acceso al Kernel.
for ( i
= 1, i < 3 ; i ++ )
for ( j = 1, j < 3 ; j ++ )
(* fachada.GetKernel( ) )( i , j ) = ( 1 / 9 );
Pongo 1 / 9 en cada lugar del Kernel, para hacer un filtro que calcule el valor medio
Ahora selecciono una estrategia de extrapolación "simétrica"
fachada.UseExtrapolationStrategySimetric( );
Ahora puedo correr el filtro
fachada.Filter( );
Puedo obtener el resultado haciendo:
ptr_ima_res
= fachada.GetResult( );
Ver más detalles sobre las clases en :
bicotiNeighbourFilterFacade
bicotiNeighbourFilterFacade2D
bicotiNeighbourFilterFacade2DSingle
bicotiNeighbourFilter2DVectorial
bicotiNeighbourFilter3D
bicotiNeighbourFilter3DSingle
bicotiNeighbourFilter3DVectorial