bicotiGeometricalFacade
bicotiGeometricalFacade2D
bicotiGeometricalFacade3D
class bicotiGeometricalFacade3D< class PixelType, class PrecisionType >
Los argumentos template: PixelType y PrecisionType, corresponden al tipo de pixel a utilizar y a el tipo de precisión deseada, intervienen en los algoritmos ya que hay que interpolar imagenes. Para conocer mas sobre PixelType y PrecisionType ir a Pixels.
Las funciones protegidas solamente están para fraccionar problemas complejos en mas sencillos, no hace falta comprenderlas para usar la funcionalidad prevista desde las funciones públicas.
bool
PointsInSameFace(
bicotiCoordinate3D< REAL > &, bicotiCoordinate3D< REAL
>& )
bool
PlaneForEdge(
bicotiCoordinate3D< REAL >, bicotiCoordinate3D< REAL
> )
bool
InImage(
bicotiCoordinate3D< REAL > &)
bool
ParallelPrincipalsPlanes(
bicotiCoordinate3D<
REAL >& , bicotiCoordinate3D< REAL
>& ,
bicotiCoordinate3D< REAL >& )
bool
EqualPoint(
bicotiCoordinate3D<
REAL >& , bicotiCoordinate3D<
REAL >& )
vector< bicotiCoordinate3D< REAL > > ComputePlaneEdgeCut(
bicotiCoordinate3D< REAL >,
bicotiCoordinate3D< REAL > )
Public Methods
bicotiGeometricalFacade3D(
bicotiImageImplementatio3D< PixelType > *)
~bicotiGeometricalFacade3D(
)
void
BuildAffimTransformation(
)
void
BuildRotation(
double )
void
BuildCutter(
bicotiCoordinate3D< REAL >, bicotiCoordinate3D< REAL
>, bicotiCoordinate3D< REAL
>,
bicotiImageImplementation2D< PixelType >* )
void
ApplyAffimTransformation(
)
void
UsePixelInterpolatorLinear(
)
void
UsePixelInterpolatorLagrange(
)
bicotiCoordinate3D<
REAL
> GetOriginSubspace( )
bicotiCoordinate3D<
REAL
> GetVectorISubspace( )
bicotiCoordinate3D<
REAL > GetVectorJSubspace( )
bicotiCoordinate3D< REAL >& RotationAxis(
)
Función
protegida de la clase, cuando se usan cortes de 3D a 2D, se encarga de
averiguar del
resultado
de ComputePlaneEdgeCut( ), que puntos están sobre
una misma cara "externa".
Función
protegida de la clase, cuando se usan cortes de 3D a 2D, se encarga de
averiguar si el
plano
de corte contiene alguna de las "aristas" de la imagen ( pensar en un prisma
). Si es así
resuelve
el problema del corte. Los parámetros que recibe son el vector de
coeficientes y el vector
del
plano de corte( vector perpendicular al plano ).
Plano definido por a x + b y + c z = d
vector del plano = ( a, b, c)
vectror de coeficientes = ( a, b, d)
Retorna verdadero si el punto esta en la imagen, falso en caso contrario.
Función
protegida de la clase, cuando se usan cortes de 3D a 2D, se encarga de
averiguar si el
plano
de corte es paralelo a alguno de los planos principales. Si es así
se resuelve el problema del
corte.
Los parámetros a pasar son tres puntos, si estos definen un plano
paralelo a algún plano
principal,
se resuelve el corte y retorna true.
En varias ocaciones nos enfrentamos a inestabilidades númericas
y puede ocurrir que se tome por
poca diferencia en su ubicación, dos puntos distintos en ves de
uno. Esta función define un criterio
de igualdad mas adecuado a esas circunstancias.
Calcula
los cortes del plano con las "aristas" de la imagen, y los retorna en un
vector< bicotiCoordinate3D<
REAL
> >.Los parámetros que recibe son el vector de coeficientes y
el vector del plano de corte( vector perpendicular al plano ).
Plano definido por a x + b y + c z = d
vector del plano = ( a, b, c)
vectror de coeficientes = ( a, b, d)
Constructor del objeto, recibe como argumento una bicotiImageImplementation3D< PixelType > *
Destructor del objeto.
Crea una transformación afin.
Con la función Matrix( ) se accede a T, y con Vector( ) se accede a b.
Crea una rotación( caso particular de transformacón affim
) generando la matriz T y el vector b
adecuados.
Para definir una rotación en 3D hay que fijar dos parámetros:
el eje de rotación, ángulo de
rotación. Al eje de rotación se fija mediante un punto y
una dirección, se accede al punto
mediante función
RotationCenter( )
y a la dirección mediante la función RotationAxis(
) al ángulo
se pasa como parámetro de esta función.
El ángulo se expresa en radianes y se mide en sentido antihorario,
otra restricción mas es que este
debe estar entre -pi y pi.
Para hacer un corte de 3D a 2D, hay que definir el plano de corte, de la
geometría euclídiana
sabemos que un plano se define mediante tres puntos( estos son los tres
primeros parámetros que
se dan en esta función ). También hay que pasar de que tipo
será la imagen resultado, con el
cuarto parámetro se define esto.
Realiza la
transformación afin sobre una imagen, es importante destacar de
que este proceso crea la
imagen resultado
no hay que pasarla como argumento. Existen transformaciones afines como
por
ejemplo una
rotación, en donde por aplicarla se pierde "información"
de la imagen, con
automatic_resize
la imagen se redimensiona para no perder "información", por defecto
no se hace y
la imagen
resultado es igual en tamaño a la imagen original.
Para acceder
a los resultados se utilizan a GetResult(
) o LoadResult( ). Observar :
Tener cuidado
en el resultado de un corte, la imagen resultado es 2D y no 3D, se
RECOMIENDA en este caso no usar LoadResult( ).
La información que disponemos es una imagen digital, por lo cual
la interpolación es algo con que
debemos enfrentarnos, existen dos tipos de interpoladores( dos técnicas
de interpolación ) al
momento actual. Si se desea trabajar con la interpolación
lineal se usa esta función.
La información que disponemos es una imagen digital, por lo cual
la interpolación es algo con que
debemos enfrentarnos, existen dos tipos de interpoladores( dos técnicas
de interpolación ) al
momento actual. Si se desea trabajar con la interpolación
lagrange se usa esta función.
Durante
el corte, se definen parámetros estos podrían quedar poco
claros al usuario, recomendamos
ver bicotiCutter
y ejemplos . Mediante esta función se obtiene el origen del subespacio.
Durante el
corte, se definen parámetros estos podrían quedar poco claros
al usuario, recomendamos
ver bicotiCutter
y ejemplos . Mediante esta función se obtiene el vector según_I
del subespacio.
Durante el
corte, se definen parámetros estos podrían quedar poco claros
al usuario, recomendamos
ver bicotiCutter
y ejemplos . Mediante esta función se obtiene el vector según_J
del subespacio.
En el caso particular de que la transformación afin sea una
rotación, hay que pasar un eje de
rotación, este queda bien definido con un punto y un vector. El
punto se pasa mediante
RotationCenter( ) y a la dirección se accede mediante RotationAxis(
).