- //========================================================
- // For each dimension, copy the weight to the support region
- //========================================================
-
- // Check if inside mask
- if(m_Mask && !(m_Mask->IsInside(point) ) )
- {
- // Outside: no (deformable) displacement
- return this->m_Jacobian;
- }
-
- //Get index
- this->TransformPointToContinuousIndex( point, m_Index );
-
- // NOTE: if the support region does not lie totally within the grid
- // we assume zero displacement and return the input point
- if ( !this->InsideValidRegion( m_Index ) )
- {
- return this->m_Jacobian;
- }
-
- //Compute interpolation weights
- const WeightsDataType *weights=NULL;
- m_VectorInterpolator->EvaluateWeightsAtContinuousIndex( m_Index, &weights, m_LastJacobianIndex);
- m_SupportRegion.SetIndex( m_LastJacobianIndex );
-
- //Reset the iterators
- unsigned int j = 0;
- for ( j = 0; j < OutputDimension; j++ )
- m_Iterator[j] = IteratorType( m_JacobianImage[j], m_SupportRegion);
-
- // For each dimension, copy the weight to the support region
- while ( ! (m_Iterator[0]).IsAtEnd() )
- {
- //copy weight to jacobian image
- for ( j = 0; j < OutputDimension; j++ )
- {
- m_ZeroVector[j]=*weights;
- (m_Iterator[j]).Set( m_ZeroVector);
- m_ZeroVector[j]=itk::NumericTraits<JacobianValueType>::Zero;
- ++(m_Iterator[j]);
- }
- // go to next coefficient in the support region
- weights++;
- }
- m_NeedResetJacobian = true;
-
- // Return the result
- return this->m_Jacobian;
-
- }
-#endif