[ITK] BinaryImageToShapeLabelMapFilter problem

Zein Salah zeinsalah at gmail.com
Mon Dec 8 10:11:06 EST 2014


Hi,

I am using the BinaryImageToShapeLabelMapFilter to label connected
component in a binaty image. I recycled some code as follows:


   typedef unsigned long LabelType;
   typedef itk::ShapeLabelObject< LabelType, 3 > LabelObjectType;
   typedef itk::LabelMap< LabelObjectType > LabelMapType;

   typedef itk::BinaryImageToShapeLabelMapFilter< BinaryImageType,
LabelMapType > ConverterType;
   ConverterType::Pointer converter = ConverterType::New();
   converter->SetInput(m_SegmentedImage);
   converter->SetInputForegroundValue(255);
   converter->Update();

   LabelMapType::Pointer labelMap = converter->GetOutput();


   MarkerPositions detectedMarkers;
   for( unsigned int label=0;
label<labelMap->GetNumberOfLabelObjects(); label++ )
   {
       const LabelObjectType * labelObject = labelMap->GetNthLabelObject(label);
       ImageType::PointType point = labelObject->GetCentroid();
       std::cout << label << "\t" << labelObject->GetPhysicalSize() <<
" at:  " << point[0] << "," << point[1] << "," << point[2] <<
std::endl;
   }

The code actually generates some labels (for the image I used, it
generates 35 labels).
The thing I could not understand is that the centroids of the labeled
object do not correspond
to components in the image. I.e., when I take one centroid and select the point
in the image, in most, if not all, cases it is an empty area. Are elements in
a label map no more related to there position in the image? or I am
missing some point here??
Centroids are computed in the pixels coordinates, not physical locations. Right?

thanks,
Zein


More information about the Community mailing list