cmtkVoxelMatchingFunctional.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: 2398 $
00026 //
00027 //  $LastChangedDate: 2010-10-05 14:54:37 -0700 (Tue, 05 Oct 2010) $
00028 //
00029 //  $LastChangedBy: torstenrohlfing $
00030 //
00031 */
00032 
00033 #include <Registration/cmtkVoxelMatchingFunctional.h>
00034 
00035 #include <Base/cmtkVector.h>
00036 
00037 #include <assert.h>
00038 
00039 namespace
00040 cmtk
00041 {
00042 
00045 
00046 void
00047 VoxelMatchingFunctional::InitFloating( UniformVolume::SmartPtr& floating )
00048 {
00049   FloatingGrid = floating;
00050   
00051   this->FloatingDims = this->FloatingGrid->GetDims();
00052   this->FloatingSize = this->FloatingGrid->Size;
00053 
00054   this->m_FloatingCropRegionCoordinates = FloatingGrid->GetHighResCropRegion();
00055   for ( int dim = 0; dim < 3; ++dim ) 
00056     {
00057     this->FloatingInverseDelta[dim] = 1.0 / FloatingGrid->m_Delta[dim];
00058     this->m_FloatingCropRegionFractional.From()[dim] = this->m_FloatingCropRegionCoordinates.From()[dim] * FloatingInverseDelta[dim];
00059     this->m_FloatingCropRegionFractional.To()[dim] = this->m_FloatingCropRegionCoordinates.To()[dim] * FloatingInverseDelta[dim];
00060     }
00061   
00062   FloatingDataClass = floating->GetData()->GetDataClass();
00063 }
00064 
00065 void
00066 VoxelMatchingFunctional::InitReference( UniformVolume::SmartPtr& reference )
00067 {
00068   ReferenceGrid = reference;
00069 
00070   this->ReferenceDims = this->ReferenceGrid->GetDims();
00071   this->ReferenceSize = this->ReferenceGrid->Size;
00072   this->m_ReferenceCropRegion = ReferenceGrid->CropRegion();
00073 
00074   for ( int dim = 0; dim < 3; ++dim )
00075     this->ReferenceInvDelta[dim] = 1.0 / ReferenceGrid->m_Delta[dim];
00076 
00077   ReferenceDataClass = reference->GetData()->GetDataClass();
00078 }
00079 
00080 const DataGrid::RegionType
00081 VoxelMatchingFunctional::GetReferenceGridRange
00082 ( const Vector3D& fromVOI, const Vector3D& toVOI )
00083 {
00084   DataGrid::IndexType from, to;
00085   for ( int i = 0; i < 3; ++i )
00086     {
00087     from[i] = std::max( this->m_ReferenceCropRegion.From()[i], static_cast<int>( fromVOI[i] * this->ReferenceInvDelta[i] ) );
00088     to[i] = 1+std::min( this->m_ReferenceCropRegion.To()[i]-1, 1+static_cast<int>( toVOI[i] * this->ReferenceInvDelta[i] ) );
00089     }
00090 
00091   return DataGrid::RegionType( from, to );
00092 }
00093 
00094 } // namespace cmtk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines