cmtkImagePairRegistrationFunctional.cxx

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: 2566 $
00026 //
00027 //  $LastChangedDate: 2010-11-29 14:45:25 -0800 (Mon, 29 Nov 2010) $
00028 //
00029 //  $LastChangedBy: torstenrohlfing $
00030 //
00031 */
00032 
00033 #include <Registration/cmtkImagePairRegistrationFunctional.h>
00034 
00035 #include <Base/cmtkVector.h>
00036 
00037 #include <assert.h>
00038 
00039 namespace
00040 cmtk
00041 {
00042 
00045 
00046 void
00047 ImagePairRegistrationFunctional::InitFloating( UniformVolume::SmartConstPtr& floating )
00048 {
00049   this->m_FloatingGrid = floating;
00050   
00051   this->m_FloatingDims = this->m_FloatingGrid->GetDims();
00052   this->m_FloatingSize = this->m_FloatingGrid->Size;
00053   this->m_FloatingCropRegionCoordinates = this->m_FloatingGrid->GetHighResCropRegion();
00054   for ( int dim = 0; dim < 3; ++dim ) 
00055     {
00056     this->m_FloatingInverseDelta[dim] = 1.0 / this->m_FloatingGrid->m_Delta[dim];
00057     this->m_FloatingCropRegionFractIndex.From()[dim] = this->m_FloatingCropRegionCoordinates.From()[dim] * this->m_FloatingInverseDelta[dim];
00058     this->m_FloatingCropRegionFractIndex.To()[dim] = this->m_FloatingCropRegionCoordinates.To()[dim] * this->m_FloatingInverseDelta[dim];
00059     }
00060   
00061   this->m_FloatingDataClass = floating->GetData()->GetDataClass();
00062 }
00063 
00064 void
00065 ImagePairRegistrationFunctional::InitReference( UniformVolume::SmartConstPtr& reference )
00066 {
00067   this->m_ReferenceGrid = reference;
00068 
00069   this->m_ReferenceDims = this->m_ReferenceGrid->GetDims();
00070   this->m_ReferenceSize = this->m_ReferenceGrid->Size;
00071   this->m_ReferenceCropRegion = this->m_ReferenceGrid->CropRegion();
00072 
00073   for ( int dim = 0; dim < 3; ++dim )
00074     this->m_ReferenceInverseDelta[dim] = 1.0 / this->m_ReferenceGrid->m_Delta[dim];
00075 
00076   this->m_ReferenceDataClass = reference->GetData()->GetDataClass();
00077 }
00078 
00079 const DataGrid::RegionType
00080 ImagePairRegistrationFunctional::GetReferenceGridRange
00081 ( const Vector3D& fromVOI, const Vector3D& toVOI )
00082 {
00083   const FixedVector<3,int>& cropRegionFrom = this->m_ReferenceCropRegion.From();
00084   const FixedVector<3,int>& cropRegionTo = this->m_ReferenceCropRegion.To();
00085 
00086   DataGrid::IndexType from, to;
00087   for ( int i = 0; i < 3; ++i )
00088     {
00089     from[i] = std::min( cropRegionTo[i]-1, std::max( cropRegionFrom[i], static_cast<int>( fromVOI[i] * this->m_ReferenceInverseDelta[i] ) ) );
00090     to[i] = 1+std::max( cropRegionFrom[i], std::min( cropRegionTo[i]-1, 1+static_cast<int>( toVOI[i] * this->m_ReferenceInverseDelta[i] ) ) );
00091     }
00092 
00093   return DataGrid::RegionType( from, to );
00094 }
00095 
00096 } // namespace cmtk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines