[ITK-users] LabelGeometryImageFilter: empty output of GetOrientedLabelImage and GetOrientedIntensityImage

Bill Lorensen bill.lorensen at gmail.com
Tue Apr 7 15:02:20 EDT 2015


Brad,

You should mention this on the repo comments.

Bill

On Tue, Apr 7, 2015 at 12:01 PM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
> Great! I'll give it a look see.
>
> Bill
>
>
> On Tue, Apr 7, 2015 at 11:56 AM, Bradley Lowekamp
> <blowekamp at mail.nih.gov> wrote:
>> Bill,
>>
>> I just have my external modules in the "ITK/Modules/External" directory. I
>> manually manage the git process. Just do:
>>
>> cd ITK/Modules/External
>> git clone https://github.com/blowekamp/itkOBBLabelMap.git
>>
>> When you run ccmake the "ITKOBBLabelMap" module should show up where you can
>> enable it.
>>
>> HTH,
>> Brad
>>
>> On Apr 7, 2015, at 2:51 PM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
>>
>> Brad,
>>
>> I don't see a remote.cmake file for your external module.
>>
>> Bill
>>
>> On Tue, Apr 7, 2015 at 5:37 AM, Bradley Lowekamp <blowekamp at mail.nih.gov>
>> wrote:
>>
>> Hello,
>>
>> I have a much improved version of the algorithm to compute oriented bounding
>> boxes here:
>>
>> https://github.com/blowekamp/itkOBBLabelMap
>>
>> It is correctly accounts for the image's physical spacing, origin, and
>> direction cosines, significantly faster,  and more memory efficient. Here
>> would be a close to turn-key test/example for this task:
>>
>> https://github.com/blowekamp/itkOBBLabelMap/blob/master/test/itkOrientedBoundingBoxImageLabelMapFilterTest2.cxx
>>
>> HTH,
>> Brad
>>
>> On Apr 7, 2015, at 1:38 AM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
>>
>> I have a 2D example that fails when the origin is not 0.0. Now I'll
>> try to find the bug.
>>
>>
>> On Mon, Apr 6, 2015 at 10:13 AM, Bill Lorensen <bill.lorensen at gmail.com>
>> wrote:
>>
>> Could be a bug. Need to find a smaller test case that fails. Maybe
>> because of non-zero origin. I'll take a look.
>>
>>
>> On Mon, Apr 6, 2015 at 9:55 AM, Thomas Seidel <seidel at cvrti.utah.edu> wrote:
>>
>> I tried it again. I am quite sure there is nothing wrong with my input
>> files because the filter apparently creates correct output measures for
>> all labels (e.g. eigenvalues, bounding box, volume, etc).
>> But the orientedlabelimages are all zero, except for label 0 (which is my
>> background). The dimension of these images corresponds to the size
>> (length, width, depth) of the oriented bounding boxes.
>>
>> I think the image origins are all messed up. May there something be wrong
>> with the center of rotation?
>>
>> E.g.: label 0, which is background, has the same bounding box size as the
>> input label image.
>> Input LabelImage:
>> dimensions: 512 1024 130 (in pixels)
>> origin: [102.273, 0, 5.96985] (in physical size)
>>
>> oriented image of label 0:
>> dimensions: 1026 515 131
>> origin: [-51.2878, 50.6859, -0.132971]
>>
>>
>> Is this a bug, or did I forget to set a parameter?
>>
>> Thanks,
>> Thomas
>>
>>
>>
>>
>>
>> On 4/6/15 12:02 AM, "Bill Lorensen" <bill.lorensen at gmail.com> wrote:
>>
>> 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(labelVal
>> u
>> 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
>>
>>
>>
>>
>>
>>
>>
>> --
>> Unpaid intern in BillsBasement at noware dot com
>>
>>
>>
>>
>> --
>> Unpaid intern in BillsBasement at noware dot com
>> _____________________________________
>> 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



-- 
Unpaid intern in BillsBasement at noware dot com


More information about the Insight-users mailing list