[Insight-users] Analyze Image Orientation problem

Oleksandr Dzyubak adzyubak at gmail.com
Wed Apr 1 12:08:32 EDT 2009


Hi Luis,

Full success! Thanks!

Guided by you, I made all necessary corrections.
Finally all the files in that submission
conform to the rules and specifications of the ITK concept.

Hopefully after all corrections
the updated code can become a part of the ITK library.

Regards,
Alex

PS.  I wrote my review to promote the code.

Luis Ibanez wrote:
> Hi Alex,
>
> Both of the two things that you are observing are normal:
>
> A) The run-time error is still there, because the default image type
>      of the Junction filter is still an image of pixel type "long".
>
>     In order to avoid this problem, you instantiate the filter type
>     by specifying the second template parameters.
>
>
> B) The compilation error is normal, because you are instantiating
>       the writer with the input image type, instead of redefining the
>       output image type.
>
>
> What you want to do is the following:
>
> typedef itk::Image<unsigned short, 3>       InputImageType;
> typedef itk::Image<unsigned short, 3>       OutputImageType;
>
> typedef itk::ImageFileReader<InputImageType>  ReaderType;
>
> typedef itk::JunctionDetectionFilter<
>     InputImageType, OutputImageType>             DetectorType;
>
>  typedef itk::ImageFileWriter<
>      DetectorType::OutputImageType> WriterType;
>
>
> Note that now the JunctionDetectionFilter has two explicit template arguments.
>
>
> Please let us know if you still find any problem,
>
>
>       Thanks
>
>
>             Luis
>
>
> --------
> BTW: Thanks for posting your review to the Insight Journal paper.
>
> -----------------------------------------------------------------------------
> On Tue, Mar 31, 2009 at 6:49 PM, Oleksandr Dzyubak <adzyubak at gmail.com> wrote:
>   
>> Hi Luis,
>>
>> Thanks for quick response.
>>
>> a) I have to use the Analyze format in my image processing.
>> b) I agree that pixel type Long is not a must.
>> c) At the last resort I would use image cast in a filter pipeline.
>>
>> d) I have downloaded and tried the attachment with your corrections.
>> So I deleted my working directory and started all over.
>>
>>   1) If I use your attachment "as is", I get the runtime error message
>> below.
>>
>> ********** Runtime Error *********
>> From writer: ExceptionObject caught !
>>
>> itk::ExceptionObject (0x9923830)
>> Location: "void itk::AnalyzeImageIO::DefineHeaderObjectDataType()"
>> File:
>> /mnt/Public/Root_BUILDS/Lenny/InsightToolkit_3_12/InsightToolkit-3.12.0/Code/IO/itkAnalyzeImageIO.cxx
>> Line: 630
>> Description: itk::ERROR: AnalyzeImageIO(0x9923840): Pixel Type Unknown
>>
>> real    62m59.119s
>> user    59m44.896s
>> sys    0m14.581s
>> *********
>>
>>   2) And I get a compile error if I make a change in "main".
>>
>>  typedef itk::Image<unsigned short, 3>                       ImageType;
>>  typedef itk::ImageFileReader<ImageType>                     ReaderType;
>>  typedef itk::JunctionDetectionFilter<ImageType>             DetectorType;
>> //  typedef itk::ImageFileWriter<DetectorType::OutputImageType> WriterType;
>>  typedef itk::ImageFileWriter<ImageType>                    WriterType;
>>
>> ************ Compile Error ********
>> /mnt/Public/Programs/ITK_Test/Skeletons/Automatic_Junction_Detection/Src/itkJunctionDetectionFilter3DTest.cxx:
>> In function ‘int main(int, char**)’:
>> /mnt/Public/Programs/ITK_Test/Skeletons/Automatic_Junction_Detection/Src/itkJunctionDetectionFilter3DTest.cxx:83:
>> error: no matching function for call to
>> ‘itk::ImageFileWriter<itk::Image<short unsigned int, 3u>
>>     
>>> ::SetInput(itk::Image<long int, 3u>*)’
>>>       
>> /usr/local/include/InsightToolkit/IO/itkImageFileWriter.txx:58: note:
>> candidates are: void itk::ImageFileWriter<TInputImage>::SetInput(const
>> TInputImage*) [with TInputImage = itk::Image<short unsigned int, 3u>]
>> make[2]: ***
>> [CMakeFiles/itkJunctionDetectionFilter3DTest.dir/itkJunctionDetectionFilter3DTest.o]
>> Error 1
>> make[1]: *** [CMakeFiles/itkJunctionDetectionFilter3DTest.dir/all] Error 2
>> make: *** [all] Error 2
>> **********
>>
>>
>> Regards,
>>
>> Alex
>>
>>
>> Luis Ibanez wrote:
>>     
>>> Hi Oleksandr,
>>>
>>>
>>> It seems that you are getting two separate errors.
>>>
>>>
>>>
>>> A) The first one is a warning and refers to image orientation.
>>>   In this case, I would suggest to simply not use the Analyze
>>>   file format. Have you considered using nifti ?
>>>
>>>
>>> B) The second one is also a limitation on the pixel
>>>   type supported by Analyze. The Junction filter uses
>>>   Long as the pixel type of the output image. This seems
>>>   to be an unnecessary restriction though.
>>>
>>>   The simple solution is to make the filter templated also
>>>   over the output image type, and to provide the current
>>>   output image type as the default for that template argument.
>>>
>>>   Please find attached the modified files, in which you
>>>   can replace the output image type for the junction filter.
>>>
>>>
>>>
>>> C) The compilation error that you are reporting indicates
>>>   that you are not declaring consistently the image type
>>>   at the output of the filter, and the corresponding
>>>   file writer.
>>>
>>>   if you are going to connect:
>>>
>>>       writer->SetInput( filter->GetOutput() )
>>>
>>>   the the output of the filter *must* be of the same type
>>>   as the image type of the writer, *or* you could use a
>>>   cast image filter in the middle.
>>>
>>>   The Junction filter is templated only over the input
>>>   image type, therfore, it looks like you would have to
>>>   go for inserting a CastImageFilter between the junction
>>>   filter and the writer (if you want to use the Analyze
>>>   file format).
>>>
>>>   Or.... use the attached files.
>>>
>>>
>>>
>>>   Regards,
>>>
>>>
>>>      Luis
>>>
>>>
>>> -----------------------
>>> Oleksandr Dzyubak wrote:
>>>       
>>>> Quick question though. I am mostly working with the Analyze format
>>>> images.
>>>> I know that is an additional headache but...
>>>>
>>>> So if I just run the program as above but with the Analyze format images,
>>>> I am getting an "exception caught":
>>>>
>>>> ========================WARNING: In
>>>> /mnt/Public/Root_BUILDS/Lenny/InsightToolkit_3_12/InsightToolkit-3.12.0/Code/IO/itkAnalyzeImageIO.cxx,
>>>> line 1345
>>>> AnalyzeImageIO (0x86fb840): ERROR: Analyze 7.5 File Format Only Allows
>>>> RPI, PIR, and RIP Orientation
>>>>
>>>> ExceptionObject caught !
>>>>
>>>> itk::ExceptionObject (0x86fb830)
>>>> Location: "void itk::AnalyzeImageIO::DefineHeaderObjectDataType()"
>>>> File:
>>>> /mnt/Public/Root_BUILDS/Lenny/InsightToolkit_3_12/InsightToolkit-3.12.0/Code/IO/itkAnalyzeImageIO.cxx
>>>> Line: 630
>>>> Description: itk::ERROR: AnalyzeImageIO(0x86fb840): Pixel Type Unknown
>>>> ==========================
>>>>
>>>> On the other hand if I change the typedef to fit into the Analyze
>>>> requirements,
>>>>
>>>>  typedef itk::Image<unsigned short, 3>                       ImageType;
>>>>  typedef itk::ImageFileReader<ImageType>                     ReaderType;
>>>>  typedef itk::JunctionDetectionFilter<ImageType>
>>>> DetectorType;
>>>> // typedef itk::ImageFileWriter<DetectorType::OutputImageType>
>>>> WriterType;
>>>> typedef itk::ImageFileWriter<ImageType>                    WriterType;
>>>>
>>>> I am getting the compile error:
>>>>
>>>> ****************** Begin Error ***********
>>>>
>>>> [100%] Building CXX object
>>>> CMakeFiles/itkJunctionDetectionFilter3DTest.dir/itkJunctionDetectionFilter3DTest.o
>>>>
>>>> /mnt/Public/Programs/ITK_Test/Skeletons/Automatic_Junction_Detection/Src/itkJunctionDetectionFilter3DTest.cxx:
>>>> In function ‘int main(int, char**)’:
>>>>
>>>> /mnt/Public/Programs/ITK_Test/Skeletons/Automatic_Junction_Detection/Src/itkJunctionDetectionFilter3DTest.cxx:83:
>>>> error: no matching function for call to
>>>> ‘itk::ImageFileWriter<itk::Image<short unsigned int, 3u>
>>>>  >::SetInput(itk::Image<short int, 3u>*)’
>>>> /usr/local/include/InsightToolkit/IO/itkImageFileWriter.txx:58: note:
>>>> candidates are: void itk::ImageFileWriter<TInputImage>::SetInput(const
>>>> TInputImage*) [with TInputImage = itk::Image<short unsigned int, 3u>]
>>>> make[2]: ***
>>>> [CMakeFiles/itkJunctionDetectionFilter3DTest.dir/itkJunctionDetectionFilter3DTest.o]
>>>> Error 1
>>>> make[1]: *** [CMakeFiles/itkJunctionDetectionFilter3DTest.dir/all] Error
>>>> 2
>>>> make: *** [all] Error 2
>>>>
>>>> ****************** End Error ***********
>>>>
>>>> Any solution for that?
>>>>
>>>> Thanks,
>>>> Alex
>>>>
>>>> Luis Ibanez wrote:
>>>>
>>>>         
>>>>> Hi Oleksandr,
>>>>>
>>>>> I just finished reviewing this paper:
>>>>> http://www.insight-journal.org/browse/publication/324
>>>>>
>>>>> The code was missing a bunch of "typename" keywords,
>>>>> which is the usual problem of code developed in Windows
>>>>> with Visual Studio 6.0.
>>>>>
>>>>> Please find attached the .tgz file with the corrections
>>>>> required to compile it in GCC.  (gcc 4.3.2, GNU/Linux
>>>>> Ubuntu 8.10).
>>>>>
>>>>> Please give it a try at this modified code and let us
>>>>> know if you find any problem.
>>>>>
>>>>> Note that you should compile this code for Release,
>>>>> and allow it to run for at least 15min for the 2D
>>>>> case, for it to finish processing the image.
>>>>>
>>>>>
>>>>> BTW:  If you find the paper useful, please take the
>>>>>  time of contributing a review for it. In this way
>>>>>  we will be able to integrate this paper code into
>>>>>  ITK in the near future.
>>>>>
>>>>>
>>>>>
>>>>>  Regards,
>>>>>
>>>>>
>>>>>    Luis
>>>>>
>>>>>
>>>>>
>>>>> ---------------------------
>>>>> Oleksandr Dzyubak wrote:
>>>>>
>>>>>           
>>>>>> Thanks Luis,
>>>>>>
>>>>>> You were right on that one. So we are getting close.
>>>>>> Now I am getting a family of errors as below concerning
>>>>>> the variable "was not declared in this scope"...
>>>>>>
>>>>>> ********* Errors begin ********
>>>>>> itkJunctionDetectionFilter.txx:78: error: expected `;' before
>>>>>> ‘wallDister’
>>>>>> itkJunctionDetectionFilter.txx:79: error: ‘wallDister’ was not declared
>>>>>> in this scope
>>>>>> .......
>>>>>> etc.
>>>>>> ********* Errors end ********
>>>>>>
>>>>>> Alex
>>>>>>
>>>>>>             
>>>>         
>>     



More information about the Insight-users mailing list