[Insight-users] Bug in ExtractImageFilter?

Elena Pavlovskaia Elena.Pavlovskaia at otismed.com
Wed Dec 10 17:57:27 EST 2008


Hi Luis,

the input image Direction to the ExtractImageFilter is
1 0 0
0 1 0
0 0 1

(I don't use the new "Orientation" functionality yet. So the Identity orientation matrix was set by default.)

Please note that in the current code of ExtractImageFilter
with InputImageDimension= 3 and OutputImageDimension =2
we can never access the last row and column of the inputDirection matrix.

Thank you very much for looking into this!

Elena
________________________________________
From: Luis Ibanez [luis.ibanez at kitware.com]
Sent: Wednesday, December 10, 2008 2:02 PM
To: Elena Pavlovskaia
Cc: insight-users at itk.org
Subject: Re: [Insight-users] Bug in ExtractImageFilter?

Hi Elena,

What is the Direction (Image Orientation) of the image
that you pass as input to the ExtractImageFilter ?


You will find it by doing

     std::cout << image->GetDirection() << std::endl;

or

     image->Print( std::cout );


Please let us know,


    Thanks


        Luis



-------------------------
Elena Pavlovskaia wrote:
> Dear ITK developers,
>
> I think that a bug was introduced to ExtractImageFilter in ITK 3.10
>
> I was using ExtractImageFilter with ITK 3.6, and it worked fine. Since I switched to ITK 3.10 the same call to ExtractImageFilter thorows an exception "Bad direction, determinant is 0..." from ComputeIndexToPhysicalPointMatrices.
>
> Here is the part of the code that leads to the exception:
>
>         typedef  itk::Image<short, 2>                                                           Image2DType;
>         typedef  itk::Image<short, 3>                                                           Image3DType;
>         typedef ExtractImageFilter<Image3DType, Image2DType>             ExtractSliceFilter;
>
> void ExtractSlice( const Image3DType* grayImage, int iSlice, ... )
> {
> ...
>         Image3DType::RegionType region = grayImage->GetBufferedRegion();
>         Image3DType::RegionType::IndexType index = region.GetIndex();
>         Image3DType::RegionType::SizeType size = region.GetSize();
>
>                 ExtractSliceFilter::Pointer sliceExtractor = ExtractSliceFilter::New();
>                 sliceExtractor->SetInput( grayImage );
>
>                 Image3DType::RegionType extractRegion;
>                 Image3DType::RegionType::IndexType extractIndex = index;
>                 Image3DType::RegionType::SizeType extractSize = size;
>
>                 extractIndex[0] = iSlice;
>                 extractSize[0] = 0;
>
>                 extractRegion.SetIndex( extractIndex );
>                 extractRegion.SetSize( extractSize );
>
>                 sliceExtractor->SetExtractionRegion( extractRegion );
>                 sliceExtractor->Update();
> ...
> }
>
> The values by the moment of the last call (  sliceExtractor->Update() ) are:
>
> index = (0, 0, 0)
> size = (50, 512, 512)
> iSlice = 25, and hence
> extractIndex = (25, 0, 0),
> extractSize = (0, 512, 512)
>
> I put the following fix into
> ExtractImageFilter<TInputImage,TOutputImage>
> ::GenerateOutputInformation()
> and it works for me:
>
> Right after the line
>
>           int nonZeroCount2 = 0;
>
> // BUGFIX  ======================== BEGIN =======================
> // BUGFIX I replaced this:
> /*
>           for (unsigned int dim = 0; dim < OutputImageDimension; ++dim)
>             {
>             if (m_ExtractionRegion.GetSize()[dim])
>               {
>               outputDirection[nonZeroCount][nonZeroCount2] =
>                 inputDirection[nonZeroCount][dim];
>               ++nonZeroCount2;
>               }
>             }
> */
> // BUGFIX with this:
>
>            for (unsigned int dim = 0; dim < InputImageDimension; ++dim)
>             {
>             if (m_ExtractionRegion.GetSize()[dim])
>               {
>               outputDirection[nonZeroCount][nonZeroCount2] =
>                 inputDirection[i][dim];
>               ++nonZeroCount2;
>               }
>             }
> // BUGFIX ========================= END ========================
>
>
> (Actually I replaced two words:
> OutputImageDimension --> InputImageDimension and
> nonZeroCount --> i
> )
>
> Thanks,
>
> Elena
>
>
>
> CONFIDENTIAL COMMUNICATION: This email (and accompanying
> documents) transmitted is intended only for the person or entity
> to which it is addressed and may contain confidential and/or
> privileged material. Any review, retransmission, dissemination or
> other use of, or taking of any action in reliance upon, this
> information by persons or entities other than the intended
> recipient is prohibited, and may be a violation of law. If you
> believe that you received this e-mail in error, please do not
> read this e-mail or any attached items. Please delete the e-mail
> and all attachments, including any copies thereof, and inform the
> sender that you have deleted the e-mail, all attachments and any
> copies thereof.
>
> PRIVACY/CONFIDENTIALITY NOTICE REGARDING PROTECTED HEALTH
> INFORMATION: This email (and accompanying documents) may contain
> protected health information that is privileged, confidential
> and/or otherwise exempt from and protected from disclosure under
> applicable laws, including the Health Insurance Portability and
> Accountability Act. The information contained in this email (and
> any accompanying documents) is intended only for the personal and
> the confidential use of the intended recipient. If the reader of
> this message is not the intended recipient or the employee or
> agent responsible for delivering it to the intended recipient,
> you are hereby notified that you have received this information
> in error and that any review, dissemination, distribution,
> copying or action taken in reliance on the contents of this
> communication is strictly prohibited. If you have received this
> communication in error, please destroy it immediately and notify
> the sender.
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>


More information about the Insight-users mailing list