[Insight-users] crashes N-D Linear Time Exact Signed Euclidean Distance Transform

Oleksandr Dzyubak adzyubak at gmail.com
Fri Jun 20 15:25:23 EDT 2008


Hi Gaëtan,

Thanks for your help.
No matter what I do, I am still getting the error below.

******** Begin Error********
dzyubak at debian: /Lehmann$ ./SignedMaurerDistanceMapImageFilterTest 
smallDataset.hdr out.hdr
SignedMaurerDistanceMapImageFilterTest: 
/usr/local/include/InsightToolkit/Utilities/vxl/core/vnl/vnl_vector.h:168: 
T& vnl_vector<T::operator()(unsigned int) [with T = double]: Assertion 
`i<size()' failed.
Aborted

*******End Error*******

And I still want to make it work.
If it matters, my image is 565x440x100 and "pixel type signed short"
in Analyze75 format.

I am using Debian Etch with gcc "version 4.1.2 20061115 (prerelease) 
(Debian 4.1.1-21)", "cmake version 2.6-patch 0", and 
"Insight_CVS_Jun_03_2008.tar.gz".

Just to test the filter, I am using a slightly modified code from 
ITK/Testing below.

I would be more than happy if you could give me a hint on how to proceed.

Alex

***********Begin code*******

/*=========================================================================

  Program:   Insight Segmentation & Registration Toolkit
  Module:    $RCSfile: itkSignedMaurerDistanceMapImageFilterTest.cxx,v $
  Language:  C++
  Date:      $Date: 2007-08-10 14:34:02 $
  Version:   $Revision: 1.2 $

  Copyright (c) Insight Software Consortium. All rights reserved.
  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/

#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"

#include "itkSignedMaurerDistanceMapImageFilter.h"


// int itkSignedMaurerDistanceMapImageFilterTest( int argc, char * argv[] )

int main( int argc, char * argv[] )

{
   if(argc < 3)
    {
    std::cerr << "Usage: " << argv[0] << " InputImage OutputImage\n";
    return -1;
    }

// const unsigned int      ImageDimension = 2;
// typedef int             InputPixelType;
// typedef double              OutputPixelType;

const unsigned int      ImageDimension = 3;
typedef signed short    InputPixelType;
typedef double          OutputPixelType;

  typedef itk::Image<InputPixelType,  ImageDimension>  InputImageType;
  typedef itk::Image<OutputPixelType, ImageDimension>  OutputImageType;

  typedef itk::ImageFileReader<InputImageType>    ReaderType;
  typedef itk::ImageFileWriter<OutputImageType>   WriterType;
  typedef InputImageType::SizeType                InputSizeType;

  ReaderType::Pointer reader = ReaderType::New();
  reader->SetFileName(argv[1]);
  reader->Update(); 

  typedef itk::SignedMaurerDistanceMapImageFilter
     <InputImageType, OutputImageType>  FilterType;

  FilterType::Pointer filter = FilterType::New();
  filter->SetInput( reader->GetOutput() );
  filter->SetSquaredDistance( false );
  filter->SetUseImageSpacing( false );
  filter->SetInsideIsPositive( true );
  filter->Update();


  WriterType::Pointer writer = WriterType::New();
  writer->SetInput( filter->GetOutput() );
  writer->SetFileName( argv[2] );
  writer->Update();

  return EXIT_SUCCESS;
};

**********End Code*********


Gaëtan Lehmann wrote:
>
> Hi,
>
> I'm afraid I can't reproduce any of the problems you have.
> Can you send me your source tree? You seem to have put everything in a 
> “Lehmann” directory — maybe with it, I would be able to reproduce them.
>
> Regards,
>
> Gaëtan
>
>
>
> Le 3 juin 08 à 21:36, Oleksandr Dzyubak a écrit :
>
>> Hi Gaëtan,
>>
>> Thanks for your help.
>>
>> I have rebuilt ITK to include all the changes made recently.
>> Following the link you provided, I downloaded your version of the 
>> filter.
>> During the compilation I got some warnings but was able to get an 
>> executable (see below).
>> However when I ran the executable, the program crashed again
>> with a different error message though (before it was malloc() from 
>> AnalyzeIO).
>>
>> **************** Begin Error Message *********
>> dzyubak at debian: /Lehmann$ ./SignedMaurerDistanceMapImageFilterTest 
>> SquareBinary201.hdr test.hdr
>> SignedMaurerDistanceMapImageFilterTest: 
>> /usr/local/include/InsightToolkit/Utilities/vxl/core/vnl/vnl_vector.h:168: 
>> T& vnl_vector<T>::operator()(unsigned int) [with T = double]: 
>> Assertion `i<size()' failed.
>> Aborted
>> ************** End Error Message ********
>>
>>
>> *********** Begin Compilation Warnings ****
>> dzyubak at debian: /BUILD$ make
>> Scanning dependencies of target SignedMaurerDistanceMapImageFilterTest
>> [100%] Building CXX object 
>> CMakeFiles/SignedMaurerDistanceMapImageFilterTest.dir/itkSignedMaurerDistanceMapImageFilterTest.cxx.o 
>>
>> /home/dzyubak/Test/N-D_Linear_Time_Exact_Signed_Euclidean_Distance_Transform/Lehmann/itkBinaryBorderImageFilter.txx: 
>> In member function 'void itk::BinaryBorderImageFilter<TInputImage, 
>> TOutputImage>::CompareLines(std::vector<itk::BinaryBorderImageFilter<TInputImage, 
>> TOutputImage>::runLength, 
>> std::allocator<itk::BinaryBorderImageFilter<TInputImage, 
>> TOutputImage>::runLength> >&, const 
>> std::vector<itk::BinaryBorderImageFilter<TInputImage, 
>> TOutputImage>::runLength, 
>> std::allocator<itk::BinaryBorderImageFilter<TInputImage, 
>> TOutputImage>::runLength> >&) [with TInputImage = itk::Image<double, 
>> 3u>, TOutputImage = itk::Image<double, 3u>]':
>> /home/dzyubak/Test/N-D_Linear_Time_Exact_Signed_Euclidean_Distance_Transform/Lehmann/itkBinaryBorderImageFilter.txx:250:   
>> instantiated from 'void itk::BinaryBorderImageFilter<TInputImage, 
>> TOutputImage>::ThreadedGenerateData(const typename 
>> TOutputImage::RegionType&, int) [with TInputImage = 
>> itk::Image<double, 3u>, TOutputImage = itk::Image<double, 3u>]'
>> /home/dzyubak/Test/N-D_Linear_Time_Exact_Signed_Euclidean_Distance_Transform/Lehmann/itkSignedMaurerDistanceMapImageFilterTest.cxx:69:   
>> instantiated from here
>> /home/dzyubak/Test/N-D_Linear_Time_Exact_Signed_Euclidean_Distance_Transform/Lehmann/itkBinaryBorderImageFilter.txx:405: 
>> warning: unused variable 'ee1'
>> Linking CXX executable SignedMaurerDistanceMapImageFilterTest
>> [100%] Built target SignedMaurerDistanceMapImageFilterTest
>>
>> ********* End Compilation Warnings *******
>>
>> Gaëtan Lehmann wrote:
>>>
>>> Hi,
>>>
>>> The SignedMaurerDistanceMapImageFilter won't work when the input 
>>> image is 2D but the filter is 3D — the size is 1 on one dimension.
>>> I have fixed that in an external repository, with some other changes to
>>>
>>>  a. avoid spending so much time in the border detection
>>>  b. multithread it
>>>  c. make it work with any sizes on all the dimensions
>>>
>>> That work is available at
>>>
>>>  http://voxel.jouy.inra.fr/darcs/contrib-itk/watershed
>>>
>>> You'll have to take the classes SignedMaurerDistanceMapImageFilter 
>>> and BinaryBorderImageFilter.
>>>
>>> I'll try to put b. and c. in ITK before the next release.
>>> a. has to pass through the process of the peer review in the insight 
>>> journal before being integrated in ITK.
>>>
>>> Regards,
>>>
>>> Gaëtan
>>>
>>>
>>> Le 2 juin 08 à 21:18, Oleksandr Dzyubak a écrit :
>>>
>>>> Hi Bill,
>>>>
>>>> Now I am a bit confused by what you are saying.
>>>>
>>>> 1) You say that it works for 3D but does not for 2D.
>>>> I cannot understand that since 2D dimensionality is a particular 
>>>> case of 3D.
>>>> Lets say 2D is a 3D with just one z-component. From my prospective, 
>>>> it has to work
>>>> for 2D if it does for 3D. Opposite is not necessary true though.
>>>>
>>>> 2) If I comment the writer out, the program still crashes with the 
>>>> same error.
>>>>
>>>> 3) All my images are in the Analyze75 format
>>>> and while using the other ITK filters I have not had any problems 
>>>> so far.
>>>> (I mean with ITK Analyze reader/writer, except orientations, of 
>>>> course).
>>>>
>>>> Do you mean that even though my executables did not complain,
>>>> the results I was getting could be wrong since I used ITK Analyze 
>>>> reader/writer?
>>>>
>>>> If so, in what fashion could the final results be wrong?
>>>>
>>>> Is it error-prone for some particular platform/compiler
>>>> (Linux Debian with gcc 4.1.2 in my case) or it is more general case?
>>>>
>>>> How severe does it affect the final results?
>>>>
>>>> Thanks for your help,
>>>>
>>>> Alex
>>>>
>>>>
>>>> Bill Lorensen wrote:
>>>>> Oleksandr,
>>>>>
>>>>> There are some known problems in the ITK Analyze reader/writer when
>>>>> the images are 2D and not 3D. I think the read part has been fixed
>>>>> recently. However, the write part still has problems. If your images
>>>>> are 3D, then all should be fine. Until we fix this 2D Analyze image
>>>>> problem, I'm afraid you cannot run the filters.
>>>>>
>>>>> Bill
>>>>>
>>>>> On Sun, Jun 1, 2008 at 1:07 PM, Oleksandr Dzyubak 
>>>>> <adzyubak at gmail.com> wrote:
>>>>>
>>>>>> Hi Bill,
>>>>>>
>>>>>> This time I try to be more accurate.
>>>>>>
>>>>>> 1) I downloaded ITK from CVS, compiled with the RelWithDeb flag, and
>>>>>> installed on my Linux box.
>>>>>> 2) I have Debian Etch with gcc 4.1.2
>>>>>> 3) The example itkSignedMaurerDistanceMapImageFilterTest.cxx was 
>>>>>> taken
>>>>>> from ITK distro and not from IJ.
>>>>>>
>>>>>> Insight/Testing/Code/BasicFilters/itkSignedMaurerDistanceMapImageFilterTest.cxx 
>>>>>>
>>>>>>
>>>>>> 4) Example was compiled in debug mode.
>>>>>> 5) As you advised, the example was run on both 
>>>>>> SquareBinary201.png and
>>>>>> SquareBinary201.hdr.
>>>>>>
>>>>>> Results.
>>>>>> As you predicted, the example has processed the *.png image taken 
>>>>>> from ITK
>>>>>> distro resulting
>>>>>> in a nice looking map.
>>>>>>
>>>>>> dzyubak at debian: /BUILD$ ./SignedMaurerDistanceMapImageFilterTest
>>>>>> SquareBinary201.png test_png.hdr
>>>>>> WARNING: In /root/Insight/Code/IO/itkAnalyzeImageIO.cxx, line 1280
>>>>>> AnalyzeImageIO (0x8169a98): ERROR: Analyze 7.5 File Format Only 
>>>>>> Allows RPI,
>>>>>> PIR, and RIP Orientation
>>>>>>
>>>>>> However when I tried to run it on a real stuff (all my images in 
>>>>>> Analyze75
>>>>>> format), the same image but
>>>>>> taken from IJ archive (SquareBinary201.hdr), it crashes.
>>>>
>>>> _______________________________________________
>>>> Insight-users mailing list
>>>> Insight-users at itk.org
>>>> http://www.itk.org/mailman/listinfo/insight-users
>>>
>>> --Gaëtan Lehmann
>>> Biologie du Développement et de la Reproduction
>>> INRA de Jouy-en-Josas (France)
>>> tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
>>> http://voxel.jouy.inra.fr  http://www.mandriva.org
>>> http://www.itk.org  http://www.clavier-dvorak.org
>>>
>>
>
> --Gaëtan Lehmann
> Biologie du Développement et de la Reproduction
> INRA de Jouy-en-Josas (France)
> tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
> http://voxel.jouy.inra.fr  http://www.mandriva.org
> http://www.itk.org  http://www.clavier-dvorak.org
>



More information about the Insight-users mailing list