Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef __cmtkRegistrationJointHistogram_h_included_
00034 #define __cmtkRegistrationJointHistogram_h_included_
00035
00036 #include <cmtkconfig.h>
00037
00038 #include <Base/cmtkJointHistogram.h>
00039 #include <Base/cmtkInterpolator.h>
00040
00041 #include <Registration/cmtkVoxelMatchingMetric.h>
00042
00043 #ifndef CMTK_HISTOGRAM_AUTOBINS
00044
00045 #define CMTK_HISTOGRAM_AUTOBINS 0
00046 #endif
00047
00048 namespace
00049 cmtk
00050 {
00051
00056 template<Interpolators::InterpolationEnum I=Interpolators::LINEAR>
00057 class RegistrationJointHistogram :
00059 public JointHistogram<int>,
00061 public VoxelMatchingMetric<byte,TYPE_BYTE,I>
00062 {
00063 public:
00065 typedef RegistrationJointHistogram<I> Self;
00066
00068 typedef SmartPointer<Self> SmartPtr;
00069
00082 RegistrationJointHistogram
00083 ( const UniformVolume* refVolume, const UniformVolume* fltVolume,
00084 const unsigned int numBinsX = CMTK_HISTOGRAM_AUTOBINS,
00085 const unsigned int numBinsY = CMTK_HISTOGRAM_AUTOBINS,
00086 const Types::DataItemRange& boundsX = Types::DataItemRange( -HUGE_VAL, HUGE_VAL ),
00087 const Types::DataItemRange& boundsY = Types::DataItemRange( -HUGE_VAL, HUGE_VAL ) );
00088
00101 inline void Proceed( const size_t refIdx, const size_t fltIdx, const Types::Coordinate* frac )
00102 {
00103 this->Increment( this->GetSampleX( refIdx ), this->GetSampleY( fltIdx, frac ) );
00104 }
00105
00107 void AddMetric ( const Self& other )
00108 {
00109 this->AddJointHistogram( other );
00110 }
00111
00113 void RemoveMetric ( const Self& other )
00114 {
00115 this->RemoveJointHistogram( other );
00116 }
00117 };
00118
00120
00121 }
00122
00123 #endif // #ifndef __cmtkRegistrationJointHistogram_h_included_