X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkCropImageGenericFilter.cxx;h=aeae1f988806c100c6198f407f59baefc5134222;hb=54de2903ffa1d7f444d2a38609de58f8f2ab0d2d;hp=b062976b678b4dac3abe72804dd6dbda572c81aa;hpb=01efc03d2d7e88c82197f8f500239573c8b67c39;p=clitk.git diff --git a/tools/clitkCropImageGenericFilter.cxx b/tools/clitkCropImageGenericFilter.cxx index b062976..aeae1f9 100644 --- a/tools/clitkCropImageGenericFilter.cxx +++ b/tools/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); }