#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 = atoi(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]));
rgbLabelImage->GetOutput(),
true,
argc > 3 ? itksys::SystemTools::GetFilenameName(argv[1]) : "Generated label image");
intensityImage.GetPointer(),
true,
argc > 3 ? itksys::SystemTools::GetFilenameName(argv[2]) : "Generated intensity image");
std::stringstream desc;
desc << "Oriented Label: " << allLabels[label];
rgbOrientedImage->GetOutput(),
true,
desc.str());
std::stringstream desc2;
desc2 << "Oriented Intensity: " << allLabels[label];
labelGeometryImageFilter->GetOrientedIntensityImage(allLabels[label]),
true,
desc2.str());
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)
{
ImageType::IndexType start;
start.Fill(0);
ImageType::SizeType size;
size.Fill(20);
ImageType::RegionType region;
region.SetSize(size);
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)
{
ImageType::IndexType start;
start.Fill(0);
ImageType::SizeType size;
size.Fill(20);
ImageType::RegionType region;
region.SetSize(size);
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;
}
}