5 - Fachadas


5.6 - Neighbour Filter Facade

    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 :


Figura 5.6.2

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