bicotiImage3D


Figura 5.1.9

     Clases

bicotiImage

bicotiImage2D
bicotiImage3D

bicotiImage2DSingle
bicotiImage2DVectorial
bicotiImage3DSingle
bicotiImage3DVectorial
 

     Templates Clases

ImageType
PixelType
ColorType
PrecisionType


class bicotiImage3D < class ImageType, class ColorType ,
                     class PixelType = ColorType, class PrecisionType = PixelType >



Figura 5.1.6

 Public Types

  typedef  PixelType  Pixel
  typedef  ImageType  Implementation
  typedef  bicotiImageIterator< PixelType > Iterator
  typedef  bicotiOperatorUnaryFacade< PixelType >  OperatorUnary
  typedef  bicotiOperatorMultipleFacade< PixelType >  OperatorMultiple
  typedef  bicotiDexelFacade3D< PixelType > Dexel
  typedef  bicotiPropertyFacade< bicotiCoordinate3D< INTEGER > , ColorType , PixelType ,
                                                                                                                                 PrecisionType > Property
  typedef bicotiNeighbourFilterFacade3D< PixelType, PrecisionType > NeighbourFilter
  typedef  bicotiGeometricalFacade3D< PixelType, PrecisionType > Geometrical

 Public Methods

ImageType * GetImplementation( )
void SetImplementation ( ImageType * )

void DestroyImplementation( )

void BuildOperatorUnary( )
bicotiOperatorUnaryFacade< PixelType > * CreateOperatorUnary( )
bicotiOperatorUnaryFacade< PixelType > * GetOperatorUnary( )
void DestroyOperatorUnary( )

void BuildOperatorMultiple( )
bicotiOperatorMultipleFacade< PixelType > * CreateOperatorMultiple( )
bicotiOperatorMultipleFacade< PixelType > * GetOperatorMultiple( )
void DestroyOperatorMultiple( )

bicotiImageIterator< PixelType > * CreateIterator( )

bicotiDexelFacade3D< PixelType > * GetDexel( )
void DestroyDexel( )

bicotiPropertyFacade< bicotiCoordinate3D< INTEGER >, ColorType, PixelType, PrecisionType > *
                                                                                                                                                         GetProperty( )
void DestroyProperty( )

bicotiNeighbourFilterFacade3D< PixelType, PrecisionType > * GetNeighbourFilter( )
void DestroyNeighbourFilter( )
void LoadNeighbourFilterResult( )
ImageType * GetNeighbourFilterResult( )

void BuildGeometrical( )
void DestroyGeometrical( )
bicotiGeometricalFacade3D< PixelType, PrecisionType > * GetGeometrical( )
ImageType * GetGeometricalResult( )
void LoadGeometricalResult( )



ImageType * GetImplementation( )

    Ver GetImplementation en bicotiImage.



void SetImplementation ( ImageType * )

    Ver SetImplementation en bicotiImage.



void DestroyImplementation( )

    Ver DestroyImplementation en bicotiImage.



void BuildOperatorUnary( )

    Construye una fachada de Operator Unary para la implementación de la imagen y mantiene una referencia interna a ella, de modo de poder usar sus funciones.

    Por ejemplo si creo :

        bicotiImage3DArrayFloat  imagen;

    Creo el Operator Unary haciendo :

        imagen.BuildOperatorUnary( );

    Ahora puedo acceder al operador a través del puntero que devuelve la función GetOperatorUnary.
    Cuando no necesite más al objeto es conveniente liberar la memoria con la función
    DestroyOperatorUnary. De cualquier forma, el destructor de la imagen lo hará.

    Esta función esconde toda la complejidad que tiene la construcción del operador.



bicotiOperatorUnaryFacade< PixelType > * CreateOperatorUnary( )

    Construye una fachada de Operator Unary para la implementación de la imagen y devuelve una referencia a ella. La diferencia con BuildOperatorUnary es que luego de construida la fachada se pierde referencia a ella.

    Por ejemplo si creo :

        bicotiImage3DArrayFloat  imagen;

    Puedo tener un puntero a un Operator Unary para esta imagen haciendo :

        bicotiImage3DArrayFloat  :: OperatorUnary *  ptr_op_un;
        ptr_op_un = imagen.CreateOperatorUnary( );

    ptr_op_un es un puntero a una fachada de Operator Unary pero no es "vista" desde imagen, por lo tanto cuando se quiere liberar la memoria hay que hacerlo externamente, la fachada no lo hará.

        delete ptr_op_un;



bicotiOperatorUnaryFacade< PixelType > * GetOperatorUnary( )

    Ver GetOperatorUnary en bicotiImage.



void DestroyOperatorUnary( )

    Ver DestroyOperatorUnary en bicotiImage.



void BuildOperatorMultiple( )

    Construye una fachada de Operator Multiple para la implementación de la imagen y mantiene una referencia interna a ella, de modo de poder uasr sus funciones.

    Por ejemplo si creo :

        bicotiImage3DArrayInt  imagen;

    Creo el OperatorMultiple haciendo :

        imagen.BuildOperatorMultiple( );

    Ahora puedo acceder al operador a través del puntero que devuelve la función GetOperatorMultiple.
    Cuando no necesite más al objeto es conveniente liberar la memoria con la función
    DestroyOperatorMultiple. De cualquier forma, el destructor de la imagen lo hará.

    Esta función esconde toda la complejidad que tiene la construcción del operador.



bicotiOperatorMultipleFacade< PixelType > * CreateOperatorMultiple( )

    Construye una fachada de Operator Multiple para la implementación de la imagen y devuelve una referencia a ella. La diferencia con BuildOperatorMultiple es que luego de construida la fachada se pierde referencia a ella.

    Por ejemplo si creo :

        bicotiImage3DArrayFloat  imagen;

    Puedo tener un puntero a un OperatorMultiple para esta imagen haciendo :

        bicotiImage3DArrayFloat  :: OperatorMultiple *  ptr_op_mul;
        ptr_op_mul = imagen.CreateOperatorMultiple( );

    ptr_op_mul es un puntero a una fachada de Operator Multiple pero no es "vista" desde imagen, por lo tanto cuando se quiere liberar la memoria hay que hacerlo externamente, la fachada no lo hará.

        delete ptr_op_mul;



bicotiOperatorMultipleFacade< PixelType > * GetOperatorMultiple( )

    Ver GetOperatorMultiple en bicotiImage.



void DestroyOperatorMultiple( )

    Ver DestroyOperatorMultiple en bicotiImage.



bicotiImageIterator< PixelType > * CreateIterator( )

    Ver CreateIterator en bicotiImage.



bicotiDexelFacade3D< PixelType > * GetDexel( )

    Devuelve un puntero a la fachada de Dexel.

    Por ejemplo si creo :

        bicotiImage3DArrayFloat  imagen;

    Puedo obtener un puntero a la fachada de Dexel haciendo :

        bicotiImage3DArrayChar :: Dexel *  ptr_dex;
        ptr_dex = imagen.GetDexel( );

    Con este puntero puedo acceder a todas las funciones de la fachada de Dexel.
    Ver Fachada de Dexel.

    Obs : Como declaramos el tipo del puntero a través de la clase, no es necesario instanciar ningún
             template.

    Obs : Para tener un puntero a un objeto creado y no un puntero a NULL que pueden traer
             problemas, primero hay que crear dicha fachada con la función BuildDexel o
             CreateDexel.



void DestroyDexel( )

    Ver DestroyDexel en bicotiImage.



bicotiPropertyFacade < bicotiCoordinate3D< INTEGER > , ColorType ,
                                                                          PixelType , PrecisionType > * GetProperty( )

    Devuelve un puntero a la fachada de Property.

    Por ejemplo si creo :

        bicotiImage3DArrayFloat  imagen;

    Puedo obtener un puntero a la fachada de Property haciendo :

        bicotiImage3DArrayChar :: Property *  ptr_prop;
        ptr_prop = imagen.GetProperty( );

    Con este puntero puedo acceder a todas las funciones de la fachada de Property.
    Ver Fachada de Property.

    Obs : Como declaramos el tipo del puntero a través de la clase, no es necesario instanciar ningún
             template.

    Obs : Para tener un puntero a un objeto creado y no un puntero a NULL que pueden traer
             problemas, primero hay que crear dicha fachada con la función BuildProperty o
             CreateProperty.



void DestroyProperty( )

      La fachada de una imagen tiene un puntero a una fachada de Property. Este puntero puede estar
apuntando a una fachada concreta cuando se ha creado con la función BuldProperty o a NULL si no se ha creado aún la fachada.
Esta función libera la memoria ocupada por dicho objeto, si se ha creado.

    Es decir que hacer :

        imagen.DestroyProperty( );

    es lo mismo que :

        delete ( imagen.GetProperty( ) );

    Si el puntero apunta a NULL la función tira a una exepción.



bicotiNeighbourFilterFacade3D< PixelType, PrecisionType > * GetNeighbourFilter( )

    Devuelve un puntero a la fachada de NeighbourFilter.

    Por ejemplo si creo :

        bicotiImage3DArrayFloat  imagen;

    Puedo obtener un puntero a la fachada de NeighbourFilter haciendo :

        bicotiImage3DArrayChar :: NeighbourFilter *  ptr_filter;
        ptr_filter = imagen.GetNeighbourFilter( );

    Con este puntero puedo acceder a todas las funciones de la fachada de NeighbourFilter.
    Ver Fachada de NeighbourFilter.

    Obs : Como declaramos el tipo del puntero a través de la clase, no es necesario instanciar ningún
             template.

    Obs : Para tener un puntero a un objeto creado y no un puntero a NULL que pueden traer
             problemas, primero hay que crear dicha fachada con la función BuildNeighbourFilter o
             CreateNeighbourFilter.



void DestroyNeighbourFilter( )

       La fachada de una imagen tiene un puntero a una fachada de NeighbourFilter. Este puntero puede estar apuntando a una fachada concreta cuando se ha creado con la función BuldNeighbourFilter o a NULL si no se ha creado aún la fachada.
Esta función libera la memoria ocupada por dicho objeto, si se ha creado.

    Es decir que hacer :

        imagen.DestroyNeighbourFilter( );

    es lo mismo que :

        delete ( imagen.GetNeighbourFilter( ) );

    Si el puntero apunta a NULL la función tira a una exepción.



void LoadNeighbourFilterResult( )

    La Fachada de imagen tiene un puntero a la de NeighbourFilter, la que a su vez tiene dos punteros a implementaciones de imágenes del tipo adecuado. Una como entrada del filtro y otra como salida.
Esto se muestra en la figura 5.1.7.


Figura 5.1.7.

La entrada ( image_src ) es la implementación asociada a la fachada y la salida ( image_res ) es del mismo tipo y no se tiene referencia directa a ella desde la fachada de imagen.

La función LoadNeighbourFilterResult ( ) hace que la fachada de imagen cambie su referencia de image_src a image_res . Borrando previamente a image_src.
Cuando hago esto, el filtro automáticamente toma a image_res como su entrada y crea una nueva salida, como se muestra en la figura 5.1.8.


Figura 5.1.8.



ImageType * GetNeighbourFilterResult( )

    Esta función devuelve un puntero a la imagen resultante del filtro, según lo que se muestra en la figura 5.1.7. se devolvería un puntero a image_res.
A diferencia de LoadNeighbourFilterResult, no modifica los punteros internos, ni destruye una imagen.

Obs : Al destruir el filtro, si esta imagen no fué asignada a la fachada, se borará, por lo que es conveniente hacer una copia de ella si queremos preservarla.

Por ejemplo si hacemos :

        bicotiImage3DArrayChar  imagen;  // imagen original

        bicotiImage3DArrayChar :: Implementation * ptr_ima_dest ;  //  declaro un puntero a una imp.

        image.BuildNeighbourFilter( );  // creo la fachada del filtro.

        Hago algo con el filtro y después :

        ptr_ima_dest = image.GetNeighbourFilterResult( );  // asigno al puntero la salida del filtro.

        image.DestroyNeighbourFilter( );  // destruyo la fachada del filtro.

        Luego de esto, ptr_ima_dest queda apuntando a cualquier lado.



void BuildGeometrical( )

    Construye una fachada de Geomatrical para la implementación de la imagen y mantiene una referencia interna a ella, de modo de poder uasr sus funciones.

    Por ejemplo si creo :

        bicotiImage3DArrayInt  imagen;

    Creo la fachada de Geomatrical haciendo :

        imagen.BuildGeomatrical( );

    Ahora puedo acceder al operador a través del puntero que devuelve la función GetGeometrical.
    Cuando no necesite más al objeto es conveniente liberar la memoria con la función
    DestroyGeometrical. De cualquier forma, el destructor de la imagen lo hará.

    Esta función esconde toda la complejidad que tiene la construcción.



void DestroyGeometrical( )

       La fachada de una imagen tiene un puntero a una fachada de Geometrical. Este puntero puede estar apuntando a una fachada concreta cuando se ha creado con la función BuldGeometrical o a NULL si no se ha creado aún la fachada.
Esta función libera la memoria ocupada por dicho objeto, si se ha creado.

    Es decir que hacer :

        imagen.DestroyGeometrical( );

    es lo mismo que :

        delete ( imagen.GetGeometrical( ) );

    Si el puntero apunta a NULL la función tira a una exepción.



bicotiGeometricalFacade3D< PixelType, PrecisionType > * GetGeometrical( )

    Devuelve un puntero a la fachada de Geometrical.

    Por ejemplo si creo :

        bicotiImage3DArrayFloat  imagen;

    Puedo obtener un puntero a la fachada de Geometrical haciendo :

        bicotiImage3DArrayChar :: Geometrical *  ptr_prop;
        ptr_prop = imagen.GetGeometrical( );

    Con este puntero puedo acceder a todas las funciones de la fachada de Geometrical.
    Ver Fachada de Geometrical.

    Obs : Como declaramos el tipo del puntero a través de la clase, no es necesario instanciar ningún
             template.

    Obs : Para tener un puntero a un objeto creado y no un puntero a NULL que pueden traer
             problemas, primero hay que crear dicha fachada con la función BuildGeometrical o
             CreateGeometrical.



ImageType * GetGeometricalResult( )

    Devuelve un puntero al resultado del "filtrado de Geometrical".
    Es muy similar a GetNeighbourFilterResult.



void LoadGeometricalResult( )

    Carga como implementación asociada a la fachada, al resultado del "filtrado de Geometrical".
    Es muy similar a LoadNeighbourFilterResult.