The interpolator API allows the interpolator to be called for voxels that are within the bounds of the image, but for which the voxels in the window footprint for interpolation are not. As a result, the implementation will ask for data at locations of neighbor voxels that are outside of the image. There is no check for this in the interpolator code (by design).

This is a bug in the design. The assumption of the API is that it is safe to call an interpolator if the continuous index at which the interpolation is to be computed is inside the valid range. However, different interpolators use different amounts of surrounding voxels to compute the interpolated value (nearest neighor, linear, sinc etc. use different window sizes). This leads the interpolation function to sometimes access locations that are out of bounds. Sometimes this leads to a seg fault, sometimes just to invalid data being interpolated.

You are getting a segmentation fault when an invalid memory location corresponding to a neighbor voxel that does not exist is attempted to be accessed. You can correct this by modifying the interpolator (in this case the linear interpolator) to account for voxels that are not valid to dereference.

--
Simon



Message: 2
Date: Fri, 29 Jun 2012 11:15:22 +0200
From: pj gouttenoire<[email protected]>
Subject: [Insight-developers] problem with
        itk::LinearInterpolateImageFunction
To: [email protected]
Message-ID:<[email protected]>
Content-Type: text/plain; charset=UTF-8; format=flowed

Hello,

i use itk::RegularStepGradientDescentBaseOptimizer for computing path
between structures, the first version is doing in a for loop and one by
one and it works, but it's very long so i use openMP for parallel
computation. I made the directive fot the for loop and i launch it in
multprocessor and i have this seg fault

Program received signal SIGSEGV, Segmentation fault.

[Switching to Thread 1126189376 (LWP 17584)]
0x00000000004be7d4 in
itk::LinearInterpolateImageFunction<itk::Image<double, 3u>,
double>::EvaluateAtContinuousIndex (
this=0x2aaabc028150, index=@0x43202c70)
at
/data/id19/bones/Creatis/All/thirdparty_install/include/InsightToolkit/Common/itkLinearInterpolateImageFunction.txx:150
150 value += static_cast<RealType>( this->GetInputImage()->GetPixel(
neighIndex ) ) * overlap;
(gdb) bt


_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://kitware.com/products/protraining.php

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-developers

Reply via email to