bicotiImageIterator

     Clases

bicotiImageIterator
        bicotiImageIterator2D
                    bicotiImageIterator2DArray
                    bicotiImageIterator2DSparse
        bicotiImageIterator3D
                    bicotiImageIterator3DArray
                    bicotiImageIterator3DLinear
 

     Templates Clases

PixelType


class bicotiImageIterator < class PixelType >



 Public Methods

  PixelType & operator * ( )
  virtual void operator ++ ( int ) = 0
  virtual void operator -- ( int ) = 0
  virtual void operator += ( unsigned ) = 0
  virtual void operator -= ( unsigned ) = 0

virtual void First ( ) = 0
virtual void Last ( ) = 0
boolIsDone ( )

PixelType * GetCurrentPixel ( )
virtual void SetCurrentPixel ( PixelType ) = 0

  virtual bicotiCoordinate< INTEGER > GetCurrentCoordinateInteger ( ) = 0
  virtual bicotiCoordinate< REAL > GetCurrentCoordinateReal ( ) = 0
 



PixelType & operator * ( )

        Operador para "desreferenciar al iterador". Si vemos al iterador como un puntero a un pixel de la imagen, * iterador me da ese pixel.
Por ejemplo en la imagen 2D de la figura.


Figura 3.1.10

Si hacemos :
                                   PixelType pix;
                                   pix = * iterator;
obtenemos pix = 2

Por lo general trabajamos con un puntero a un iterador, por lo tanto lo más usual de ver es :

                                   pix = ** ptr_iterator;

Donde ptr_iterator es un puntero a un iterador, entonces *ptr_iterator es un iterador.

Este operador es bidireccional, con lo que podemos utilizarlo también para escribir sobre el punto donde estoy parado.
Por ejemplo si en la figura 3.1.10 quiero cambiar el 2 al que apunto por un 5, hago :

                                   * iterator = 5 ;



void operator ++ ( int )

         Este operador mueve al iterador un lugar. Hacia donde es el movimiento depende de la estrategia de borde elegida, pero el comportamiento por defecto y el que será usado en la gran mayoría de los casos es el que se indica en la figura 3.1.11.


Figura 3.1.11

En general si tenemos una imagen ND, con :
                                 x_0_sise = dim_x_0       -- columnas
                                 x_1_sise = dim_x_1       -- filas
                                 x_2_sise = dim_x_2       -- profundidad
                                             ...
                                 x_N-1_sise = dim_x_N-1

Incrementando primero X0 hasta que X0 = dim_x_0 -1 , luego incremento X1 y pongo X0 = 0 , cuando llego a X1 = x_1_dim-1 incremento X2  y así susecivamente. Es decir se hace un recorrido por filas incrementando la profundidad cuando se llega al último elemneto del plano.
En el ejemplo de la figura, estoy parado en ( 3 , 1 )  , pix  = 2, si hacemos :

                iterator ++ ;
                pix = * iterator;    //  obtengo pix = 1
                iterator ++ ;
                pix = * iterator;    //  obtengo pix = 9

Si tenemos un puntero a iterador hay que hacer :

                ( * ptr_iterator ) ++ ;
                pix = ** ptr_iterator;    //  obtengo pix = 1

Cuando se ha llegado al final, ( X0 = x_0_dim -1 , X1 = x_1_dim - 1, X2 = x_2_dim - 1 , ... ) este operador ya no moverá al iterador.

En el ejemplo de la figura 3.1.11, si estoy en el último lugar ( 4 , 3 ) y hago:

                pix = * iterator;    //  obtengo pix = 2
                iterator ++ ;
                pix = * iterator;    //  vuelvo a obtener pix = 2

Esta función es virtual pura en esta clase.



void operator -- ( int )

        Este operador mueve al iterador un lugar pero en sentido contrario al ++ , también depende de la estrategia de borde elegida, pero lo más usual ( el comportamiento por defecto ) es el que se muestra en
la figura.


Figura 3.1.12

Decrementando primero X0 hasta que X0 = 0 , luego decremento X1 y pongo X0 = x_0_dim - 1 , cuando llego a X1 = 0 decremento X2  y así susecivamente.
En el ejemplo de la figura, estoy parado en ( 1 , 1 )  , pix  = 4, si hacemos :

                iterator -- ;
                pix = * iterator;    //  obtengo pix = 1
                iterator -- ;
                pix = * iterator;    //  obtengo pix = 4

Si tenemos un puntero a iterador hay que hacer :

                ( * ptr_iterator ) -- ;
                pix = ** ptr_iterator;    //  obtengo pix = 1

Cuando se ha llegado al principio, ( X0 = 0 , X1 = 0, X2 = 0 , ... ) este operador ya no moverá al iterador.

En el ejemplo de la figura 3.1.12, si estoy en el primer lugar ( 0 , 0 ) y hago:

                pix = * iterator;    //  obtengo pix = 0
                iterator -- ;
                pix = * iterator;    //  vuelvo a obtener pix = 0

Esta función es virtual pura en esta clase.



void operator += ( unsigned )

        Este operador mueve al iterador más de un lugar hacia la derecha.
        Por ejemplo, hacer :
                                          iterador += 2;
        es quivalente a :
                                          iterator ++;
                                          iterator ++;

        El sentido del movimiento depende de la estrategia de borde elegida.

        Esta función es virtual pura en esta clase.



void operator -= ( unsigned )

        Este operador mueve al iterador más de un lugar hacia la izquierda.
        Por ejemplo, hacer :
                                          iterador -= 2;
        es quivalente a :
                                          iterator --;
                                          iterator --;

        El sentido del movimiento depende de la estrategia de borde elegida.

        Esta función es virtual pura en esta clase.



void First ( )

       Pone el iterador en el primer lugar de la imagen , que en gnereral es el de coordenadas ( 0, 0, ..., 0 )
        pero pueden setearse algunos parámetros del iterador para que comienze en otro punto.
        En el jemplo de la figura 3.1.13, estoy en el punto de coordenadas ( 5 , 1 ).


Figura 3.1.13

        Si hago :
                        pix = * iterator;   // obtengo pix = 1
                        iterator.First( );
                        pix = * iterator;   // obtengo pix = 2

        Esta función es virtual pura en esta clase.



void Last ( )

       Pone el iterador en el último lugar de la imagen , que en gnereral es el de coordenadas
        ( dim_x_0 - 1, dim_x_1 - 1 , ..., dim_x_N - 1 ) pero pueden setearse algunos parámetros
        del iterador para que termine en otro punto.
        En el jemplo de la figura 3.1.14, estoy en el punto de coordenadas ( 5 , 1 ).


Figura 3.1.14

        Si hago :
                        pix = * iterator;   // obtengo pix = 1
                        iterator.Last( );
                        pix = * iterator;   // obtengo pix = 2

        Esta función es virtual pura en esta clase.



bool IsDone ( )

       Esta función booleana indica si se llegó al final de la imagen, esto depende de dos cosas , del punto
        donde esté parado y hacia donde me intente mover.
        Por ejemplo si estoy parado en el penúltimo punto de la imagen de la figura 3.1.14
        y hago :
                           pix = * iterator ;   // obtengo pix = 7
                           fin = iterator.IsDone ( )  // obtengo fin = false;
                           iterator ++;

                            pix = * iterator ;   // obtengo pix = 2
                           fin = iterator.IsDone ( )  // obtengo fin = false;
                           iterator ++;

                            pix = * iterator ;   // obtengo pix = 2 , no se mueve
                           fin = iterator.IsDone ( )  // obtengo fin = true;

        Análogamente si estoy parado en el segundo punto de la imagen de la figura 3.1.14
        y hago :
                           pix = * iterator ;   // obtengo pix = 0
                           fin = iterator.IsDone ( )  // obtengo fin = false;
                           iterator --;

                            pix = * iterator ;   // obtengo pix = 2
                           fin = iterator.IsDone ( )  // obtengo fin = false;
                           iterator --;

                            pix = * iterator ;   // obtengo pix = 2 , no se mueve
                           fin = iterator.IsDone ( )  // obtengo fin = true;



PixelType * GetCurrentPixel ( )

        Es similar al operador * , con la única salvedad que aquí se retorna una referencia ( un puntero ) al
      pixel donde estoy parado.
      Por ejemplo en la figura 3.1.10 estoy parado en ( 4 , 1 ), si hago :

               pix = * ( * iterator ) ;   // obtengo pix = 2

       Si tengo un puntero a iterador , tengo que hacer :

               pix = * ( ** ptr_iterator ) ;



void SetCurrentPixel ( PixelType )

        Sirve para escribir sobre el punto actual.
        Por ejemplo si en la situación de la figura 3.1.10 hacemos :

                   iterator.SetCurrentPixel( 10 );

        Pongo un 10 en lugar del 2.
        Esto es lo mismo que hacer :

                    * iterator = 10 ;



bicotiCoordinate< INTEGER > GetCurrentCoordinateInteger ( )

        Devuelve una coordenada de enteros que indica el punto donde estamos actualmente parados.
      Por ejemplo si estamos en la situación de la figura 3.1.10 . Parados en el punto de coordenadas
      ( 4 , 1 ) de una imagen 2D.
      Si Hacemos :

                   bicotiCoordinate< INTEGER >  coord( 2 ) ;  // defino una coordenada 2D
                   coord = iterator.GetCurrentCoordinateInteger( );

                    fila = coord(1);         // obtengo fila = 1
                    columna = coord(0);  // obtengo columna = 4

    Ver bicotiCoordinate para más detalles sobre las coordenadas.
    Esta función es virtual pura en esta clase.



bicotiCoordinate< REAL > GetCurrentCoordinateReal ( )

        Devuelve una coordenada de reales que indica el punto donde estamos actualmente parados.
      Por ejemplo si estamos en la situación de la figura 3.1.10 . Parados en el punto de coordenadas
      ( 4 , 1 ) de una imagen 2D.
      Si Hacemos :

                   bicotiCoordinate< REAL >  coord( 2 ) ;  // defino una coordenada 2D
                   coord = iterator.GetCurrentCoordinateInteger( );

                    fila = coord(1);         // obtengo fila = 1
                    columna = coord(0);  // obtengo columna = 4

    Ver bicotiCoordinate para más detalles sobre las coordenadas.
    Esta función es virtual pura en esta clase.