[ITK-users] LabelGeometryImageFilter: empty output of GetOrientedLabelImage and GetOrientedIntensityImage
Bill Lorensen
bill.lorensen at gmail.com
Mon Apr 6 02:02:02 EDT 2015
Thomas,
I compiled your program and ran it on one of my labeled images and it
produces the expected output.
On Sun, Apr 5, 2015 at 2:52 PM, Thomas Seidel <seidel at cvrti.utah.edu> wrote:
> Hi Bill,
>
> Thanks for your answer. Here is (part of the) source I am using.
> Do you need the image or source files?
>
>
>
>
> #include "itkImage.h"
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
> #include "itkLabelGeometryImageFilter.h"
>
> #include "itksys/SystemTools.hxx"
>
> #include <sstream>
>
>
> int main(int argc, char * argv[])
> {
> // Verify command line arguments
> if( argc < 2 )
> {
> std::cerr << "Usage: " << std::endl;
> std::cerr << argv[0] << " InputImageFile [-intensity
> <IntensityImageFile>]" << std::endl;
> return EXIT_FAILURE;
> }
> std::string inputFilename = argv[1];
> std::string intensityFile;
> bool calcIntensity = false;
>
>
> int argcounter = 2;
> while (argc>argcounter)
> {
> if (!strncmp(argv[argcounter],"-intensity",10) ) {intensityFile =
> argv[argcounter + 1]; calcIntensity = true; }
> argcounter++;
> }
>
> // Setup types
> typedef itk::Image<unsigned int, 3> IntImageType;
> typedef itk::Image<float, 3> FloatImageType;
> typedef itk::ImageFileReader<IntImageType> ReaderType;
> typedef itk::ImageFileReader<FloatImageType>
> FloatReaderType;
>
> ReaderType::Pointer reader = ReaderType::New();
> reader->SetFileName( inputFilename );
> FloatReaderType::Pointer FloatReader = FloatReaderType::New();
>
>
>
> typedef itk::LabelGeometryImageFilter< IntImageType, FloatImageType >
> LabelGeometryImageFilterType;
> LabelGeometryImageFilterType::Pointer labelGeometryImageFilter =
> LabelGeometryImageFilterType::New();
> labelGeometryImageFilter->SetInput( reader->GetOutput() );
>
>
> if (calcIntensity)
> {
> FloatReader->SetFileName(intensityFile);
> FloatReader->Update();
> labelGeometryImageFilter->SetIntensityInput(FloatReader->GetOutput());
> labelGeometryImageFilter->CalculateOrientedIntensityRegionsOn();
>
> }
>
>
> labelGeometryImageFilter->CalculatePixelIndicesOn();
> labelGeometryImageFilter->CalculateOrientedBoundingBoxOn();
> labelGeometryImageFilter->CalculateOrientedLabelRegionsOn();
>
> labelGeometryImageFilter->Update();
>
> LabelGeometryImageFilterType::LabelsType allLabels =
> labelGeometryImageFilter->GetLabels();
> 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::ostringstream stream;
> stream << labelValue << ".vtk";
> typedef itk::ImageFileWriter<IntImageType> WriterType;
> WriterType::Pointer writer = WriterType::New();
> writer->SetFileName(stream.str());
> writer->SetInput(labelGeometryImageFilter->GetOrientedLabelImage(labelValu
> e));
> writer->Update();
>
> std::ostringstream stream2;
> stream2 << labelValue << "-intensity.vtk";
>
> if (calcIntensity) {
> typedef itk::ImageFileWriter<FloatImageType> FloatWriterType;
> FloatWriterType::Pointer Floatwriter = FloatWriterType::New();
> Floatwriter->SetFileName(stream2.str());
> Floatwriter->SetInput(labelGeometryImageFilter->GetOrientedIntensityImage
> (labelValue));
> Floatwriter->Update();
> }
> }
>
>
>
>
>
>
> return EXIT_SUCCESS;
> }
>
>
>
>
>
>
> On 4/5/15 12:10 PM, "Bill Lorensen" <bill.lorensen at gmail.com> wrote:
>
>>Do you have a small, compilable example that illustrates the problem?
>>
>>On Sun, Apr 5, 2015 at 10:09 AM, Thomas Seidel <seidel at cvrti.utah.edu>
>>wrote:
>>> Hi all,
>>>
>>> I am using the itkLabelGeometryImageFilter to get information about the
>>> orientation of labeled objects.
>>> I provide a LabelImage and a IntensityImage.
>>> I set CalculateOrientedLabelRegionsOn() and
>>> CalculateOrientedIntensityRegionsOn().
>>>
>>> However, when I use
>>> writer->SetInput(filter->GetOrientedLabelImage());
>>> writer->Update();
>>> or
>>> writer->SetInput(filter->GetOrientedIntensityImage());
>>> writer->Update();
>>>
>>> it just generates empty images (all values 0) with the size of the
>>>oriented
>>> bounding box.
>>>
>>> Is this how the filter is supposed to work?? I was expecting the rotated
>>> labels and the rotated region of the intensity image defined by the
>>>oriented
>>> bounding box, respectively.
>>>
>>> Thanks,
>>> Thomas
>>>
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.php
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://public.kitware.com/mailman/listinfo/insight-users
>>>
>>
>>
>>
>>--
>>Unpaid intern in BillsBasement at noware dot com
>
>
>
--
Unpaid intern in BillsBasement at noware dot com
More information about the Insight-users
mailing list