[Insight-users] Mean Curvature Calculation in Level Set

Sah Rayman sahrayman at yahoo . com
Thu, 20 Nov 2003 17:35:09 -0800 (PST)


Hi Josh, 

In itkLevelSetFunction.txx, Line 158-184 are:

template <class TImageType>
typename LevelSetFunction<TImageType>::ScalarValueType
LevelSetFunction<TImageType>::ComputeMeanCurvature(
  const NeighborhoodType &itkNotUsed(neighborhood),
  const FloatOffsetType &itkNotUsed(offset),
GlobalDataStruct *gd)
{
  // Calculate the mean curvature
  ScalarValueType curvature_term =
NumericTraits<ScalarValueType>::Zero;
  unsigned int i, j;

  
  for (i = 0; i < ImageDimension; i++)
    {      
    for(j = 0; j < ImageDimension; j++)
      {      
      curvature_term -= gd->m_dx[i] * gd->m_dx[j] *
gd->m_dxy[i][j];

      if(j != i)
        {
        curvature_term += gd->m_dxy[j][j] *
gd->m_dx[i] * gd->m_dx[i];
        }
      }
    }
  
  return (curvature_term / gd->m_GradMagSqr );
}

Let's say ImageDimension==2, 
Then before divided by gd->m_GradMagSqr:

curvature_term = 
-dx[0]*dx[0]*dxy[0][0]
-dx[0]*dx[1]*dxy[0][1] + dx[0]*dx[0]*dxy[1][1]
-dx[1]*dx[0]*dxy[1][0] + dx[1]*dx[1]*dxy[0][0]
-dx[1]*dx[1]*dxy[1][1]

According to Sethian's equation, the result should
just be:

curvature_term = 
-dx[0]*dx[1]*dxy[0][1] + dx[0]*dx[0]*dxy[1][1]
-dx[1]*dx[0]*dxy[1][0] + dx[1]*dx[1]*dxy[0][0]


Please confirm if that is the case for you. 

Thanks.
Sah

--- Joshua Cates <cates at sci . utah . edu> wrote:
> Hello Sah,
> 
> The default curvature calculation in the Level Set
> function is mean
> curvature.  I cannot find the line of code that you
> reference.  Look in
> the file itkLevelSetFunction.txx, method
> ComputeMeanCurvature().  The
> terms for the calculation come from the precomputed
> Hessian matrix.
> 
> Josh.
> 
> ______________________________
>  Josh Cates			
>  Scientific Computing and Imaging Institute
>  University of Utah
>  Email: cates at sci . utah . edu
>  Phone: (801) 587-7697
>  URL:   http://www . sci . utah . edu/~cates
> 
> 
> On Fri, 14 Nov 2003, Sah Rayman wrote:
> 
> > I am looking at function:
> > 
> > template <class TImageType>
> > typename
> LevelSetFunction<TImageType>::ScalarValueType
> >
> LevelSetFunction<TImageType>::ComputeMeanCurvature()
> > 
> > in itkLevelSetFunction.txx, line 158 (ITK 1.4)
> > 
> > When I compared that to Sethian's "Level Set
> Methods
> > and Fast Marching Methods", 2ndEd, pp. 70, Eq.
> 6.36, I
> > found that the C++ implementation contain some
> extra
> > terms in nominator:
> > 
> > -dx[0]*dx[0]*dxy[0][0]-dx[1]*dx[1]*dxy[1][1]-...
> > 
> > Can someone tell me what are these additional
> terms
> > for? Is the result still mean curvature? Any
> reference
> > for that?
> > 
> > 
> > __________________________________
> > Do you Yahoo!?
> > Protect your identity with Yahoo! Mail
> AddressGuard
> > http://antispam . yahoo . com/whatsnewfree
> > _______________________________________________
> > Insight-users mailing list
> > Insight-users at itk . org
> > http://www . itk . org/mailman/listinfo/insight-users
> > 
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk . org
> http://www . itk . org/mailman/listinfo/insight-users


__________________________________
Do you Yahoo!?
Free Pop-Up Blocker - Get it now
http://companion . yahoo . com/