17 #ifndef __itkJoinSeriesImageFilter_txx
18 #define __itkJoinSeriesImageFilter_txx
28 template <
class TInputImage,
class TOutputImage>
37 template <
class TInputImage,
class TOutputImage>
42 Superclass::PrintSelf(os,indent);
44 os << indent <<
"Spacing: " << m_Spacing << std::endl;
45 os << indent <<
"Origin: " << m_Origin << std::endl;
51 template <
class TInputImage,
class TOutputImage>
63 if ( !outputPtr || !inputPtr)
71 this->CallCopyInputRegionToOutputRegion(outputLargestPossibleRegion,
72 inputPtr->GetLargestPossibleRegion());
75 outputLargestPossibleRegion.SetSize(InputImageDimension,
76 this->GetNumberOfInputs());
78 outputPtr->SetLargestPossibleRegion( outputLargestPossibleRegion );
92 const typename InputImageType::SpacingType&
94 const typename InputImageType::PointType&
95 inputOrigin = inputPtr->GetOrigin();
97 typename OutputImageType::SpacingType outputSpacing;
98 typename OutputImageType::PointType outputOrigin;
102 for (ii=0; ii < InputImageDimension; ++ii)
104 outputSpacing[ii] = inputSpacing[ii];
105 outputOrigin[ii] = inputOrigin[ii];
107 for (; ii < OutputImageDimension; ++ii)
109 outputSpacing[ii] = 1.0;
110 outputOrigin[ii] = 0.0;
114 outputSpacing[InputImageDimension] = this->GetSpacing();
115 outputOrigin[InputImageDimension] = this->GetOrigin();
118 outputPtr->SetSpacing( outputSpacing );
119 outputPtr->SetOrigin( outputOrigin );
123 typedef typename InputImageType::DirectionType InputDirectionType;
124 typedef typename OutputImageType::DirectionType OutputDirectionType;
125 InputDirectionType inputDir = inputPtr->GetDirection();
126 unsigned int inputdim = InputImageType::GetImageDimension();
127 unsigned int outputdim = OutputImageType::GetImageDimension();
128 OutputDirectionType outputDir = outputPtr->GetDirection();
129 for(
unsigned int i = 0; i < outputdim; i++)
131 for(
unsigned int j = 0; j < outputdim; j++)
133 if(j < inputdim && i < inputdim)
135 outputDir[i][j] = inputDir[i][j];
139 outputDir[i][j] = i == j ? 1.0 : 0.0;
143 outputPtr->SetDirection(outputDir);
148 itkExceptionMacro(<<
"itk::JoinSeriesImageFilter::GenerateOutputInformation "
149 <<
"cannot cast input to "
155 template <
class TInputImage,
class TOutputImage>
160 Superclass::GenerateInputRequestedRegion();
162 if (!this->GetOutput())
167 IndexValueType begin = outputRegion.GetIndex(InputImageDimension);
168 IndexValueType end = begin + outputRegion.GetSize(InputImageDimension);
169 for (
IndexValueType idx = 0; idx < this->GetNumberOfInputs(); ++idx)
186 if ( begin <= idx && idx < end )
188 this->CallCopyOutputRegionToInputRegion(inputRegion, outputRegion);
193 inputRegion = inputPtr->GetBufferedRegion();
195 inputPtr->SetRequestedRegion(inputRegion);
200 template <
class TInputImage,
class TOutputImage>
206 itkDebugMacro(<<
"Actually executing");
208 ProgressReporter progress(
this, threadId, outputRegionForThread.GetNumberOfPixels());
211 outputRegion.SetSize(InputImageDimension, 1);
214 this->CallCopyOutputRegionToInputRegion(inputRegion, outputRegionForThread);
216 IndexValueType begin = outputRegionForThread.GetIndex(InputImageDimension);
218 begin + outputRegionForThread.GetSize(InputImageDimension);
221 outputRegion.SetIndex(InputImageDimension, idx);
223 this->GetOutput(), outputRegion);
225 this->GetInput(idx), inputRegion);
233 progress.CompletedPixel();