[Insight-users] Bug reading DICOM Series with QApplication
Luis Ibanez
luis.ibanez at kitware.com
Mon Oct 19 13:32:35 EDT 2009
Hi Jesus,
Thanks for your detailed answer.
1) Yes, it make sense to use the ITK packages for Ubuntu first.
2) It really seems that this was a bug fixed before ITK 3.16.
3) I don't know exactly what but it is.
Good places to look for it would be:
itkImageBase
itkImage
itkImageFileReader
itkGDCMImageIO
It may take several hours to track that down...
So... we probably need a good justification (motivation)
for tracking the exact bug...
4) I don't know in what exact version this behavior was
fixed, although I would suspect that it relates to the
release of ITK 3.10, which is the first one in which
we made the itkImage behave as an itkOrientedImage.
If you go for ITK 3.10, then you should probably use
the patch ITK 3.10.1:
Release 3.10.1 (patch 1) (December 8 2008)
http://www.itk.org/ITK/resources/legacy_releases.html
5) However,... I'll still suggest that if you are not
using the specific Ubuntu package, you may
as well update to the most recent release of ITK.
6) It still doesn't make much sense for the behavior
of the ITK class to change when you introduce
the QApplication.
(again,... unless there is some shared library confusion...).
Regards,
Luis
-------------------------------------------------------------------
On Tue, Oct 13, 2009 at 7:13 AM, Jesús Spínola <jspinola at gmail.com> wrote:
> Hi Luis,
>
> thanks for your detailed explanations. I'll ask to your questions and ask
> you some more questions to the points you stated
>
> On Mon, Oct 12, 2009 at 9:14 PM, Luis Ibanez <luis.ibanez at kitware.com>
> wrote:
>>
>> Hi Jesús,
>>
>>
>> Thanks for the detailed description of your problem.
>>
>>
>> 1) ITK 2.8.1 is certainly an old version.
>> It is great that you are updating.
>>
>>
>> 2) Why have you decided to update to 3.10.1
>> instead of adopting the most recent release
>> of ITK 3.16 ?
>>
>
> Under linux, we are using ubuntu 9.04, and that's the official itk version
> that comes with this distribution, so we first try to use the version of the
> libraries that comes in the common repositories. If we see the provided
> packages are wrong or causes any problem, we then consider to make our own
> packages to solve that problems. So, before building new packages for a more
> recent library version, we want to be sure in which side the problem is. We
> want to discard if that's a problem of us or that's because some bug in the
> library.
>
> We also tried itk 3.14 (we used the packages found on
> http://apt.paulnovo.org/ubuntu/pool/main/i/insighttoolkit/ which are built
> for this linux distribution too), and we had unfortunately the same errors.
>
> So the question is, are we doing something wrong? or we can just put the
> blame on this itk versions?
> Before building a more recent version, we want to be sure what's the real
> problem.
>
>>
>>
>> 3) Thanks for posting the minimal example for
>> replicating the problem.
>>
>> I downloaded your .tar.gz file, and adapted
>> the bug.pro file in order to provide all the
>> necessary libraries.
>>
>
> I used your bug.pro file, but I had to change the location of the libraries
> for ours (/usr/lib/.. /usr/include/Insight...), and remove the linking to
>
> -litkpng \
>
> -litktiff \
>
> -litkzlib \
>
> but I guess this has to do with the way the libraries are built and has no
> influence in the final result
>
>>
>> 4) I build it against our current CVS version,
>> and Qt 4.5.0 and didn't received any error
>> message when running:
>>
>> ./bug-3.10.1 ./data
>>
>>
>> 5) To make the program more informative,
>> I added:
>>
>> ImageType::ConstPointer image = reader->GetOutput();
>>
>> image->Print( std::cout );
>>
>> and got the following (excerpt):
>>
>>
>> Direction:
>> 1 0 0
>> 0 0.956305 0.292372
>> 0 -0.292372 0.956305
>>
>
> This is the right direction because that's the one we get with 2.8.1, and
> that's the matrix you can compute from "Image Orientation Patient" dicom
> tag. In our case, we get the exception error I mentioned and the whole
> result of image->Print(std::cout) is
>
>
> Image (0x872edb0)
> RTTI typeinfo: itk::Image<short, 3u>
> Reference Count: 2
> Modified Time: 7
> Debug: Off
> Observers:
> none
> Source: (0x876cfb8)
> Source output index: 0
> Release Data: Off
> Data Released: False
> Global Release Data: Off
> PipelineMTime: 24
> UpdateMTime: 0
> LargestPossibleRegion:
> Dimension: 3
> Index: [0, 0, 0]
> Size: [0, 0, 0]
> BufferedRegion:
> Dimension: 3
> Index: [0, 0, 0]
> Size: [0, 0, 0]
> RequestedRegion:
> Dimension: 3
> Index: [0, 0, 0]
> Size: [0, 0, 0]
> Spacing: [1, 1, 1]
> Origin: [0, 0, 0]
> Direction:
> 1 0 0
> 0 1 0
> 0 0 1
>
> IndexToPointMatrix:
> 1 0 0
> 0 1 0
> 0 0 1
>
> PointToIndexMatrix:
> 1 0 0
> 0 1 0
> 0 0 1
>
> PixelContainer:
> ImportImageContainer (0x9fe0328)
> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short>
> Reference Count: 1
> Modified Time: 4
> Debug: Off
> Observers:
> none
> Pointer: 0
> Container manages memory: true
> Size: 0
> Capacity: 0
>
>
> As you can see, we get a "blank" Image completely void.
>
> If I run the program without the QApplication it works ok and we get the
> right direction matrix and the resulting image is filled (Pointer, Size and
> Capacity are not null)
>
>>
>> 6) It would seem that you are being affected by
>> a bug that may now been fixed in ITK 3.16.
>>
>
> Do you know which bug is exactly? And do you know in wich version should
> this bug has been fixed?
>
>>
>> 7) The error message that your were reporting
>> can be generated from the method
>>
>> ::ComputeIndexToPhysicalPointMatrices()
>>
>> that is defined in the itkImageBase, and
>> overloaded in the itkImage class.
>>
>> This methods verifies that the Direction
>> matrix doesn't have a null determinant.
>>
>> In your case, it seems that the process
>> of reading these two DICOM slices was
>> generating a NULL-determinant Direction.
>>
>>
>> 8) There shouldn't be any relationship
>> with using QApplication or not.
>>
>> You should receive the same error message
>> when you don't use the QApplication class...
>>
>
> That's the way it should be, but in fact it only appears if we put the
> QApplication. It's really strange, truly.
>
>
>>
>> unless....
>>
>> you are somehow linking to ITK shared
>> libraries and may have different versions
>> of them in your installation.
>>
>
> We are linking to ITK shared libraries, but we have only one version
> installed at once (3.10.1).
>
>>
>> 9) Please run your program with :
>>
>> ldd ./bug-3.10.1 ./data
>>
>> and double check that the shared libraries
>> that the program is finding are indeed the
>> ones that you intended to link with.
>>
>
> We checked it, and they are linking to the right libraries.
>
>>
>> Please find attached the modified versions
>> of bug.pro and main.cpp.
>>
>>
>>
>> Regards,
>>
>>
>> Luis
>>
>>
>> ---------------------------------------------------------------
>> On Thu, Oct 8, 2009 at 5:51 AM, Jesús Spínola <jspinola at gmail.com> wrote:
>> > Hello,
>> >
>> > I'm a developer of a cross platform DICOM Viewer application. It uses Qt
>> > libraries ( version 4.5.0 ) for the GUI, itk to read the images (with
>> > GDCMIO
>> > precisely) and vtk to display them.
>> >
>> > Until now, we were using itk 2.8.1 and all was quite fine. Now, we are
>> > looking forward to update the itk libraries to a more recent version but
>> > we
>> > have encountered a problem. We tried itk 3.10.1, and for some series of
>> > images, it gives an exception error when loading the files, and the data
>> > is
>> > not loaded in memory at all, so it's not possible to view any image.
>> >
>> > We have written a litlle program to reproduce the problem. It is very
>> > simple, it declares the itk image format and the dicom reader, and tries
>> > to
>> > read the files contained in a folder the user has provided as an
>> > argument in
>> > the command line.
>> > First, we only wrote the piece of code that reads the files, but it gave
>> > no
>> > error or exception at all.
>> > Later, we added the QApplication object in the main.cpp like you do in a
>> > typical Qt application. Then, when we run the program, the exception
>> > appeared again, so it seems there's some problem when using QApplication
>> > with this version of itk (3.10.1).
>> >
>> > We also tried with an earlier version of itk and a later version. With
>> > the
>> > earlier (3.6.0) the problem doesn't appear, and with the later ( 3.14.0
>> > ) it
>> > continues appearing.
>> >
>> > The exception message we get is the following:
>> >
>> > itk::ERROR: Image(0x9ae0b78): Bad direction, determinant is 0. Direction
>> > is
>> > 1 0 0
>> > 0 0 0
>> > 0 0 0
>> >
>> > We tested this under a kubuntu 9.04
>> >
>> > You can download the source code of the program and additional data
>> > from http://www.box.net/shared/ctjvebgnr5
>> > All those files are compressed using gzip (bug.tar.gz) It contains the
>> > main.cpp to reproduce the problem, with the respective project file for
>> > qt
>> > (bug.pro) and a folder with two dicom images that reproduces the
>> > problem.
>> > To compile the program you will need qt 4.x libraries to be installed (
>> > 4.5
>> > preferably to better reproduce the problem ) and itk libraries too.
>> >
>> > Follow this steps to get and run the executable:
>> >
>> > 1. qmake bug.pro # generate the makefiles
>> > 2. make debug # compile the program with debug info
>> > 3. ./bug-3.10.1 data/ # run the program, passing the directory
>> > containing the image data to load
>> >
>> >
>> > It's a weird problem and we would like to know where is the problem
>> > exactly,
>> > because we don't know why is this error appearing when using the
>> > QApplication object.
>> > Kind regards,
>> >
>> > --
>> > Jesús Spínola
>> >
>> >
>> > --
>> > Jesús Spínola
>> >
>> > _____________________________________
>> > Powered by www.kitware.com
>> >
>> > Visit other Kitware open-source projects at
>> > http://www.kitware.com/opensource/opensource.html
>> >
>> > 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://www.itk.org/mailman/listinfo/insight-users
>> >
>> >
>
>
>
> --
> Jesús Spínola
>
More information about the Insight-users
mailing list