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
