X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=itk%2FclitkSegmentationUtils.txx;h=4990b247c2b85dac1e342b77dc64901c80c553f6;hb=f4836557301d6fafe12dd9f767f911796992f855;hp=36594aa43b3e0aecfcb0cee56686e83f68cdd73a;hpb=86516b8bebf80775a5e0270453e8905378e5976e;p=clitk.git diff --git a/itk/clitkSegmentationUtils.txx b/itk/clitkSegmentationUtils.txx index 36594aa..4990b24 100644 --- a/itk/clitkSegmentationUtils.txx +++ b/itk/clitkSegmentationUtils.txx @@ -33,6 +33,7 @@ #include #include #include +#include namespace clitk { @@ -511,7 +512,6 @@ namespace clitk { typename ImageType::PointType dummy; centroids.push_back(dummy); // label 0 -> no centroid, use dummy point for BG //DS FIXME (not useful ! to change ..) - DD(labelMap->GetNumberOfLabelObjects()); for(uint i=0; iGetNumberOfLabelObjects(); i++) { int label = labelMap->GetLabels()[i]; centroids.push_back(labelMap->GetLabelObject(label)->GetCentroid()); @@ -520,6 +520,30 @@ namespace clitk { //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + template + typename itk::LabelMap< itk::ShapeLabelObject >::Pointer + ComputeLabelMap(const ImageType * image, + typename ImageType::PixelType BG, + bool computePerimeterFlag) + { + static const unsigned int Dim = ImageType::ImageDimension; + typedef itk::ShapeLabelObject< LabelType, Dim > LabelObjectType; + typedef itk::LabelMap< LabelObjectType > LabelMapType; + typedef itk::LabelImageToLabelMapFilter ImageToMapFilterType; + typename ImageToMapFilterType::Pointer imageToLabelFilter = ImageToMapFilterType::New(); + typedef itk::ShapeLabelMapFilter ShapeFilterType; + typename ShapeFilterType::Pointer statFilter = ShapeFilterType::New(); + imageToLabelFilter->SetBackgroundValue(BG); + imageToLabelFilter->SetInput(image); + statFilter->SetInput(imageToLabelFilter->GetOutput()); + statFilter->SetComputePerimeter(computePerimeterFlag); + statFilter->Update(); + return statFilter->GetOutput(); + } + //-------------------------------------------------------------------- + + //-------------------------------------------------------------------- template void @@ -1061,25 +1085,34 @@ namespace clitk { typedef typename itk::Image SliceType; std::vector slices; clitk::ExtractSlices(input, d, slices); - DD(slices.size()); // Labelize and keep the main one std::vector o; for(uint i=0; i(slices[i], BG, false, 1)); o[i] = clitk::KeepLabels(o[i], BG, FG, 1, 1, true); } // Join slices - DD("join"); typename ImageType::Pointer output; output = clitk::JoinSlices(o, input, d); - DD("return"); return output; } //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + template + typename ImageType::Pointer + Clone(const ImageType * input) { + typedef itk::ImageDuplicator DuplicatorType; + typename DuplicatorType::Pointer duplicator = DuplicatorType::New(); + duplicator->SetInputImage(input); + duplicator->Update(); + return duplicator->GetOutput(); + } + //-------------------------------------------------------------------- + + } // end of namespace