zxhproj v 2.2
zxhproj

zxhTransformIterateInverse.h

00001 
00002 /*=========================================================================
00003 
00004   Program:   ZXH Registration Software
00005   Author:    Xiahai Zhuang
00006   Module:    $RCSfle: zxhTransformIterateInverse.h    $
00007   Language:  C++
00008   Date:      $Date: From  2008-01 $
00009   Version:   $Revision: 2.0 $
00010 
00011 =========================================================================*/
00012 
00013 #ifndef zxhTransformIterateInverse_H
00014 #define zxhTransformIterateInverse_H
00015 
00016 #include "zxhTransformFields.h"
00017 #include "zxhImageData.h"
00018 #include <string.h>
00019 #include <stdio.h>
00020 
00028 #ifndef  m_staticMinimalSpace
00029 #define m_staticMinimalSpace 0.01f
00030 #endif
00031 #ifndef  m_staticMinimalSampling
00032 #define m_staticMinimalSampling 1 // it's so weird that 2 works worse than 1
00033 #endif
00034 
00035 class zxhTransformIterateInverse : public zxhTransformFields
00036 {
00037 public:
00039     zxhTransformIterateInverse();
00041     virtual ~zxhTransformIterateInverse();
00042 
00044     virtual void SetTransform( zxhTransformBase*p )         {m_pTransform=p;} ;
00046     virtual void NewInverseTransformImages( int dim, const int*size, const float*spacing, const zxhImageInfo*pimageinfo )
00047     {   NewTransformImages( dim, size, spacing, pimageinfo ) ; } ;
00049     virtual void SetRoi( int dim, int *from, int* to )
00050     {
00051         this->SetDimension( dim );
00052         for( int id=0; id<dim; ++id )
00053             m_aiRoi[0][id]=from[id], m_aiRoi[1][id]=to[id] ;
00054     } ;
00056     //virtual bool ComputeInverseTransform( float fPercentage=0.2 ) ;
00058     virtual bool ComputeInverseByDistanceInterpolate();
00060     virtual bool Evaluate()
00061     {   return ComputeInverseByDistanceInterpolate() ; }
00063     virtual void    SetJacWeighting( float f )              { m_fJacWeighting=f; };
00065     virtual float   GetJacWeighting()                       { return m_fJacWeighting;};
00067     virtual void    TransformWorldToWorld(const float fVectorFromWorld[ImageDimensionMax],float fVectorToWorld[ImageDimensionMax]);
00068 
00069 protected:
00070     /*std::string       m_strTransformFiles[ImageDimensionMax]; from fields
00071     zxhImageGiplT<float>  m_pimgTransformFields[ImageDimensionMax];
00072     zxhImageModelingLinearT<float,float> m_pmodelTransformFields[ImageDimensionMax];*/
00074     zxhTransformBase    *m_pTransform;
00076     int     m_aiRoi[2][ImageDimensionMax] ;
00078     float   m_fIterateLength ; // 0:l:1
00080     float   m_fExponent ;
00082     int     m_iFillRange[2] ;
00084     float   m_fJacWeighting ;
00087     virtual bool    ForwardTransformToRefGrid( int* roiFrom, int* roiTo,
00088                             zxhImageDataT<float>* imgFindInverseDis,
00089                             zxhImageDataT<float>* imgFindInverseCoX,
00090                             zxhImageDataT<float>* imgFindInverseCoY,
00091                             zxhImageDataT<float>* imgFindInverseCoZ ) ;
00093     virtual int FillInFindInverse( zxhImageDataT<float>* imgFindInverseDis,
00094                                                 zxhImageDataT<float>* imgFindInverseCoX,
00095                                                 zxhImageDataT<float>* imgFindInverseCoY,
00096                                                 zxhImageDataT<float>* imgFindInverseCoZ );
00100     virtual void    DistanceWeightInterpolateByNeighbours( zxhImageDataT<float>* imgFindInverseDis,
00101                                                 zxhImageDataT<float>* imgFindInverseCoX,
00102                                                 zxhImageDataT<float>* imgFindInverseCoY,
00103                                                 zxhImageDataT<float>* imgFindInverseCoZ );
00105     virtual void ComputeJacxyzForwardVoxel( float*Jacxyz, zxhTransformBase* pTransform, float *phyco, float *phycoTo, float*spacing) ;
00107     virtual void MapToGrid8Neighbour( float* WorldFrom, float*WorldTo, float* gridcoTo, int i, int j, int k, zxhImageDataT<float>*pImgTemp,
00108                                 zxhImageDataT<float>* imgFindInverseDis,
00109                                 zxhImageDataT<float>* imgFindInverseCoX,
00110                                 zxhImageDataT<float>* imgFindInverseCoY,
00111                                 zxhImageDataT<float>* imgFindInverseCoZ ) ;
00112     virtual  void ComputeSamplingSpacing(float * JacSpacing, float * Jacxyz, float * spacing)
00113     {ComputeSamplingSpacingByMaximalPoints(JacSpacing, Jacxyz, spacing);}
00115     virtual void    ComputeSamplingSpacingByProduct(float * JacSpacing, float * Jacxyz, float * spacing); 
00117     virtual void    ComputeSamplingSpacingByMaximalPoints(float * JacSpacing, float * Jacxyz, float * spacing);
00119     virtual void    DistanceWeightInterpolationOct( float afInterpolateResult[], float * afInterpolateSource, float *afDisSquared );
00120 };
00121 #endif //
00122 
00123 
 All Classes Namespaces Functions Variables Typedefs