Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "mitkPadImageFilter.h"
00020 #include "mitkImageCast.h"
00021
00022 #include "itkBinaryThresholdImageFilter.h"
00023 #include "itkConstantPadImageFilter.h"
00024
00025 mitk::PadImageFilter::PadImageFilter()
00026 {
00027 this->SetNumberOfInputs(2);
00028 this->SetNumberOfRequiredInputs(2);
00029 m_BinaryFilter = false;
00030
00031 m_PadConstant = -32766;
00032 m_LowerThreshold = -32766;
00033 m_UpperThreshold = -32765;
00034 }
00035
00036 mitk::PadImageFilter::~PadImageFilter()
00037 {
00038 }
00039
00040
00041 void mitk::PadImageFilter::GenerateData()
00042 {
00043 mitk::Image::ConstPointer image = this->GetInput( 0 );
00044 mitk::Image::ConstPointer referenceImage = this->GetInput( 1 );
00045
00046 typedef itk::Image< short, 3 > ImageType;
00047 ImageType::Pointer itkImage = ImageType::New();
00048 mitk::CastToItkImage( image, itkImage );
00049
00050
00051 mitk::Geometry3D *imageGeometry = image->GetGeometry();
00052 mitk::Point3D origin = imageGeometry->GetOrigin();
00053 mitk::Vector3D spacing = imageGeometry->GetSpacing();
00054
00055 mitk::Geometry3D *referenceImageGeometry = referenceImage->GetGeometry();
00056 mitk::Point3D referenceOrigin = referenceImageGeometry->GetOrigin();
00057 mitk::Vector3D referenceSpacing = referenceImageGeometry->GetSpacing();
00058
00059
00060 double outputOrigin[3];
00061 unsigned long padLowerBound[3];
00062 unsigned long padUpperBound[3];
00063
00064 int i;
00065 for ( i = 0; i < 3; ++i )
00066 {
00067 outputOrigin[i] = referenceOrigin[i];
00068
00069 padLowerBound[i] = static_cast< unsigned long >
00070 ((origin[i] - referenceOrigin[i]) / spacing[i] + 0.5);
00071
00072 padUpperBound[i] = referenceImage->GetDimension( i )
00073 - image->GetDimension( i ) - padLowerBound[i];
00074 }
00075
00076
00077
00078 itkImage->SetOrigin( outputOrigin );
00079
00080
00081 typedef itk::ConstantPadImageFilter< ImageType, ImageType > PadFilterType;
00082 PadFilterType::Pointer padFilter = PadFilterType::New();
00083 padFilter->SetInput( itkImage );
00084 padFilter->SetConstant( m_PadConstant );
00085 padFilter->SetPadLowerBound( padLowerBound );
00086 padFilter->SetPadUpperBound( padUpperBound );
00087
00088 mitk::Image::Pointer outputImage = this->GetOutput();
00089
00090
00091
00092
00093 if ( m_BinaryFilter )
00094 {
00095 typedef itk::Image< char, 3 > BinaryImageType;
00096 typedef itk::BinaryThresholdImageFilter< ImageType, BinaryImageType >
00097 BinaryFilterType;
00098 BinaryFilterType::Pointer binaryFilter = BinaryFilterType::New();
00099
00100 binaryFilter->SetInput( padFilter->GetOutput() );
00101 binaryFilter->SetLowerThreshold( m_LowerThreshold );
00102 binaryFilter->SetUpperThreshold( m_UpperThreshold );
00103 binaryFilter->SetInsideValue( 0 );
00104 binaryFilter->SetOutsideValue( 1 );
00105 binaryFilter->Update();
00106
00107 mitk::CastToMitkImage( binaryFilter->GetOutput(), outputImage );
00108 }
00109 else
00110 {
00111 padFilter->Update();
00112 mitk::CastToMitkImage( padFilter->GetOutput(), outputImage );
00113 }
00114
00115 outputImage->SetRequestedRegionToLargestPossibleRegion();
00116 }