X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=itk%2FclitkSegmentationUtils.txx;h=aef202f00ec849a3cb6e3428b59680c339864135;hb=a89d8140714c44dd29d96f6482dd90c40ad175b4;hp=7f52aea61572e3591803aa805e7d408d7f37d4fb;hpb=c5fff0a0f4211d43cb7f9140883da46d84d05117;p=clitk.git diff --git a/itk/clitkSegmentationUtils.txx b/itk/clitkSegmentationUtils.txx index 7f52aea..aef202f 100644 --- a/itk/clitkSegmentationUtils.txx +++ b/itk/clitkSegmentationUtils.txx @@ -36,7 +36,7 @@ void clitk::ComputeBBFromImageRegion(typename ImageType::Pointer image, IndexType lastIndex; for(unsigned int i=0; iGetImageDimension(); i++) { firstIndex[i] = region.GetIndex()[i]; - lastIndex[i] = region.GetSize()[i]; + lastIndex[i] = firstIndex[i]+region.GetSize()[i]; } typedef itk::BoundingBoxGetMaximum(); PointType mins = bb->GetMinimum(); for(unsigned int i=0; iGetSpacing()[i]); + // DD(maxs[i]); + // DD(mins[i]); + // DD((maxs[i] - mins[i])/image->GetSpacing()[i]); + regionSize[i] = lrint((maxs[i] - mins[i])/image->GetSpacing()[i]); + // DD(regionSize[i]); } // Create region @@ -111,8 +115,9 @@ void clitk::ComputeRegionFromBB(typename ImageType::Pointer image, //-------------------------------------------------------------------- template typename ImageType::Pointer -clitk::SetBackground(typename ImageType::ConstPointer input, - typename TMaskImageType::ConstPointer mask, +clitk::SetBackground(//typename ImageType::ConstPointer input, + const ImageType * input, + const TMaskImageType * mask, typename TMaskImageType::PixelType maskBG, typename ImageType::PixelType outValue) { typedef clitk::SetBackgroundImageFilter SetBackgroundImageFilterType; @@ -127,6 +132,24 @@ clitk::SetBackground(typename ImageType::ConstPointer input, //-------------------------------------------------------------------- +//-------------------------------------------------------------------- +template +int clitk::GetNumberOfConnectedComponentLabels(typename ImageType::Pointer input, + typename ImageType::PixelType BG, + bool isFullyConnected) { + // Connected Component label + typedef itk::ConnectedComponentImageFilter ConnectFilterType; + typename ConnectFilterType::Pointer connectFilter = ConnectFilterType::New(); + connectFilter->SetInput(input); + connectFilter->SetBackgroundValue(BG); + connectFilter->SetFullyConnected(isFullyConnected); + connectFilter->Update(); + + // Return result + return connectFilter->GetObjectCount(); +} +//-------------------------------------------------------------------- + //-------------------------------------------------------------------- template typename ImageType::Pointer @@ -134,16 +157,18 @@ clitk::Labelize(typename ImageType::Pointer input, typename ImageType::PixelType BG, bool isFullyConnected, int minimalComponentSize) { - + // InternalImageType for storing large number of component + typedef itk::Image InternalImageType; + // Connected Component label - typedef itk::ConnectedComponentImageFilter ConnectFilterType; + typedef itk::ConnectedComponentImageFilter ConnectFilterType; typename ConnectFilterType::Pointer connectFilter = ConnectFilterType::New(); connectFilter->SetInput(input); connectFilter->SetBackgroundValue(BG); connectFilter->SetFullyConnected(isFullyConnected); // Sort by size and remove too small area. - typedef itk::RelabelComponentImageFilter RelabelFilterType; + typedef itk::RelabelComponentImageFilter RelabelFilterType; typename RelabelFilterType::Pointer relabelFilter = RelabelFilterType::New(); relabelFilter->InPlaceOn(); relabelFilter->SetInput(connectFilter->GetOutput());