freImageMerger.txx

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: freImageMerger.txx,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 #ifndef __freImageMerger_txx
00023 #define __freImageMerger_txx
00024 
00025 #include "freImageMerger.h"
00026 #include "freExceptions.h"
00027 
00028 #include "freDifferenceToRGBImageFilter.h"
00029 
00030 #include "itkConstrainedValueAdditionImageFilter.h" 
00031 #include "itkWeightedAddImageFilter.h" 
00032 #include "itkCheckerBoardImageFilter.h"
00033 #include "itkSquaredDifferenceImageFilter.h" 
00034 #include "itkSqrtImageFilter.h"
00035 
00036 namespace FREE
00037 {
00038 
00039 template <class TImage>
00040 typename ImageMerger<TImage>::RGBImagePointer
00041 ImageMerger<TImage>::
00042 GenerateAlternationImage(ImageType* pInput1, ImageType* pInput2, ImageType* pInput3)
00043 {
00044   if (!pInput1) throwStaticExceptionMacro("Cannot compute alternation image: Input1 is null");
00045   if (!pInput2) throwStaticExceptionMacro("Cannot compute alternation image: Input2 is null");
00046   if (!pInput3) throwStaticExceptionMacro("Cannot compute alternation image: Input3 is null");
00047 
00048   typedef FREE::DifferenceToRGBImageFilter<ImageType, ImageType, RGBImageType> DifRGBFilterType;
00049 
00050         ImagePointer smpDiff1 = GenerateDifferenceImage(pInput1, pInput2);
00051         ImagePointer smpDiff2 = GenerateDifferenceImage(pInput1, pInput3);
00052 
00053         typename DifRGBFilterType::Pointer difFilter = DifRGBFilterType::New();
00054 
00055         difFilter->SetInput1( smpDiff1 );
00056         difFilter->SetInput2( smpDiff2 );
00057         difFilter->Update();
00058 
00059         typename RGBImageType::Pointer smpResult = difFilter->GetOutput();
00060 
00061   return smpResult;
00062 };
00063 
00064 template <class TImage>
00065 typename ImageMerger<TImage>::RGBImagePointer
00066 ImageMerger<TImage>::
00067 GenerateAlternationImage(ImageType* pInput3) const
00068 {
00069   return GenerateAlternationImage(m_Input1, m_Input2, pInput3);
00070 };
00071 
00072 template <class TImage>
00073 typename ImageMerger<TImage>::ImagePointer
00074 ImageMerger<TImage>::
00075 GenerateBlendImage(ImageType* pInput1, ImageType* pInput2, unsigned int iMergeValue)
00076 {
00077   if (!pInput1) throwStaticExceptionMacro("Cannot compute blend image: Input1 is null");
00078   if (!pInput2) throwStaticExceptionMacro("Cannot compute blend image: Input2 is null");
00079 
00080   typedef itk::WeightedAddImageFilter<ImageType, ImageType, ImageType> FilterType;
00081 
00082         typename FilterType::Pointer filter = FilterType::New();
00083         filter->SetInput1( pInput1 );
00084         filter->SetInput2( pInput2 );
00085         filter->SetAlpha(iMergeValue/100.0);
00086         filter->Update();
00087         ImagePointer smpResult = filter->GetOutput();
00088 
00089   return smpResult;
00090 };
00091 
00092 template <class TImage>
00093 typename ImageMerger<TImage>::ImagePointer
00094 ImageMerger<TImage>::
00095 GenerateBlendImage(unsigned int iMergeValue) const
00096 {
00097   return GenerateBlendImage(m_Input1, m_Input2, iMergeValue);
00098 };
00099 
00100 template <class TImage>
00101 typename ImageMerger<TImage>::ImagePointer
00102 ImageMerger<TImage>::
00103 GenerateCheckerImage(ImageType* pInput1, ImageType* pInput2, unsigned int iPatternSize)
00104 {
00105   if (!pInput1) throwStaticExceptionMacro("Cannot compute checker: Input1 is null");
00106   if (!pInput2) throwStaticExceptionMacro("Cannot compute checker: Input2 is null");
00107         
00108   typedef itk::CheckerBoardImageFilter<ImageType> FilterType;
00109 
00110         typename FilterType::PatternArrayType pattern;
00111         pattern.Fill(iPatternSize);
00112 
00113         typename FilterType::Pointer filter = FilterType::New();
00114         filter->SetInput1( pInput1 );
00115         filter->SetInput2( pInput2 );
00116         filter->SetCheckerPattern(pattern);
00117         filter->Update();
00118         ImagePointer result = filter->GetOutput();
00119   return result;
00120 };
00121 
00122 template <class TImage>
00123 typename ImageMerger<TImage>::ImagePointer
00124 ImageMerger<TImage>::
00125 GenerateCheckerImage(unsigned int iPatternSize) const
00126 {
00127   return GenerateCheckerImage(m_Input1, m_Input2, iPatternSize);
00128 };
00129 
00130 template <class TImage>
00131 typename ImageMerger<TImage>::ImagePointer
00132 ImageMerger<TImage>::
00133 GenerateDifferenceImage(ImageType* pInput1, ImageType* pInput2)
00134 {
00135         if (!pInput1) throwStaticExceptionMacro("Cannot compute difference Input1 is null");
00136         if (!pInput2) throwStaticExceptionMacro("Cannot compute difference Input2 is null");
00137 
00138   typedef itk::SquaredDifferenceImageFilter<ImageType, ImageType, ImageType> DifFilterType;
00139         typedef itk::SqrtImageFilter<ImageType, ImageType> SqrtFilterType;
00140 
00141         typename DifFilterType::Pointer difFilter = DifFilterType::New();
00142         typename SqrtFilterType::Pointer sqrtFilter = SqrtFilterType::New();
00143 
00144         difFilter->SetInput1( pInput1 );
00145         difFilter->SetInput2( pInput2 );
00146         sqrtFilter->SetInput(difFilter->GetOutput());
00147         sqrtFilter->Update();
00148         return sqrtFilter->GetOutput();
00149 };
00150 
00151 template <class TImage>
00152 typename ImageMerger<TImage>::ImagePointer
00153 ImageMerger<TImage>::
00154 GenerateDifferenceImage() const
00155 {
00156   return GenerateDifferenceImage(m_Input1, m_Input2);
00157 };
00158 
00159 template <class TImage>
00160 typename ImageMerger<TImage>::RGBImagePointer
00161 ImageMerger<TImage>::
00162 GenerateColoredDifferenceImage(ImageType* pInput1, ImageType* pInput2)
00163 {
00164         if (!pInput1) throwStaticExceptionMacro("Cannot compute colored difference Input1 is null");
00165         if (!pInput2) throwStaticExceptionMacro("Cannot compute colored difference Input2 is null");
00166 
00167   typedef FREE::DifferenceToRGBImageFilter<ImageType, ImageType, RGBImageType> DifRGBFilterType;
00168 
00169         typename DifRGBFilterType::Pointer difFilter = DifRGBFilterType::New();
00170 
00171         difFilter->SetInput1( pInput1 );
00172         difFilter->SetInput2( pInput2 );
00173         difFilter->Update();
00174 
00175         RGBImagePointer smpResult = difFilter->GetOutput();
00176   return smpResult;
00177 };
00178 
00179 template <class TImage>
00180 typename ImageMerger<TImage>::RGBImagePointer
00181 ImageMerger<TImage>::
00182 GenerateColoredDifferenceImage() const
00183 {
00184   return GenerateColoredDifferenceImage(m_Input1, m_Input2);
00185 };
00186 
00187 template <class TImage>
00188 ImageMerger<TImage>::
00189 ImageMerger(ImageType* pInput1, ImageType* pInput2)
00190 {
00191   m_Input1 = pInput1;
00192   m_Input2 = pInput2;
00193 };
00194 
00195 template <class TImage>
00196 ImageMerger<TImage>::
00197 ~ImageMerger() {};
00198 
00199 } //end of namespace free
00200 
00201 #endif

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