arbeit
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members

nrroKernel.cpp

Go to the documentation of this file.
00001 //------------------------------------------------------------------------
00002 //
00003 //   Joe Kniss
00004 //     4-1-03
00005 //                   ________    ____   ___ 
00006 //                  |        \  /    | /  /
00007 //                  +---+     \/     |/  /
00008 //                  +--+|  |\    /|     < 
00009 //                  |  ||  | \  / |  |\  \ 
00010 //                  |      |  \/  |  | \  \ 
00011 //                   \_____|      |__|  \__\
00012 //                       Copyright  2003 
00013 //                      Joe Michael Kniss
00014 //                   <<< jmk@cs.utah.edu >>>
00015 //               "All Your Base are Belong to Us"
00016 //-------------------------------------------------------------------------
00017 
00018 //nrroKernel.cpp
00019 
00020 #include "nrroKernel.h"
00021 #include <iostream>
00022 
00023 using namespace std;
00024 
00025 
00026 
00027 /////////////////////////////////////////////////////////////////////
00028 //usefull predefined kernels
00029 /////////////////////////////////////////////////////////////////////
00030 
00031 const double CatRomParam[NrroKernel::MAX_PARMS] = {1, 0.0, 0.5};
00032 const NrroKernel CatmulRomKernel(NrroKernel::Cubic, CatRomParam);
00033 
00034 const double BSplineParam[NrroKernel::MAX_PARMS] = {1, 1.0, 0.0};
00035 const NrroKernel BSplineKernel(NrroKernel::Cubic, BSplineParam);
00036 
00037 const NrroKernel BoxKernel(NrroKernel::Box);
00038 
00039 const NrroKernel TentKernel(NrroKernel::Tent);
00040 
00041 ///////////////////////////////////////////////////////////////////////////
00042 ///////////////////////////////////////////////////////////////////////////
00043 // NrroKernel
00044 ///////////////////////////////////////////////////////////////////////////
00045 ///////////////////////////////////////////////////////////////////////////
00046 
00047 NrroKernel::NrroKernel(int kind, const double *params)
00048 : _kind(kind)
00049 {
00050 
00051    _params[0] = 1;
00052    _spareParams[0] = 1;
00053    for(int i=1; i<MAX_PARMS; ++i)
00054    {
00055       _spareParams[i] = 0;
00056       _params[i] = 0;
00057    }
00058    if(params)
00059    {
00060       for(int j=1; j<MAX_PARMS; ++j)
00061       {
00062          _params[j] = params[j];
00063       }
00064    }
00065    else if(Cubic == kind) //using default, catmul-rom
00066    {
00067       for(int j=1; j<MAX_PARMS; ++j)
00068       {
00069          _params[j] = CatRomParam[j];
00070       }
00071    }
00072 
00073    if(Tent == kind)  //using cubic DD for tent DD
00074    {
00075       _spareParams[1] = 1.0;
00076       _spareParams[2] = 0.0;
00077    }
00078 
00079 }
00080 
00081 //copy constructor
00082 NrroKernel::NrroKernel(const NrroKernel &nk)
00083 : _kind(nk._kind)
00084 {
00085    for(int i=0; i<MAX_PARMS; ++i)
00086    {
00087       _params[i] = nk._params[i];
00088       _spareParams[i] = nk._spareParams[i];
00089    }
00090 }
00091 
00092 //assignment operator
00093 void NrroKernel::operator=(const NrroKernel &nk)
00094 {
00095    _kind = nk._kind;
00096 
00097    for(int i=0; i<MAX_PARMS; ++i)
00098    {
00099       _params[i] = nk._params[i];
00100       _spareParams[i] = nk._spareParams[i];
00101    }
00102 }
00103 
00104 NrroKernel::~NrroKernel()
00105 {
00106 
00107 }
00108 
00109 ///////////////////////////////////////////////////////////////////////////
00110 //getGageKernelType
00111 ///////////////////////////////////////////////////////////////////////////
00112 int NrroKernel::getGageKernelType(int type) const
00113 {
00114 
00115    switch(type)
00116    {
00117    case VALUE:
00118       return gageKernel00;
00119    case DERIV:
00120       return gageKernel11;
00121    case DERIV2:
00122       return gageKernel22;
00123    };
00124 
00125    return 0;
00126 }
00127 
00128 ///////////////////////////////////////////////////////////////////////////
00129 //getNrrdKernel
00130 ///////////////////////////////////////////////////////////////////////////
00131 NrrdKernel *NrroKernel::getNrrdKernel(int type) const
00132 {
00133    switch(_kind)
00134    {
00135    case Box:
00136       switch(type)
00137       {
00138       case VALUE:
00139          return nrrdKernelBox;
00140       case DERIV:
00141          return nrrdKernelCentDiff;
00142       case DERIV2:
00143          return nrrdKernelBCCubicDD;
00144       };
00145    case Tent:
00146       switch(type)
00147       {
00148       case VALUE:
00149          return nrrdKernelTent;
00150       case DERIV:
00151          return nrrdKernelCentDiff;
00152       case DERIV2:
00153          return nrrdKernelBCCubicDD;
00154       }
00155    case Cubic:
00156       switch(type)
00157       {
00158       case VALUE:
00159          return nrrdKernelBCCubic;
00160       case DERIV:
00161          return nrrdKernelBCCubicD;
00162       case DERIV2:
00163          return nrrdKernelBCCubicDD;
00164       }
00165    case Quartic:
00166       switch(type)
00167       {
00168       case VALUE:
00169          return nrrdKernelAQuartic;
00170       case DERIV:
00171          return nrrdKernelAQuarticD;
00172       case DERIV2:
00173          return nrrdKernelAQuarticDD;
00174       }
00175    case Gaussian:
00176       switch(type)
00177       {
00178       case VALUE:
00179          return nrrdKernelGaussian;
00180       case DERIV:
00181          return nrrdKernelGaussianD;
00182       case DERIV2:
00183          return nrrdKernelGaussianDD;
00184       };
00185       break;
00186    default:
00187       cerr << "NrroKernel::getNrrdKernel, Error, Kernel Type Unknown" << endl;
00188    }
00189 
00190    return 0;
00191 }
00192 
00193 const double *NrroKernel::getParams(int type) const
00194 {
00195    if((Box == _kind || Tent == _kind) && DERIV2 == type)
00196    {
00197       return _spareParams;
00198    }
00199 
00200    return _params;
00201 }
00202 
00203 

Send questions, comments, and bug reports to:
jmk