Antw: Re: [Insight-users] MattesMutualInformation
MultiResolution Registration crashes
Jan Schreiber
Jan.Schreiber at umit.at
Fri Jun 3 10:13:40 EDT 2005
Hi Karthik,
unfortunately, an update of the cvs sources did not help.
I am not using ImageAdaptors directly and a breakpoint in the ImageAdaptor's constructor has never been reached. So it seams also not to be used indirectly.
It seams that the m_Position variable gets an invalid value within the ImageRegionConstIteratorWithIndex::opearator++(). At least the instruction
InternalPixelType ipt = *m_Position;
at the beginning of the function does not make any problems,
ipt = *m_Position;
at the end of the function throws an exception...
Another thing I do not really understand is the ShrinkImageFilter (used by the pyramid). As the shrinkfactor is 8, the pixel spacing of my shrinked image is also 8.0 (having a spacing of 1.0 in the original image). But as my image has width and height that is not divisible by 8, the
( shrinked image with ) * ( shrinkfactor ) != ( original image width)
Could that matter?
Thanks and regards,
Jan
P.S.: thank you also for your replay on the demons questions
>>> Karthik Krishnan <Karthik.Krishnan at kitware.com> 06/02/05 7:22 >>>
Ah,
We ran into nearly the same problem yesterday. Are you using
ImageAdaptors in your application. There was a problem with the adaptor
update mechanism that caused the application to crash cause the
m_PixelAccessor found the buffered region to be empty.
Try updating itkImageBase.h and itkImageBase.txx and itkImageAdaptor.cxx
all in Code/Common
Thanks
regards
karthik
Jan Schreiber wrote:
>Hi,
>
>my registation of two x-ray images (sometimes) crashes.
>I am using the cvs version (about 1-2 weeks old) of ITK, Microsoft Visual C++ .NET and the following components:
> itk::RegularStepGradientDescentOptimizer
> itk::LinearInterpolateImageFunction
> itk::MultiResolutionImageRegistrationMethod
> itk::(Recursive)MultiResolutionPyramidImageFilter
> itk::(Recursive)MultiResolutionPyramidImageFilter
> itk::MattesMutualInformationImageToImageMetric
>
>
>The Error occures in ImageConstIteratorWithIndex.h line 234
> PixelType Get(void) const
> { return m_PixelAccessor.Get(*m_Position); }
>because m_Position is not valid.
>
>This Get() Function is called in line 532 of itkMattesMutualInformationImageToImageMetric.txx
> (*iter).FixedImageValue = regionIter.Get();
>
>Consulting the debugger gives information shown at the end of this mail ( have a look at the line with <<========== )
>
>The Spacing of my image is usually 1.0 (as I am reading PNG Images). Within the pyramid (the output below is from level 4) the spacing is 8.0. Is this realted to the downsampling?
>Originally, my Images have a size of 2828x2320 Pixels, 8 bit stored as float and the FixedImageRegion ist set to x:1800, y:1000, w:940, h:1290.
>
>m_Position gets invalid if the level of the MultiResolutionImageRegistrationMethod is >= 3.
>The chance for this crah is almost 100% when SetUseAllPixels(true) is used and the FixedImageRegion is not the LergestPossibleRegion. Taking random Pixels reduces the risk of a crah but does not eliminate it.
>Setting the FixedImageRegion to something smaller than the LargestPossibleRegion increases the crash-frequency .
>
>I would be very glad if you had any suggestion...
>
>Thanks in advance,
>Jan
>
>
>
>Debugger output:
>
>- regionIter {...} itk::ImageRegionConstIteratorWithIndex<ibia::Image2DFloat>
>- itk::ImageConstIteratorWithIndex<ibia::Image2DFloat> {ImageDimension=??? m_Image={m_Pointer=0x0a088e98 } m_PositionIndex={m_Index=0x011edc1c } ...} itk::ImageConstIteratorWithIndex<ibia::Image2DFloat>
>- m_Image {m_Pointer=0x0a088e98 } itk::WeakPointer<ibia::Image2DFloat const >
>- m_Pointer 0x0a088e98 const ibia::Image2DFloat *
>- ibia::Image2D<float> {...} const ibia::Image2D<float>
>- ibia::ImageBase<float,2> {...} const ibia::ImageBase<float,2>
>- itk::Image<float,2> {ImageDimension=??? } const itk::Image<float,2>
>- itk::ImageBase<2> {ImageDimension=??? m_Spacing={...} m_Origin={...} ...} const itk::ImageBase<2>
>+ itk::DataObject {m_Source={m_Pointer=0x0a088db8 {m_Updating=??? m_OutputInformationMTime=??? m_Inputs=??? ...} } m_SourceOutputIndex=0 m_UpdateMTime={m_ModifiedTime=2988 } ...} itk::DataObject
>- m_Spacing {...} itk::Vector<double,2>
>- itk::FixedArray<double,2> {Length=??? } itk::FixedArray<double,2>
>- m_InternalArray 0x0a088ee0 double [2]
> [0] 8.0000000000000000 double
> [1] 8.0000000000000000 double
>- m_Origin {...} itk::Point<double,2>
>- itk::FixedArray<double,2> {Length=??? } itk::FixedArray<double,2>
>- m_InternalArray 0x0a088ef0 double [2]
> [0] 0.00000000000000000 double
> [1] 0.00000000000000000 double
>+ m_Direction {RowDimensions=??? } itk::Matrix<double,2,2>
>+ m_OffsetTable 0x0a088f20 long [3]
>- m_LargestPossibleRegion {ImageDimension=??? SliceDimension=??? } itk::ImageRegion<2>
>+ itk::Region {...} const itk::Region
>- m_Index {m_Index=0x0a088f30 } itk::Index<2>
>- m_Index 0x0a088f30 long [2]
> [0] 0 long
> [1] 0 long
>- m_Size {m_Size=0x0a088f38 } itk::Size<2>
>- m_Size 0x0a088f38 unsigned long [2]
> [0] 353 unsigned long
> [1] 290 unsigned long
>- m_RequestedRegion {ImageDimension=??? SliceDimension=??? } itk::ImageRegion<2>
>+ itk::Region {...} const itk::Region
>- m_Index {m_Index=0x0a088f44 } itk::Index<2>
>- m_Index 0x0a088f44 long [2]
> [0] 0 long
> [1] 0 long
>- m_Size {m_Size=0x0a088f4c } itk::Size<2>
>- m_Size 0x0a088f4c unsigned long [2]
> [0] 353 unsigned long
> [1] 290 unsigned long
>- m_BufferedRegion {ImageDimension=??? SliceDimension=??? } itk::ImageRegion<2>
>+ itk::Region {...} const itk::Region
>- m_Index {m_Index=0x0a088f58 } itk::Index<2>
>- m_Index 0x0a088f58 long [2]
> [0] 0 long
> [1] 0 long
>- m_Size {m_Size=0x0a088f60 } itk::Size<2>
>- m_Size 0x0a088f60 unsigned long [2]
> [0] 353 unsigned long
> [1] 290 unsigned long
>+ m_Buffer {m_Pointer=0x0a088fb0 {m_ImportPointer=??? m_Size=??? m_Capacity=??? ...} } itk::SmartPointer<itk::ImportImageContainer<unsigned long,float> >
>- m_PositionIndex {m_Index=0x011edc1c } itk::Index<2>
>- m_Index 0x011edc1c long [2]
> [0] 257 long
> [1] 129 long
>- m_BeginIndex {m_Index=0x011edc24 } itk::Index<2>
>- m_Index 0x011edc24 long [2]
> [0] 225 long
> [1] 125 long
>- m_EndIndex {m_Index=0x011edc2c } itk::Index<2>
>- m_Index 0x011edc2c long [2]
> [0] 342 long
> [1] 286 long
>- m_Region {ImageDimension=??? SliceDimension=??? } itk::ImageRegion<2>
>+ itk::Region {...} const itk::Region
>+ m_Index {m_Index=0x011edc38 } itk::Index<2>
>+ m_Size {m_Size=0x011edc40 } itk::Size<2>
>- m_OffsetTable 0x011edc48 unsigned long [3]
> [0] 1 unsigned long
> [1] 353 unsigned long
> [2] 102370 unsigned long
>- m_Position 0x0a178000 const float *
> CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden const float <<================
>- m_Begin 0x0a13f520 const float *
> 86.568977 const float
>- m_End 0x0a176970 const float *
> 8.7256823 const float
> m_Remaining true bool
> m_PixelAccessor {...} itk::DefaultPixelAccessor<float>
>
>_______________________________________________
>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