freSVLimitedAxisVnlSOMetricAdaptor.cxx

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   F.R.E.E. - flexible registration evaluation engine
00004   Version:   v.1.0.0
00005   Date:      $Date: 2006/09/01 12:00:00 $
00006   Module:    $RCSfile: freSVLimitedAxisVnlSOMetricAdaptor.cxx,v $
00007   Language:  C++
00008 
00009 
00010 
00011   Copyright (c) 2007 Ralf o Floca (Department of Medical Informatics,
00012   Institute for Medical Biometry and Informatics, University of Heidelberg,
00013   Germany). All rights reserved.
00014   See FREECopyright.txt or http://www.mi.med.uni-hd.de/free/copyright.htm
00015   for details.
00016 
00017      This software is distributed WITHOUT ANY WARRANTY; without even 
00018      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00019      PURPOSE.  See the above copyright notices for more information.
00020 
00021 =========================================================================*/
00022 
00023 #include "freSVLimitedAxisVnlSOMetricAdaptor.h"
00024 
00025 namespace FREE
00026 {
00027   
00028 void
00029 SVLimitedAxisVnlSOMetricAdaptor 
00030 ::SetOriginPosition(const OriginPositionType& origin)
00031 {
00032         m_OriginPosition = origin;
00033 };
00034 
00035 void
00036 SVLimitedAxisVnlSOMetricAdaptor 
00037 ::SetParameterAxis(const ParameterAxisType& axis)
00038 {
00039         m_ParameterAxis = axis;
00040 };
00041 
00043 SVLimitedAxisVnlSOMetricAdaptor 
00044 ::SVLimitedAxisVnlSOMetricAdaptor(unsigned int spaceDimension, unsigned int axisCount):
00045   SingleValuedVnlSOMetricAdaptor(spaceDimension), m_ParameterAxis(spaceDimension),
00046         m_OriginPosition(spaceDimension)
00047 {
00048         m_Scales.SetSize(spaceDimension);
00049         m_Scales.Fill(1);
00050         m_ParameterAxis.Fill(-1);
00051         m_OriginPosition.Fill(0.0);
00052         m_NumberOfAxis = axisCount;
00053 }    
00054 
00055 SVLimitedAxisVnlSOMetricAdaptor::ParametersType
00056 SVLimitedAxisVnlSOMetricAdaptor::
00057 ConvertInternalToParameter(const InternalParametersType & inparameters)
00058 {
00059         // default scaling for any parameter is 1
00060         ParametersType parameters(this->get_number_of_unknowns());
00061                 for(unsigned int i=0;i<parameters.size();i++)
00062                 {
00063                         int iAxisIndex = m_ParameterAxis[i];
00064                         if (iAxisIndex<0) iAxisIndex = i;
00065 
00066                         if (iAxisIndex>=inparameters.size()) throwExceptionMacro("Error: axis index exceeds internal parameter set. Index: " << iAxisIndex << "; size: " << inparameters.size());
00067                         
00068                         parameters[i] = m_OriginPosition[i] + (inparameters[iAxisIndex]*m_Scales[i]);
00069                 }
00070 
00071         return parameters;
00072 };
00073 
00074 SVLimitedAxisVnlSOMetricAdaptor::InternalParametersType
00075 SVLimitedAxisVnlSOMetricAdaptor::
00076 ConvertParameterToInternal(const ParametersType & parameters)
00077 {
00078         InternalParametersType inparameters(m_NumberOfAxis);
00079         inparameters.fill(0.0);
00080 
00081         for(unsigned int i=0;i<parameters.size();i++)
00082         {
00083                 int iAxisIndex = m_ParameterAxis[i];
00084                 if (iAxisIndex<0) iAxisIndex = i;
00085 
00086                 if (iAxisIndex>=inparameters.size()) throwExceptionMacro("Error: axis index exceeds internal parameter set. Index: " << iAxisIndex << "; size: " << inparameters.size());
00087                         
00088                 //It is possible that an inparameter value will be overwritten
00089                 //if there are more then one parameter on one axis. Then the last one
00090                 //is the one used, hence the difference between the computed versions
00091                 //should be minor.
00092                 inparameters[iAxisIndex] = (parameters[i] - m_OriginPosition[i])/m_Scales[i];
00093         }
00094 
00095         return inparameters;
00096 };
00097 
00098 } // end namespace itk
00099 
00100 
00101 
00102 
00103 

Generated at Sat Oct 13 17:49:15 2007 for f.r.e.e. - Flexible Registration and Evaluation Engine by doxygen 1.5.3 written by Dimitri van Heesch, © 1997-2000