/*========================================================================= Program: vv http://www.creatis.insa-lyon.fr/rio/vv Authors belong to: - University of LYON http://www.universite-lyon.fr/ - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the copyright notices for more information. It is distributed under dual licence - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ #ifndef CLITKSEGMENTATIONUTILS_H #define CLITKSEGMENTATIONUTILS_H // clitk #include "clitkCommon.h" #include "clitkAutoCropFilter.h" #include "clitkLabelizeParameters.h" // itk #include namespace clitk { //-------------------------------------------------------------------- template void ComputeBBFromImageRegion(typename ImageType::Pointer image, typename ImageType::RegionType region, typename itk::BoundingBox::Pointer bb); //-------------------------------------------------------------------- template void ComputeBBIntersection(typename itk::BoundingBox::Pointer bbo, typename itk::BoundingBox::Pointer bbi1, typename itk::BoundingBox::Pointer bbi2); //-------------------------------------------------------------------- template void ComputeRegionFromBB(typename ImageType::Pointer image, const typename itk::BoundingBox::Pointer bb, typename ImageType::RegionType & region); //-------------------------------------------------------------------- template typename TInternalImageType::Pointer SetBackground(const TInternalImageType * input, const TMaskInternalImageType * mask, typename TMaskInternalImageType::PixelType maskBG, typename TInternalImageType::PixelType outValue); //-------------------------------------------------------------------- //-------------------------------------------------------------------- template int GetNumberOfConnectedComponentLabels(typename ImageType::Pointer input, typename ImageType::PixelType BG, bool isFullyConnected); //-------------------------------------------------------------------- //-------------------------------------------------------------------- template typename TImageType::Pointer Labelize(const TImageType * input, typename TImageType::PixelType BG, bool isFullyConnected, int minimalComponentSize); //-------------------------------------------------------------------- //-------------------------------------------------------------------- template typename ImageType::Pointer RemoveLabels(typename ImageType::Pointer input, typename ImageType::PixelType BG, std::vector & labelsToRemove); //-------------------------------------------------------------------- //-------------------------------------------------------------------- template typename ImageType::Pointer AutoCrop(typename ImageType::Pointer input, typename ImageType::PixelType BG) { typedef clitk::AutoCropFilter AutoCropFilterType; typename AutoCropFilterType::Pointer autoCropFilter = AutoCropFilterType::New(); autoCropFilter->SetInput(input); autoCropFilter->SetBackgroundValue(BG); autoCropFilter->Update(); return autoCropFilter->GetOutput(); } //-------------------------------------------------------------------- //-------------------------------------------------------------------- template typename TImageType::Pointer KeepLabels(const TImageType * input, typename TImageType::PixelType BG, typename TImageType::PixelType FG, typename TImageType::PixelType firstKeep, typename TImageType::PixelType lastKeep, bool useLastKeep); //-------------------------------------------------------------------- //-------------------------------------------------------------------- template typename TImageType::Pointer LabelizeAndSelectLabels(typename TImageType::Pointer input, typename TImageType::PixelType BG, typename TImageType::PixelType FG, bool isFullyConnected, int minimalComponentSize, LabelizeParameters * param); //-------------------------------------------------------------------- template typename ImageType::Pointer ResizeImageLike(typename ImageType::Pointer input, typename ImageType::Pointer like, typename ImageType::PixelType BG); //-------------------------------------------------------------------- template typename MaskImageType::Pointer SliceBySliceRelativePosition(const MaskImageType * input, const MaskImageType * object, int direction, double threshold, std::string orientation, bool uniqueConnectedComponent=false, double spacing=-1, bool notflag=false); //-------------------------------------------------------------------- // In a binary image, search for the point belonging to the FG that // is the most exterma in the direction 'direction' (or in the // opposite if notFlag is given). if 'point' and 'distanceMax' are // given, do not consider points that are away from 'point' more // than 'distanceMax' template typename SliceType::PointType FindExtremaPointInAGivenDirection(const SliceType * input, typename SliceType::PixelType bg, int direction, bool notFlag, typename SliceType::PointType point, double distanceMax); //-------------------------------------------------------------------- //-------------------------------------------------------------------- template typename ImageType::Pointer CropImageAlongOneAxis(typename ImageType::Pointer image, int dim, double min, double max, bool autoCrop = false, typename ImageType::PixelType BG=0); //-------------------------------------------------------------------- } #include "clitkSegmentationUtils.txx" #endif