[Insight-users] exception in itk::BSplineScatteredDataPointSetToImageFilter ?
Arnaud Gelas
arnaudgelas at gmail.com
Tue Jun 5 07:49:24 EDT 2012
By slightly increasing the spacing, or by adding 1 to the image size, it
works!
Would it be possible either to update the exception message, either add
a comment here to know what could be the reasons and possible fixes?
Would it be possible to detect such an error at an earlier stage?
Thanks,
Arnaud
On 06/05/2012 01:34 PM, Nicholas Tustison wrote:
> Yeah, so it's a floating point thing where your last point is ending
> up on the boundary. Try making the spacing slightly larger.
>
>
> On Jun 5, 2012, at 3:37 AM, Arnaud Gelas wrote:
>
>> Hi Nick,
>>
>> Here is the print out:
>>
>> terminate called after throwing an instance of 'itk::ExceptionObject'
>> what():
>> /home/ajg23/DEVEL/ITK/Modules/Core/Common/src/itkMultiThreader.cxx:359:
>> itk::ERROR: MultiThreader(0xaacf610): Exception occurred during
>> SingleMethodExecute
>> /home/ajg23/DEVEL/ITK/Modules/Filtering/ImageGrid/include/itkBSplineScatteredDataPointSetToImageFilter.hxx:625:
>> itk::ERROR: PointSetToImageFilter(0xaab0d40): The reparameterized
>> point component 2.00002 is outside the corresponding parametric
>> domain of [0, 2].
>>
>> It seems to work with 1 or 2 level, but start throwing an exception
>> from level 3 onward.
>>
>> Arnaud
>>
>> On Mon, Jun 4, 2012 at 5:24 PM, Nicholas Tustison
>> <ntustison at gmail.com <mailto:ntustison at gmail.com>> wrote:
>>
>> THat looks right. What is the print out you get
>> when the exception is thrown?
>>
>>
>> On Jun 4, 2012, at 11:02 AM, Arnaud Gelas wrote:
>>
>> > Nick,
>> >
>> > Here is the code (see below), I have been using (adapted from
>> the test)
>> >
>> > Any idea?
>> >
>> > Thanks,
>> > Arnaud
>> >
>> > const unsigned int ParametricDimension = 1;
>> > typedef itk::PointSet< Vector3DType, ParametricDimension >
>> PointSetType;
>> >
>> > int length = m_Lateral - m_AX;
>> >
>> > CoordinateType dt =
>> > static_cast< CoordinateType >( 1. ) / static_cast<
>> CoordinateType >( length );
>> >
>> > CoordinateType t = 0.;
>> >
>> > typename PointSetType::Pointer pointSet = PointSetType::New();
>> >
>> > IndexType idx;
>> > idx.Fill( 0 );
>> >
>> > int i = 0, k = 0;
>> > for( int y = m_AX; y <= m_Lateral; y++ )
>> > {
>> > if( ( y == ax ) || ( y >= m_Bottom ) )
>> > {
>> > typename PointSetType::PointType pt;
>> > pt[0] = t;
>> >
>> > pointSet->SetPoint( i, pt );
>> >
>> > Vector3DType v;
>> > v[0] = static_cast< typename
>> PointSetType::PointType::CoordRepType >( contour[y] );
>> > v[1] = static_cast< typename
>> PointSetType::PointType::CoordRepType >( y );
>> > v[2] = 0.;
>> >
>> > pointSet->SetPointData( i, v );
>> >
>> > i++;
>> > }
>> >
>> > t += dt;
>> > }
>> >
>> > typedef itk::Image< Vector3DType, ParametricDimension >
>> ParametricImageType;
>> >
>> > typename ParametricImageType::SpacingType spacing;
>> > spacing.Fill( dt );
>> >
>> > typename ParametricImageType::SizeType size;
>> > size.Fill( length + 1 );
>> >
>> > typename ParametricImageType::PointType origin;
>> > origin.Fill( 0. );
>> >
>> > typedef itk::BSplineScatteredDataPointSetToImageFilter<
>> PointSetType, ParametricImageType > FilterType;
>> > typename FilterType::Pointer filter = FilterType::New();
>> > filter->SetInput( pointSet );
>> > filter->SetSize( size );
>> > filter->SetOrigin( origin );
>> > filter->SetSpacing( spacing );
>> > filter->SetSplineOrder( 3 );
>> > filter->SetNumberOfLevels( 1 );
>> >
>> > typename FilterType::ArrayType ncps;
>> > ncps.Fill( 4 );
>> > filter->SetNumberOfControlPoints( ncps );
>> >
>> > filter->SetNumberOfThreads( 1 );
>> > filter->SetGenerateOutputImage( true );
>> > filter->Update();
>> >
>> > On 06/04/2012 04:55 PM, Nicholas Tustison wrote:
>> >> Hi Arnaud,
>> >>
>> >> Yes, so that means that one of your data points is outside the
>> >> user-defined parametric domain. Even if it is right on the edge,
>> >> the parametric domain is open-ended on the right side which
>> >> will cause this exception to be thrown. How are you setting up
>> >> your parametric domain? In other words, what does your call
>> >> look like when you're setting up the filter?
>> >>
>> >> Nick
>> >>
>> >>
>> >> On Jun 4, 2012, at 10:45 AM, Arnaud Gelas wrote:
>> >>
>> >>> Hi Nick,
>> >>>
>> >>> When using itk::BSplineScatteredDataPointSetToImageFilter, I
>> get the following exception
>> >>>
>> >>> itkExceptionMacro( "The reparameterized point component "<< p[i]
>> >>> << " is outside the corresponding parametric domain of [0,"
>> >>> << totalNumberOfSpans<< "]." );
>> >>>
>> >>>
>> >>> I could not figure out if I made a mistake when setting my
>> parameters? or anything else?
>> >>>
>> >>> Any idea? or suggestion?
>> >>>
>> >>> Thanks,
>> >>> Arnaud
>> >
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20120605/8de1c753/attachment-0001.htm>
More information about the Insight-users
mailing list