Authors belong to:
- University of LYON http://www.universite-lyon.fr/
- - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - Léon Bérard cancer center http://www.centreleonberard.fr
- CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
This software is distributed WITHOUT ANY WARRANTY; without even
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
- ======================================================================-====*/
+ ===========================================================================**/
#ifndef CLITKCROPLIKEIMAGEFILTER_TXX
#define CLITKCROPLIKEIMAGEFILTER_TXX
// clitk
#include "clitkCommon.h"
+#include "clitkPasteImageFilter.h"
// itk
-#include "itkPasteImageFilter.h"
+//#include "itkPasteImageFilter.h"
//--------------------------------------------------------------------
template <class ImageType>
template <class ImageType>
void
clitk::CropLikeImageFilter<ImageType>::
-GenerateOutputInformation() {
- DD("GenerateOutputInformation");
+GenerateOutputInformation() {
// Get input pointers
ImageConstPointer input = dynamic_cast<const ImageType*>(itk::ProcessObject::GetInput(0));
likeStart = m_LikeImage->GetLargestPossibleRegion().GetIndex();
likeOrigin = m_LikeImage->GetOrigin();
likeSpacing = m_LikeImage->GetSpacing();
+ output->CopyInformation(m_LikeImage);
}
else {
// Only load the header (allows to use 'like' with any image type)
for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
if (likeSpacing[i] != input->GetSpacing()[i]) {
clitkExceptionMacro("Images must have the same spacing, but input's spacing(" << i
- <<") is " << input->GetSpacing()[i] << " while like's spacing(" << i
- << ") is " << likeSpacing[i] << ".");
+ <<") is " << input->GetSpacing()[i] << " while the spacing(" << i
+ << ") of 'like' is " << likeSpacing[i] << ".");
}
}
+
+ // Check that we must crop along each dimension. If not, we use the
+ // size of the input image
+ for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
+ if (m_CropAlongThisDimension[i] == false) {
+ likeStart[i] = input->GetLargestPossibleRegion().GetIndex()[i];
+ likeSize[i] = input->GetLargestPossibleRegion().GetSize()[i];
+ }
+ }
+
// Define output region
m_OutputRegion.SetIndex(likeStart);
m_OutputRegion.SetSize(likeSize);
output->SetBufferedRegion(m_OutputRegion);
output->SetSpacing(likeSpacing);
output->SetOrigin(likeOrigin);
+ output->Allocate(); // Needed ?
// get startpoint source/dest
// for each dim
for(int i=0; i<ImageType::ImageDimension; i++)
s[i] = m_StopSourceIndex[i]-m_StartSourceIndex[i];
m_Region.SetSize(s);
+
}
//--------------------------------------------------------------------
// Get output pointer, fill with Background
ImagePointer output = this->GetOutput(0);
- output->Allocate();
+
output->FillBuffer(GetBackgroundValue());
// Paste image inside
- typedef itk::PasteImageFilter<ImageType,ImageType> PasteFilterType;
+ typedef clitk::PasteImageFilter<ImageType,ImageType> PasteFilterType;
typename PasteFilterType::Pointer pasteFilter = PasteFilterType::New();
+ //pasteFilter->ReleaseDataFlagOn(); // change nothing ?
+ // pasteFilter->InPlaceOn(); // makt it seg fault
pasteFilter->SetSourceImage(input);
pasteFilter->SetDestinationImage(output);
pasteFilter->SetDestinationIndex(m_StartDestIndex);
pasteFilter->Update();
// Get (graft) output (SetNthOutput does not fit here because of Origin).
- // this->GraftOutput(cropFilter->GetOutput());
this->GraftOutput(pasteFilter->GetOutput());
}
//--------------------------------------------------------------------