#ifdef ENABLE_QUICKVIEW
#endif
#include <sstream>
static void
CreateIntensityImage(ImageType::Pointer image);
static void
CreateLabelImage(ImageType::Pointer image);
int
main(int argc, char * argv[])
{
ImageType::Pointer labelImage = ImageType::New();
ImageType::Pointer intensityImage = ImageType::New();
int label = 1;
if (argc < 2)
{
CreateLabelImage(labelImage);
labelImage->Print(std::cout);
CreateIntensityImage(intensityImage);
}
else if (argc > 3)
{
ImageReaderType::Pointer labelReader = ImageReaderType::New();
labelReader->SetFileName(argv[1]);
labelReader->Update();
labelImage = labelReader->GetOutput();
ImageReaderType::Pointer intensityReader = ImageReaderType::New();
intensityReader->SetFileName(argv[2]);
intensityReader->Update();
intensityImage = intensityReader->GetOutput();
label = std::stoi(argv[3]);
}
double origin[2] = { 0.0, 0.0 };
labelImage->SetOrigin(origin);
intensityImage->SetOrigin(origin);
LabelGeometryImageFilterType::Pointer labelGeometryImageFilter = LabelGeometryImageFilterType::New();
labelGeometryImageFilter->SetInput(labelImage);
labelGeometryImageFilter->SetIntensityInput(intensityImage);
labelGeometryImageFilter->CalculatePixelIndicesOn();
labelGeometryImageFilter->CalculateOrientedBoundingBoxOn();
labelGeometryImageFilter->CalculateOrientedLabelRegionsOn();
labelGeometryImageFilter->CalculateOrientedIntensityRegionsOn();
labelGeometryImageFilter->Update();
LabelGeometryImageFilterType::LabelsType allLabels = labelGeometryImageFilter->GetLabels();
RGBFilterType::Pointer rgbLabelImage = RGBFilterType::New();
rgbLabelImage->SetInput(labelImage);
RGBFilterType::Pointer rgbOrientedImage = RGBFilterType::New();
rgbOrientedImage->SetInput(labelGeometryImageFilter->GetOrientedLabelImage(allLabels[label]));
#ifdef ENABLE_QUICKVIEW
viewer.
AddImage(rgbLabelImage->GetOutput(),
true,
argc > 3 ? itksys::SystemTools::GetFilenameName(argv[1]) : "Generated label image");
viewer.
AddImage(intensityImage.GetPointer(),
true,
argc > 3 ? itksys::SystemTools::GetFilenameName(argv[2]) : "Generated intensity image");
std::stringstream desc;
desc << "Oriented Label: " << allLabels[label];
viewer.
AddImage(rgbOrientedImage->GetOutput(),
true, desc.str());
std::stringstream desc2;
desc2 << "Oriented Intensity: " << allLabels[label];
viewer.
AddImage(labelGeometryImageFilter->GetOrientedIntensityImage(allLabels[label]),
true, desc2.str());
#endif
LabelGeometryImageFilterType::LabelsType::iterator allLabelsIt;
std::cout << "Number of labels: " << labelGeometryImageFilter->GetNumberOfLabels() << std::endl;
std::cout << std::endl;
for (allLabelsIt = allLabels.begin(); allLabelsIt != allLabels.end(); allLabelsIt++)
{
LabelGeometryImageFilterType::LabelPixelType labelValue = *allLabelsIt;
std::cout << "\tLabel: " << (int)labelValue << std::endl;
std::cout << "\tVolume: " << labelGeometryImageFilter->GetVolume(labelValue) << std::endl;
std::cout << "\tIntegrated Intensity: " << labelGeometryImageFilter->GetIntegratedIntensity(labelValue)
<< std::endl;
std::cout << "\tCentroid: " << labelGeometryImageFilter->GetCentroid(labelValue) << std::endl;
std::cout << "\tWeighted Centroid: " << labelGeometryImageFilter->GetWeightedCentroid(labelValue) << std::endl;
std::cout << "\tAxes Length: " << labelGeometryImageFilter->GetAxesLength(labelValue) << std::endl;
std::cout << "\tMajorAxisLength: " << labelGeometryImageFilter->GetMajorAxisLength(labelValue) << std::endl;
std::cout << "\tMinorAxisLength: " << labelGeometryImageFilter->GetMinorAxisLength(labelValue) << std::endl;
std::cout << "\tEccentricity: " << labelGeometryImageFilter->GetEccentricity(labelValue) << std::endl;
std::cout << "\tElongation: " << labelGeometryImageFilter->GetElongation(labelValue) << std::endl;
std::cout << "\tOrientation: " << labelGeometryImageFilter->GetOrientation(labelValue) << std::endl;
std::cout << "\tBounding box: " << labelGeometryImageFilter->GetBoundingBox(labelValue) << std::endl;
std::cout << std::endl << std::endl;
}
return EXIT_SUCCESS;
}
void
CreateIntensityImage(ImageType::Pointer image)
{
region.SetIndex(start);
image->SetRegions(region);
image->Allocate();
srand(1);
while (!imageIterator.IsAtEnd())
{
int randomNumber = rand() % 255;
imageIterator.Set(randomNumber);
++imageIterator;
}
}
void
CreateLabelImage(ImageType::Pointer image)
{
region.SetIndex(start);
image->SetRegions(region);
image->Allocate();
while (!imageIterator.IsAtEnd())
{
if ((imageIterator.GetIndex()[0] > 5 && imageIterator.GetIndex()[0] < 10) &&
(imageIterator.GetIndex()[1] > 5 && imageIterator.GetIndex()[1] < 10))
{
}
else if ((imageIterator.GetIndex()[0] > 11 && imageIterator.GetIndex()[0] < 17) &&
(imageIterator.GetIndex()[1] > 11 && imageIterator.GetIndex()[1] < 17))
{
imageIterator.Set(127);
}
else if ((imageIterator.GetIndex()[0] > 11 && imageIterator.GetIndex()[0] < 17) &&
(imageIterator.GetIndex()[1] > 1 && imageIterator.GetIndex()[1] < 5))
{
imageIterator.Set(191);
}
else
{
imageIterator.Set(0);
}
++imageIterator;
}
}