CustusX  15.8
An IGT application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SeansVesselReg.hxx
Go to the documentation of this file.
1 #ifndef SeansVesselSegmentation_hxx
2 #define SeansVesselSegmentation_hxx
3 
4 #include "cxResourceExport.h"
5 
8 #include "cxTransform3D.h"
9 #include "vtkSmartPointer.h"
10 
11 namespace cx
12 {
30 class cxResource_EXPORT SeansVesselReg
31 {
32 public:
36  struct cxResource_EXPORT Context
37  {
41 
42  vtkPolyDataPtr getMovingPoints();
43  vtkPolyDataPtr getFixedPoints();
44 
47 
50  double mMetric;
51 
52  double mLtsRatio;
53 
54  //---------------------------------------------------------------------------
55  //TODO non-linear needs to handle this!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
57  //---------------------------------------------------------------------------
58  };
59  typedef boost::shared_ptr<Context> ContextPtr;
60 
62 // SeansVesselReg(int lts_ratio, double stop_delta, double lambda, double sigma, bool lin_flag, int sample,
63 // int single_point_thre, bool verbose);
64  ~SeansVesselReg();
65 
66  bool execute(DataPtr source, DataPtr target, QString logPath);
67  Transform3D getLinearResult(ContextPtr context=ContextPtr());
68  double getResultMetric(ContextPtr context=ContextPtr());
69  double getResultLtsRatio(ContextPtr context=ContextPtr());
70  Transform3D getNonLinearTransform();
71  void checkQuality(Transform3D linearTransform);
72 // ImagePtr loadMinc(char* source_file);
73  void setDebugOutput(bool on)
74  {
75  mt_verbose = on;
76  }
77 
81  double mt_lambda;
82  double mt_sigma;
84 // bool mt_doStepping;
88  bool mt_verbose;
90 
91  // debug interface:
92  ContextPtr createContext(DataPtr source, DataPtr target);
93  void performOneRegistration(ContextPtr context, bool linear);
94  void computeDistances(ContextPtr context);
95  static vtkPolyDataPtr convertToPolyData(vtkPointsPtr input);
96 
104  static vtkPolyDataPtr extractPolyData(ImagePtr image, int p_neighborhoodFilterThreshold,
105  double p_BoundingBox[6]);
106 private:
107  Transform3D getLinearTransform(vtkGeneralTransformPtr myConcatenation);
108 
109 protected:
110  bool runAlgorithm(ContextPtr context, vtkGeneralTransformPtr myConcatenation, int largeSteps, double fraction);
111  void printOutResults(QString fileNamePrefix, vtkGeneralTransformPtr myConcatenation);
112  vtkAbstractTransformPtr linearRegistration(vtkPointsPtr sortedSourcePoints, vtkPointsPtr sortedTargetPoints);
113  vtkAbstractTransformPtr nonLinearRegistration(vtkPointsPtr sortedSourcePoints, vtkPointsPtr sortedTargetPoints);
114  vtkPolyDataPtr convertToPolyData(DataPtr data);
116  vtkPointsPtr createSortedPoints(vtkIdListPtr sortedIDList, vtkPointsPtr unsortedPoints, int numPoints);
117  vtkPolyDataPtr crop(vtkPolyDataPtr input, vtkPolyDataPtr fixed, double margin);
118  ContextPtr linearRefineAllLTS(ContextPtr context);
119  void linearRefine(ContextPtr context);
120  SeansVesselReg::ContextPtr splitContext(ContextPtr context);
121 
122  void print(vtkPointsPtr points);
123  void print(vtkPolyDataPtr data);
124 
125 
126 
127 // Transform3D mLinearTransformResult;
129 
130 // //---------------------------------------------------------------------------
131 // //TODO non-linear needs to handle this!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
132 // bool mInvertedTransform; ///< the calculated registration goes from target to source instead of source to target
133 // //---------------------------------------------------------------------------
134 };
135 }//namespace cx
136 #endif
void setDebugOutput(bool on)
DoubleBoundingBox3D transform(const Transform3D &m, const DoubleBoundingBox3D &bb)
vtkGeneralTransformPtr mConcatenation
output: concatenation of all transforms so far
double mt_distanceDeltaStopThreshold
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
ContextPtr mLastRun
result from last run of execute()
boost::shared_ptr< class Image > ImagePtr
Definition: cxDicomWidget.h:48
bool mInvertedTransform
the calculated registration goes from target to source instead of source to target ...
double mt_maximumDurationSeconds
vtkCellLocatorPtr mTargetPointLocator
input: target data wrapped in a locator
vtkPolyDataPtr mTargetPoints
input: target data
vtkSmartPointer< class vtkIdList > vtkIdListPtr
double mMetric
output: mean least squares from BEFORE last iteration.
vtkSmartPointer< class vtkPolyData > vtkPolyDataPtr
Definition: cxProbeSector.h:47
vtkPointsPtr mSortedSourcePoints
source points sorted according to distance to target, mSortedSourcePoints==mSortedTargetPoints ...
boost::shared_ptr< class Data > DataPtr
vtkSmartPointer< class vtkCellLocator > vtkCellLocatorPtr
double mLtsRatio
local copy of the lts ratio, can be changed for current iteration.
vtkSmartPointer< class vtkAbstractTransform > vtkAbstractTransformPtr
vtkAbstractTransformPtr mTransform
output: transform from last iteration
vtkSmartPointer< class vtkGeneralTransform > vtkGeneralTransformPtr
vtkPointsPtr mSortedTargetPoints
source points projected onto the target points (closest points) mSortedSourcePoints==mSortedTargetPoi...
boost::shared_ptr< Context > ContextPtr
void print(QString header, QRect r)
vtkSmartPointer< class vtkPoints > vtkPointsPtr
vtkPointsPtr mSourcePoints
input: current source data, modified according to last iteration