X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkCropImageGenericFilter.cxx;h=aeae1f988806c100c6198f407f59baefc5134222;hb=aeb947ddd800ab06cf4916c9371bca3832056b4f;hp=b8d77445eaa2dbd3f89703d18ca50167eb31a5c9;hpb=119a42cb1444930c78314e862e590f54c2f7678d;p=clitk.git diff --git a/tools/clitkCropImageGenericFilter.cxx b/tools/clitkCropImageGenericFilter.cxx old mode 100755 new mode 100644 index b8d7744..aeae1f9 --- a/tools/clitkCropImageGenericFilter.cxx +++ b/tools/clitkCropImageGenericFilter.cxx @@ -3,7 +3,7 @@ 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 @@ -14,7 +14,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html -======================================================================-====*/ +===========================================================================**/ #ifndef clitkCropImageGenericFilter_cxx #define clitkCropImageGenericFilter_cxx @@ -79,6 +79,7 @@ namespace clitk { // Reading input typename ImageType::Pointer input = this->template GetInput(0); + typename ImageType::RegionType input_region = input->GetLargestPossibleRegion(); // Check options if (mArgsInfo.BG_given && mArgsInfo.like_given) @@ -123,10 +124,11 @@ namespace clitk // ------------------------------------------------ typename ImageType::SizeType lSize; typename ImageType::SizeType uSize; + if (mArgsInfo.verbose_flag) std::cout << "input region " << input_region << std::endl; if (mArgsInfo.boundingBox_given) { for(unsigned int i=0; iGetLargestPossibleRegion().GetSize()[i]-mArgsInfo.boundingBox_arg[2*i+1]-1; + uSize[i] = input_region.GetSize()[i]-mArgsInfo.boundingBox_arg[2*i+1]-1; } } else { @@ -141,6 +143,11 @@ namespace clitk } else uSize.Fill(0); } + + if (mArgsInfo.verbose_flag) { + std::cout << "lower " << lSize << " upper " << uSize << std::endl; + } + typedef itk::CropImageFilter CropImageFilterType; typename CropImageFilterType::Pointer filter=CropImageFilterType::New(); filter->SetInput(input); @@ -157,7 +164,22 @@ namespace clitk origin.Fill(itk::NumericTraits::Zero); output->SetOrigin(origin); } - + + // adjust image origin and force index to zero + typename ImageType::RegionType region = output->GetLargestPossibleRegion(); + typename ImageType::IndexType index = region.GetIndex(); + typename ImageType::PointType origin = output->GetOrigin(); + typename ImageType::SpacingType spacing = output->GetSpacing(); + if (mArgsInfo.verbose_flag) std::cout << "origin before crop " << origin << std::endl; + for (unsigned int i = 0; i < output->GetImageDimension(); i++) + origin[i] += index[i]*spacing[i]; + if (mArgsInfo.verbose_flag) std::cout << "origin after crop " << origin << std::endl; + output->SetOrigin(origin); + + index.Fill(itk::NumericTraits::Zero); + region.SetIndex(index); + output->SetRegions(region); + // Write/Save results this->template SetNextOutput(output); }