Hi,
Is my question too difficult? Please do me a favor to check my question. Any idea would be very much appreciated. Or except ITK Software Guide, is there any other manual which introduces the itkGradientMagnitudeRecursiveGaussianImageFilter in very detail, including pipeline and formulas? Thank you so much! Best, Xiaopeng From: [email protected] [mailto:[email protected]] On Behalf Of Xiaopeng Yang Sent: Monday, December 17, 2012 9:14 PM To: [email protected]; 'Insight Developers' Subject: [Insight-users] What is the pipeline inside the itkGradientMagnitudeRecursiveGaussianImageFilter? Dear All, I am trying to look through the itkGradientMagnitudeRecursiveGaussianImageFilter to figure out the pipeline of this filter to visualize the computation process of image gradient calculation from a CT volume dataset using this filter. However, the source code of this filter makes me confused about the pipeline in this filter due to my limited programming skill. This filter consists of two major steps as far as I know: 1) image smoothing using itkRecursiveGaussianImageFilter, and 2) image gradient calculation using a finite difference method (Does anybody know what formula was used for the finite difference method? I checked the source code but could not get it). For step 1, I wrote a code to get the smoothed image. But I am not sure whether my code would get the same smoothed image as itkGradientMagnitudeRecursiveGaussianImageFilter or not. Please check my code and point out which part I missed or is not correct. Thank you very much! // Setup types typedef itk::Image< float, 3 > FloatImageType; typedef itk::Image< unsigned char, 3 > UnsignedCharImageType; typedef itk::ImageFileReader< FloatImageType > readerType; typedef itk::RecursiveGaussianImageFilter< FloatImageType, FloatImageType > filterType; // Create and setup a reader readerType::Pointer reader = readerType::New(); reader->SetFileName( "D:/Hybrid Method/Hybrid/LEJ/Diffusion_filter/3D.dcm" ); // Create and setup a gaussian filter filterType::Pointer m_DerivativeFilter = filterType::New(); m_DerivativeFilter->SetInput( reader->GetOutput() ); //m_DerivativeFilter->SetDirection(1); // "x" axis m_DerivativeFilter->SetFirstOrder(); m_DerivativeFilter->SetSigma(1.3); m_DerivativeFilter->SetNormalizeAcrossScale(true); m_DerivativeFilter->ReleaseDataFlagOn(); filterType::Pointer m_SmoothingFilters[2]; for( unsigned int i = 0; i< 2; i++ ) { m_SmoothingFilters[ i ] = filterType::New(); m_SmoothingFilters[ i ]->SetZeroOrder(); m_SmoothingFilters[ i ]->SetNormalizeAcrossScale( true ); m_SmoothingFilters[ i ]->SetSigma( 1.3 ); } m_SmoothingFilters[0]->SetInput( m_DerivativeFilter->GetOutput() ); for( unsigned int i = 1; i< 2; i++ ) { m_SmoothingFilters[ i ]->SetInput( m_SmoothingFilters[i-1]->GetOutput() ); } typedef itk::CastImageFilter< FloatImageType, UnsignedCharImageType > CastFilterType; CastFilterType::Pointer caster1 = CastFilterType::New(); caster1->SetInput( m_SmoothingFilters[1]->GetOutput() ); typedef itk::ImageFileWriter< UnsignedCharImageType > WriterType; WriterType::Pointer writer1 = WriterType::New(); writer1->SetFileName( "RecusiveGaussian.dcm" ); writer1->SetInput(caster1->GetOutput()); writer1->Update(); return EXIT_SUCCESS; Best regards, Xiaopeng
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Kitware offers ITK Training Courses, for more information visit: http://kitware.com/products/protraining.php Please keep messages on-topic and check the ITK FAQ at: http://www.itk.org/Wiki/ITK_FAQ Follow this link to subscribe/unsubscribe: http://www.itk.org/mailman/listinfo/insight-developers
