cmtkMultiChannelRMIRegistrationFunctional.h

Go to the documentation of this file.
00001 /*
00002 //
00003 //  Copyright 1997-2009 Torsten Rohlfing
00004 //
00005 //  Copyright 2004-2010 SRI International
00006 //
00007 //  This file is part of the Computational Morphometry Toolkit.
00008 //
00009 //  http://www.nitrc.org/projects/cmtk/
00010 //
00011 //  The Computational Morphometry Toolkit is free software: you can
00012 //  redistribute it and/or modify it under the terms of the GNU General Public
00013 //  License as published by the Free Software Foundation, either version 3 of
00014 //  the License, or (at your option) any later version.
00015 //
00016 //  The Computational Morphometry Toolkit is distributed in the hope that it
00017 //  will be useful, but WITHOUT ANY WARRANTY; without even the implied
00018 //  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019 //  GNU General Public License for more details.
00020 //
00021 //  You should have received a copy of the GNU General Public License along
00022 //  with the Computational Morphometry Toolkit.  If not, see
00023 //  <http://www.gnu.org/licenses/>.
00024 //
00025 //  $Revision: 2398 $
00026 //
00027 //  $LastChangedDate: 2010-10-05 14:54:37 -0700 (Tue, 05 Oct 2010) $
00028 //
00029 //  $LastChangedBy: torstenrohlfing $
00030 //
00031 */
00032 
00033 #ifndef __cmtkMultiChannelRMIRegistrationFunctional_h_included_
00034 #define __cmtkMultiChannelRMIRegistrationFunctional_h_included_
00035 
00036 #include <cmtkconfig.h>
00037 
00038 #include <Registration/cmtkMultiChannelRegistrationFunctional.h>
00039 
00040 #include <Base/cmtkUniformVolume.h>
00041 #include <System/cmtkSmartPtr.h>
00042 
00043 #include <vector>
00044 
00045 namespace
00046 cmtk
00047 {
00048 
00052 template<class TRealType = double,
00053          class TDataType = float,
00054          class TInterpolator = UniformVolumeInterpolator<Interpolators::Linear> >
00055 class MultiChannelRMIRegistrationFunctional :
00057   public MultiChannelRegistrationFunctional<TInterpolator>
00058 {
00059 public:
00061   typedef MultiChannelRMIRegistrationFunctional<TRealType,TDataType> Self;
00062 
00064   typedef SmartPointer<Self> SmartPtr;
00065 
00067   typedef MultiChannelRegistrationFunctional<TInterpolator> Superclass;
00068 
00070   typedef TRealType RealType;
00071 
00073   typedef TDataType DataType;
00074 
00075 protected:
00077   class MetricData
00078   {
00079   private:
00081     typedef MultiChannelRMIRegistrationFunctional<TRealType,TDataType> Parent;
00082     
00083   public:
00085     typedef MetricData Self;
00086 
00088     void Init( Parent *const parent );
00089 
00091     std::vector<RealType> m_Sums;
00092     
00094     std::vector<RealType> m_Products;
00095     
00097     Matrix2D<RealType> m_CovarianceMatrix;
00098     
00100     Matrix2D<RealType> m_CovarianceMatrixRef;
00101     
00103     Matrix2D<RealType> m_CovarianceMatrixFlt;
00104     
00106     size_t m_TotalNumberOfSamples;
00107 
00109     Self& operator=( const Self& source );
00110 
00112     Self& operator+=( const Self& other );
00113 
00115     Self& operator-=( const Self& other );
00116 
00118     void operator+=( const Types::DataItem* values );
00119 
00121     void operator-=( const Types::DataItem* values );
00122   };
00123 
00125   MetricData m_MetricData;
00126 
00128   virtual void ContinueMetric( MetricData& metricData, const size_t rindex, const Vector3D& fvector );
00129 
00131   virtual RealType GetMetric( const MetricData& metricData ) const;
00132 };
00133 
00135 
00136 } // namespace cmtk
00137 
00138 #include "cmtkMultiChannelRMIRegistrationFunctional.txx"
00139 #include "cmtkMultiChannelRMIRegistrationFunctionalMetricData.txx"
00140 
00141 #endif // #ifndef __cmtkMultiChannelRMIRegistrationFunctional_h_included_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines