3 - Acceso Standard


3.3 - Extrapolador de Imágenes.

    Los extrapoladores de imágenes son clases que permiten estimar puntos que están fuera de la imagen.
Son similares a los interpoladores, pero para puntos exteriores. La idea es implementarlos como una estrategia, es decir una clase que tiene una referencia a una imagen, a la cual podemos preguntar por valores de pixeles con cualquier coordenada, dentro o fuera de la imagen.


Figura 3.3.1

La figura 3.3.1 muestra una imagen 2D 6 x 4 , en ella, el rango de las coordenadas es :

x0 >= 0 ,  x0 <= 5
 x1 >= 0 ,  x1 <= 3
Pedemos pedirle a la imagen el pixel ubicado en ( 2 , 1 ) por ejemplo, pero no el ( 6 , 4 ) porque no existe.
Sin embargo la estrategia de extrapolación permite extender el rango de las coordenadas de menos infinito a mas infinito. Si creamos una estrategia de extrapolación podemos pedirle un pixel con cualquier coordenada.
La estrategia de extrapolación puede verse como una extensión nfinita de la imagen.

Figura 3.3.2

Una estrategia de extrapolación necesita tener una referencia a la imagen de la correspondiente dimensión y una función que me permita leer el valor de determinado punto ( el operador que aparece en la figura ).
Puedo hacer algo del tipo:

        bicotiImageImplementation2D< int > * ptr_ima;   // declaro un puntero a una imagen 2D

Hago algo con la imagen ( primero la creo ) y luego :

          bicotiImageExtrapolationStrategy2D< int > strategy;
          strategy.SetImplementaion( ptr_ima );

Creo una estrategia de extrapolación y luego uso la función SetImplementation  para setearle la imagen ( pasandole un puntero). Hay 2 cosas para observar aquí, primero que el template de la estrategia es el tipo de pixel de la imagen y por último, realmente no podemos instanciar una estrategia 2D ( es abstracta ) sino una de sus especializaciones.

Luego podemos pedir el valor de un pixel cualquiera:

         pixel = strategy( 2, 3 );

Está en la imagen, entonces da el valor del pixel en ( 2 , 3 ) 1 en el ejemplo.

         pixel = strategy( 124, 345 );

No está en la imagen , lo que devuelva depende de la estrategia concreta.

Hemos implementado 4 tipos de estrategias que parecen tener sentido en las aplicaciones.

Constant

    Se pone en todo el exterior un valor constante que es seteado por el usuario.

          bicotiImageExtrapolationStrategy2DConstant< int > strategy( 4 );
          strategy.SetImplementaion( ptr_ima );

    En este ejemplo, se pone en todo el exterior un 4. Como se muestra en la figura 3.3.3.


Figura 3.3.3

Equal

    Se pone en el exterior el mismo valor que el pixel más proximo dentro de la imagen.
    Es decir , si la matrí es 2D.
            A la izquierda, copio la primer columna.
            A la derecha, copio la última columna.
            Arriba, copio la primer fila.
            Abajo, copio la última fila.

          bicotiImageExtrapolationStrategy2DEqual< int > strategy;
          strategy.SetImplementaion( ptr_ima );

    Este ejemplo se muestra en la figura 3.3.4.


Figura 3.3.4

Simetric

    Se hace una simetría respecto a la fila o columna más cercana.
    Es decir , si la matrí es 2D.
            A la izquierda, copio la segunda columna.
            A la derecha, copio la penúltima columna.
            Arriba, copio la segunda fila.
            Abajo, copio la peúltima fila.

          bicotiImageExtrapolationStrategy2DSimetric< int > strategy;
          strategy.SetImplementaion( ptr_ima );

    Este ejemplo se muestra en la figura 3.3.5.


Figura 3.3.5

Ciclic

    Se completa la imagen como si fuera cerrada por arriba y por abajo, como si fuera cíclica.
    Es decir , si la matrí es 2D.
            A la izquierda, copio la última columna.
            A la derecha, copio la primer columna.
            Arriba, copio la última fila.
            Abajo, copio la primer fila.

          bicotiImageExtrapolationStrategy2DCiclic< int > strategy;
          strategy.SetImplementaion( ptr_ima );

    Este ejemplo se muestra en la figura 3.3.6.


Figura 3.3.6



Para una descripción más detallada de la clases ver :

bicotiImageExtrapolationStrategy
    bicotiImageExtrapolationStrategy2D
      bicotiImageExtrapolationStrategy2DConstant
      bicotiImageBorderStrategy2DEqual
      bicotiImageBorderStrategy2DSimetric
      bicotiImageBorderStrategy2DCiclic
    bicotiImageExtrapolationStrategy3D
      bicotiImageBorderStrategy3DConstant
      bicotiImageBorderStrategy3DEqual
      bicotiImageBorderStrategy3DSimetric
      bicotiImageBorderStrategy3DCiclic