<div>Hi, all<br><br>I am trying to use GradientVectorFlowImageFilter to diffuse the gradient information to the whole image. The example code works well, but when I change the code, to diffuse the gradient as follows:<br><br>===========================================================<br>#if defined(_MSC_VER)<br>#pragma warning ( disable : 4786 )<br>#endif<br>#include &lt;itkImage.h&gt;<br>#include &lt;itkGradientRecursiveGaussianImageFilter.h&gt;<br>#include &lt;itkImageRegionIteratorWithIndex.h&gt;<br>#include &lt;itkCovariantVector.h&gt;<br>#include &lt;itkGradientImageFilter.h&gt;<br>#include &lt;itkGradientToMagnitudeImageFilter.h&gt;<br>#include &lt;itkDerivativeImageFilter.h&gt;<br>#include &lt;itkGradientVectorFlowImageFilter.h&gt;<br>#include &lt;itkLaplacianImageFilter.h&gt;<br><br>#include "itkRecursiveGaussianImageFilter.h"<br><br>#include "itkImageFileWriter.h"<br><br>int main(int argc, char **argv)/**[])*/ <br>{<br>&nbsp; // Define the dimension of the images<br>&nbsp; const unsigned int myDimension = 3;<br><br>&nbsp; // Declare gradient type<br>&nbsp; typedef itk::CovariantVector&lt;double, myDimension&gt; myGradientType;<br><br>&nbsp; // Declare the types of the images<br>&nbsp; typedef itk::Image&lt;double, myDimension&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myImageType;<br>&nbsp; typedef itk::Image&lt;myGradientType, myDimension&gt;&nbsp;&nbsp; myGradientImageType;<br><br>&nbsp; // Declare the type of the index to access images<br>&nbsp; typedef itk::Index&lt;myDimension&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myIndexType;<br><br>&nbsp; // Declare the type of the size <br>&nbsp; typedef itk::Size&lt;myDimension&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySizeType;<br><br>&nbsp; // Declare the type of the Region<br>&nbsp; typedef itk::ImageRegion&lt;myDimension&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myRegionType;<br><br>&nbsp; typedef&nbsp;&nbsp;&nbsp; itk::RecursiveGaussianImageFilter&lt;myImageType,myImageType&gt;&nbsp;&nbsp;&nbsp; RecursiveGaussianImageFilterType;<br><br>&nbsp; typedef itk::LaplacianImageFilter&lt;myImageType, myImageType&gt; myLaplacianFilterType;<br>&nbsp; typedef itk::GradientVectorFlowImageFilter&lt;myGradientImageType, myGradientImageType&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myGVFFilterType;<br><br>&nbsp; typedef itk::GradientImageFilter&lt;myImageType, double, double&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myGFilterType;<br><br>&nbsp; typedef itk::GradientToMagnitudeImageFilter&lt;myGradientImageType, myImageType&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myGToMFilterType;<br>&nbsp; // Create the image<br>&nbsp; myImageType::Pointer inputImage&nbsp; = myImageType::New();<br><br>&nbsp; // Define their size, and start index<br>&nbsp; mySizeType size;<br>&nbsp; size[0] = 64;<br>&nbsp; size[1] = 64;<br>&nbsp; size[2] = 64;&nbsp;&nbsp;&nbsp; <br><br>&nbsp; myIndexType start;<br>&nbsp; start.Fill(0);<br><br>&nbsp; myRegionType region;<br>&nbsp; region.SetIndex( start );<br>&nbsp; region.SetSize( size );<br><br>&nbsp; // Initialize Image A<br>&nbsp; inputImage-&gt;SetLargestPossibleRegion( region );<br>&nbsp; inputImage-&gt;SetBufferedRegion( region );<br>&nbsp; inputImage-&gt;SetRequestedRegion( region );<br>&nbsp; inputImage-&gt;Allocate();<br><br>&nbsp; // Declare Iterator types apropriated for each image <br>&nbsp; typedef itk::ImageRegionIteratorWithIndex&lt;myImageType&gt;&nbsp; myIteratorType;<br><br>&nbsp; // Create one iterator for the Input Image A (this is a light object)<br>&nbsp; myIteratorType it( inputImage, inputImage-&gt;GetRequestedRegion() );<br><br>&nbsp; // Initialize the content of Image A<br>&nbsp; std::cout &lt;&lt; "Input Image initialization " &lt;&lt; std::endl;<br>&nbsp; <br>&nbsp; it.GoToBegin();<br>&nbsp; while( !it.IsAtEnd() ) <br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; it.Set( 0.0 );<br>&nbsp;&nbsp;&nbsp; ++it;<br>&nbsp; }<br><br>&nbsp; size[0] = 32;<br>&nbsp; size[1] = 32;<br>&nbsp; size[2] = 32;&nbsp;&nbsp;&nbsp; <br><br>&nbsp; start[0] = 15;<br>&nbsp; start[1] = 15;<br>&nbsp; start[2] = 15;<br>&nbsp; // Create one iterator for an internal region<br>&nbsp; region.SetSize( size );<br>&nbsp; region.SetIndex( start );<br>&nbsp; myIteratorType itb( inputImage, region );<br>&nbsp;&nbsp;&nbsp; <br>&nbsp; itb.GoToBegin();<br>&nbsp; // Initialize the content the internal region<br>&nbsp; while( !itb.IsAtEnd() ) <br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; itb.Set( 100.0 );<br>&nbsp;&nbsp;&nbsp; ++itb;<br>&nbsp; }<br>&nbsp; <br>&nbsp; myGFilterType::Pointer f_Gradient&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; myGFilterType::New();<br>&nbsp; f_Gradient-&gt;SetInput(inputImage);<br>&nbsp; f_Gradient-&gt;Update();<br>&nbsp; typedef&nbsp;&nbsp;&nbsp; itk::ImageFileWriter&lt;myGradientImageType&gt;&nbsp;&nbsp;&nbsp; VectorImageWriterType;<br>&nbsp; VectorImageWriterType::Pointer&nbsp;&nbsp;&nbsp; GradientWriter&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; VectorImageWriterType::New();<br>&nbsp; GradientWriter-&gt;SetInput(f_Gradient-&gt;GetOutput());<br>&nbsp; GradientWriter-&gt;SetFileName("Gradient.mha");<br>&nbsp; GradientWriter-&gt;Update();<br><br>&nbsp; myLaplacianFilterType::Pointer m_LFilter = myLaplacianFilterType::New();<br>&nbsp; myGVFFilterType::Pointer m_GVFFilter = myGVFFilterType::New();<br><br>&nbsp; m_GVFFilter-&gt;SetInput(f_Gradient-&gt;GetOutput());<br>&nbsp; m_GVFFilter-&gt;SetLaplacianFilter(m_LFilter);<br>&nbsp; m_GVFFilter-&gt;SetNoiseLevel(100);<br>&nbsp; m_GVFFilter-&gt;SetTimeStep(0.002);<br>&nbsp; m_GVFFilter-&gt;SetIterationNum(2);<br><br>&nbsp; m_GVFFilter-&gt;Update();<br><br>&nbsp; myGradientImageType::Pointer&nbsp;&nbsp;&nbsp; m_GVF&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; m_GVFFilter-&gt;GetOutput();<br>&nbsp; VectorImageWriterType::Pointer&nbsp;&nbsp;&nbsp; writer2&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; VectorImageWriterType::New();<br>&nbsp; writer2-&gt;SetInput(m_GVF);<br>&nbsp; writer2-&gt;SetFileName("GGVF.mha");<br>&nbsp; writer2-&gt;Update();<br><br>&nbsp; return EXIT_SUCCESS;<br><br>}<br>===========================================================<br><br>It seems that the GVF results is the same as the gradient filter. The grdient information is not diffused at all. <br><br>Is there any errors when I use the GVF filter?<br><br>Thanks all.<br><br>Kun<br>&nbsp;&nbsp; <br><br></div><br><!-- footer --><br><span title="neteasefooter"/><hr/>
<a href="http://www.yeah.net">网易邮箱,中国第一大电子邮件服务商</a>
</span>