+ return working_image;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<class ImageType>
+typename ImageType::Pointer
+clitk::KeepLabels(typename ImageType::Pointer input,
+ typename ImageType::PixelType BG,
+ typename ImageType::PixelType FG,
+ typename ImageType::PixelType firstKeep,
+ typename ImageType::PixelType lastKeep,
+ bool useLastKeep) {
+ typedef itk::BinaryThresholdImageFilter<ImageType, ImageType> BinarizeFilterType;
+ typename BinarizeFilterType::Pointer binarizeFilter = BinarizeFilterType::New();
+ binarizeFilter->SetInput(input);
+ binarizeFilter->SetLowerThreshold(firstKeep);
+ if (useLastKeep) binarizeFilter->SetUpperThreshold(lastKeep);
+ binarizeFilter->SetInsideValue(FG);
+ binarizeFilter->SetOutsideValue(BG);
+ binarizeFilter->Update();
+ return binarizeFilter->GetOutput();
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<class ImageType>
+typename ImageType::Pointer
+clitk::LabelizeAndSelectLabels(typename ImageType::Pointer input,
+ typename ImageType::PixelType BG,
+ typename ImageType::PixelType FG,
+ bool isFullyConnected,
+ int minimalComponentSize,
+ LabelizeParameters<typename ImageType::PixelType> * param)
+{
+ typename ImageType::Pointer working_image;
+ working_image = Labelize<ImageType>(input, BG, isFullyConnected, minimalComponentSize);
+ working_image = RemoveLabels<ImageType>(working_image, BG, param->GetLabelsToRemove());
+ working_image = KeepLabels<ImageType>(working_image,
+ BG, FG,
+ param->GetFirstKeep(),
+ param->GetLastKeep(),
+ param->GetUseLastKeep());
+ return working_image;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<class ImageType>
+typename ImageType::Pointer
+clitk::EnlargeImageLike(typename ImageType::Pointer input,
+ typename ImageType::Pointer like,
+ typename ImageType::PixelType backgroundValue)
+{
+ if (!HaveSameSpacing<ImageType, ImageType>(input, like)) {
+ FATAL("Images must have the same spacing");
+ }
+
+ typename ImageType::Pointer output = ImageType::New();
+ typename ImageType::SizeType size;
+ for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
+ size[i] = lrint((like->GetLargestPossibleRegion().GetSize()[i]*like->GetSpacing()[i])/
+ (double)like->GetSpacing()[i]);
+ }
+ // DD(size);
+ typename ImageType::RegionType region;
+ region.SetSize(size);
+ output->SetRegions(region);
+ output->SetSpacing(like->GetSpacing());
+ output->SetOrigin(like->GetOrigin());
+ output->Allocate();
+ output->FillBuffer(backgroundValue);
+ typedef itk::PasteImageFilter<ImageType,ImageType> PasteFilterType;
+ typename PasteFilterType::Pointer pasteFilter = PasteFilterType::New();
+ typename PasteFilterType::InputImageIndexType index;
+ for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
+ index[i] = lrint((input->GetOrigin()[i] - like->GetOrigin()[i])/(double)input->GetSpacing()[i]);
+ }
+ // DD(index);
+ pasteFilter->SetSourceImage(input);
+ pasteFilter->SetDestinationImage(output);
+ pasteFilter->SetDestinationIndex(index);
+ pasteFilter->SetSourceRegion(input->GetLargestPossibleRegion());
+ pasteFilter->Update();
+ return pasteFilter->GetOutput();
+}
+//--------------------------------------------------------------------