# Does DenseFiniteDifferenceImageFilter perform reinitialization?

**URL:** https://discourse.itk.org/t/does-densefinitedifferenceimagefilter-perform-reinitialization/1028
**Category:** Engineering
**Created:** [June 22, 2018, 7:53pm UTC](https://discourse.itk.org/t/does-densefinitedifferenceimagefilter-perform-reinitialization/1028 "2018-06-22T19:53:49Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![Besler](https://discourse.itk.org/user_avatar/discourse.itk.org/besler/32/135_2.png) [@Besler](https://discourse.itk.org/u/Besler)
#### Post date: [June 22, 2018, 7:53pm UTC](https://discourse.itk.org/t/does-densefinitedifferenceimagefilter-perform-reinitialization/1028/1 "2018-06-22T19:53:50Z")

</div>

Could anyone confirm if `DenseFiniteDifferenceImageFilter` performs reinitialization on the level set filter? I tried searching the code and mailing list[1], but I cannot find where the `DenseFiniteDifferenceImageFilter` reinitializes the distance function!

I am implementing a subclass of `DenseFiniteDifferenceImageFilter` ([.h](https://github.com/InsightSoftwareConsortium/ITK/blob/30206c0ec0cfecb6df9dec22e9a54e98463189db/Modules/Core/FiniteDifference/include/itkDenseFiniteDifferenceImageFilter.h), [.hxx](https://github.com/InsightSoftwareConsortium/ITK/blob/30206c0ec0cfecb6df9dec22e9a54e98463189db/Modules/Core/FiniteDifference/include/itkDenseFiniteDifferenceImageFilter.hxx)). I am using the finite difference hierarchy to solve a level set problem.

Resources:  
[1] [https://cmake.org/pipermail/insight-users/2012-March/044175.html](https://cmake.org/pipermail/insight-users/2012-March/044175.html)

---

<div class="post-metadata">

### Author: ![Besler](https://discourse.itk.org/user_avatar/discourse.itk.org/besler/32/135_2.png) [@Besler](https://discourse.itk.org/u/Besler)
#### Post date: [June 26, 2018, 4:46am UTC](https://discourse.itk.org/t/does-densefinitedifferenceimagefilter-perform-reinitialization/1028/2 "2018-06-26T04:46:59Z")

</div>

Alright, I found the solution!

`DenseFiniteDifferenceImageFilter` does **not** perform reinitialization.

Below is some code for anyone coming across the same problem. I get gradient magnitudes in the range 0.5 - 1.5 with this. It runs fast as well.

```auto
template< typename TInputImage, typename TOutputImage >
void
YourFilterThatInheritsFromDenseFiniteDifferenceImageFilter< TInputImage, TOutputImage >
::InitializeIteration()
{
  Superclass::InitializeIteration();

  /* Only need to perform reinitialization if we have curvature */
  /* Perform reinitialization */
  m_ReinitializationFilter = ReinitializationFilterType::New();
  m_ReinitializationFilter->SetLevelSetValue(0.0f);
  m_ReinitializationFilter->NarrowBandingOff();
  m_ReinitializationFilter->SetInput(this->GetOutput());
  m_ReinitializationFilter->Update();

  /* Copy output */
  typename TOutputImage::Pointer output = this->GetOutput();

  ImageRegionConstIterator< TOutputImage > reinit( m_ReinitializationFilter->GetOutput(), output->GetRequestedRegion() );
  ImageRegionIterator< TOutputImage > out( output, output->GetRequestedRegion() );

  while ( !out.IsAtEnd() )
  {
    out.Value() = reinit.Get();
    ++reinit;
    ++out;
  }
}

```
