X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=itk%2FclitkSegmentationUtils.txx;h=c8f976e69449f2d95456e1a9c1a3a1c6d4e77064;hb=c91bc7359270b60e51abdc42dddf0a35c11ea604;hp=dccfc35df72daee8087047b54757168e1909ed46;hpb=c0274b5a8535f5ed75fe9939f3a12f86e8e1ef3c;p=clitk.git diff --git a/itk/clitkSegmentationUtils.txx b/itk/clitkSegmentationUtils.txx index dccfc35..c8f976e 100644 --- a/itk/clitkSegmentationUtils.txx +++ b/itk/clitkSegmentationUtils.txx @@ -192,6 +192,53 @@ clitk::Labelize(const ImageType * input, relabelFilter->SetMinimumObjectSize(minimalComponentSize); relabelFilter->Update(); + // DD(relabelFilter->GetNumberOfObjects()); + // DD(relabelFilter->GetOriginalNumberOfObjects()); + // DD(relabelFilter->GetSizeOfObjectsInPhysicalUnits()[0]); + + // Return result + typename ImageType::Pointer output = relabelFilter->GetOutput(); + return output; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +/* + Warning : in this cas, we consider outputType like inputType, not + InternalImageType. Be sure it fits. + */ +template +typename ImageType::Pointer +clitk::LabelizeAndCountNumberOfObjects(const ImageType * input, + typename ImageType::PixelType BG, + bool isFullyConnected, + int minimalComponentSize, + int & nb) { + // InternalImageType for storing large number of component + typedef itk::Image InternalImageType; + + // Connected Component label + typedef itk::ConnectedComponentImageFilter ConnectFilterType; + typename ConnectFilterType::Pointer connectFilter = ConnectFilterType::New(); + // connectFilter->ReleaseDataFlagOn(); + connectFilter->SetInput(input); + connectFilter->SetBackgroundValue(BG); + connectFilter->SetFullyConnected(isFullyConnected); + + // Sort by size and remove too small area. + typedef itk::RelabelComponentImageFilter RelabelFilterType; + typename RelabelFilterType::Pointer relabelFilter = RelabelFilterType::New(); + // relabelFilter->ReleaseDataFlagOn(); // if yes, fail when ExplosionControlledThresholdConnectedImageFilter ??? + relabelFilter->SetInput(connectFilter->GetOutput()); + relabelFilter->SetMinimumObjectSize(minimalComponentSize); + relabelFilter->Update(); + + nb = relabelFilter->GetNumberOfObjects(); + // DD(relabelFilter->GetNumberOfObjects()); + // DD(relabelFilter->GetOriginalNumberOfObjects()); + // DD(relabelFilter->GetSizeOfObjectsInPhysicalUnits()[0]); + // Return result typename ImageType::Pointer output = relabelFilter->GetOutput(); return output; @@ -199,6 +246,7 @@ clitk::Labelize(const ImageType * input, //-------------------------------------------------------------------- + //-------------------------------------------------------------------- template typename ImageType::Pointer @@ -699,14 +747,11 @@ clitk::SliceBySliceSetBackgroundFromLineSeparation(typename ImageType::Pointer i siter.SetFirstDirection(0); siter.SetSecondDirection(1); siter.GoToBegin(); - uint i=0; + int i=0; typename ImageType::PointType A; typename ImageType::PointType B; typename ImageType::PointType C; - assert(lA.size() == B.size()); - // DD(lA.size()); - //DD(input->GetLargestPossibleRegion().GetSize()); - while ((iTransformIndexToPhysicalPoint(siter.GetIndex(), C); if (C[2] != lA[i][2]) {