<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial">Hi ,everyone <div> Using the code which included in folder Example/Segmentation , GeodesicActiveContourImageFilter , I can segment a jpg format picture . But if I want to segment a dicom file , a error happen . Please help me ! My code is shown as follow . </div><div> Thank you in advance !</div><div>zhq</div><div><br></div><div><div>#include "itkGeodesicActiveContourLevelSetImageFilter.h"</div><div>#include "itkCurvatureAnisotropicDiffusionImageFilter.h"</div><div>#include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"</div><div>#include "itkSigmoidImageFilter.h"</div><div>#include "itkFastMarchingImageFilter.h"</div><div>#include "itkRescaleIntensityImageFilter.h"</div><div>#include "itkBinaryThresholdImageFilter.h"</div><div>#include "itkImageFileReader.h"</div><div>#include "itkImageFileWriter.h"</div><div>#include "itkGDCMImageIO.h"</div><div>#include "itkJPEGImageIO.h"</div><div><br></div><div>int main()</div><div>{</div><div> typedef float InternalPixelType;</div><div> const unsigned int Dimension = 2;</div><div> typedef itk::Image< InternalPixelType, Dimension > InternalImageType;</div><div><br></div><div> typedef unsigned char OutputPixelType;</div><div> typedef itk::Image< OutputPixelType, Dimension > OutputImageType;</div><div> typedef itk::BinaryThresholdImageFilter<</div><div> InternalImageType,</div><div> OutputImageType > ThresholdingFilterType;</div><div><br></div><div> ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();</div><div><br></div><div> thresholder->SetLowerThreshold( -1000.0 );</div><div> thresholder->SetUpperThreshold( 0 );</div><div><br></div><div> thresholder->SetOutsideValue( 0 );</div><div> thresholder->SetInsideValue( 255 );</div><div>// ************* reader ****************************** //</div><div><br></div><div> typedef itk::ImageFileReader< InternalImageType > ReaderType;</div><div> ReaderType::Pointer reader = ReaderType::New();</div><div>// reader->SetFileName("C:\\Users\\zhq\\Desktop\\BrainProtonDensitySlice.png");</div><div><br></div><div> reader->SetImageIO(itk::GDCMImageIO::New());</div><div> reader->SetFileName("C:\\Users\\zhq\\Desktop\\data\\SNAP_CR\\E403434298\\E403434298S1901I301.dcm"); </div><div> </div><div><br></div><div>// reader->SetImageIO(itk::JPEGImageIO::New());</div><div>// reader->SetFileName("C:\\Users\\zhq\\Desktop\\data\\picture8\\1.jpeg");</div><div> </div><div> reader->Update();</div><div> std::cout<<"reader update"<<std::endl;</div><div>// ************* finish reader ********************** // </div><div><br></div><div><br></div><div>// ************* writer ******************************* // </div><div> typedef itk::ImageFileWriter< OutputImageType > WriterType;</div><div> WriterType::Pointer writer = WriterType::New();</div><div> writer->SetFileName("C:\\Users\\zhq\\Desktop\\ActiveContour.png");</div><div><br></div><div><br></div><div>// ************* finish writer ********************** //</div><div><br></div><div> typedef itk::RescaleIntensityImageFilter<</div><div> InternalImageType,</div><div> OutputImageType > CastFilterType;</div><div><br></div><div> typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<</div><div> InternalImageType,</div><div> InternalImageType > GradientFilterType;</div><div> typedef itk::SigmoidImageFilter<</div><div> InternalImageType,</div><div> InternalImageType > SigmoidFilterType;</div><div><br></div><div> GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();</div><div><br></div><div> SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();</div><div><br></div><div> sigmoid->SetOutputMinimum( 0.0 );</div><div> sigmoid->SetOutputMaximum( 1.0 );</div><div><br></div><div> typedef itk::FastMarchingImageFilter<</div><div> InternalImageType,</div><div> InternalImageType > FastMarchingFilterType;</div><div><br></div><div> FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();</div><div><br></div><div> typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,</div><div> InternalImageType > GeodesicActiveContourFilterType;</div><div> GeodesicActiveContourFilterType::Pointer geodesicActiveContour =</div><div> GeodesicActiveContourFilterType::New();</div><div>// geodesicActiveContour->Update();</div><div>// std::cout<<"geodesicActiveContour new updata"<<std::endl;</div><div><br></div><div> const double propagationScaling = 0.4;</div><div><br></div><div> geodesicActiveContour->SetPropagationScaling( propagationScaling );</div><div>// geodesicActiveContour->Update();</div><div>// std::cout<<"geodesicActiveContour SetPropagationScaling updata"<<std::endl;</div><div> geodesicActiveContour->SetCurvatureScaling( 1.0 );</div><div> geodesicActiveContour->SetAdvectionScaling( 1.0 );</div><div>// geodesicActiveContour->Update();</div><div>// std::cout<<"geodesicActiveContour SetAdvectionScaling updata"<<std::endl;</div><div><br></div><div> geodesicActiveContour->SetMaximumRMSError( 0.02 );</div><div> geodesicActiveContour->SetNumberOfIterations( 800 );</div><div>// geodesicActiveContour->Update();</div><div>// std::cout<<"geodesicActiveContour SetNumberOfIterations updata"<<std::endl;</div><div><br></div><div> gradientMagnitude->SetInput( reader->GetOutput() );</div><div> sigmoid->SetInput( gradientMagnitude->GetOutput() );</div><div><br></div><div> geodesicActiveContour->SetInput( fastMarching->GetOutput() );</div><div> geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );</div><div>// geodesicActiveContour->Update();</div><div>// std::cout<<"geodesicActiveContour SetFeatureImage updata"<<std::endl;</div><div><br></div><div> thresholder->SetInput( geodesicActiveContour->GetOutput() );</div><div> writer->SetInput( thresholder->GetOutput() );</div><div><br></div><div> const double sigma = 0.4 ;</div><div> gradientMagnitude->SetSigma( sigma );</div><div><br></div><div> const double alpha = -0.2;</div><div> const double beta = 10;</div><div><br></div><div> sigmoid->SetAlpha( alpha );</div><div> sigmoid->SetBeta( beta );</div><div><br></div><div> typedef FastMarchingFilterType::NodeContainer NodeContainer;</div><div> typedef FastMarchingFilterType::NodeType NodeType;</div><div><br></div><div> NodeContainer::Pointer seeds = NodeContainer::New();</div><div><br></div><div> InternalImageType::IndexType seedPosition;</div><div><br></div><div> seedPosition[0] = 370 ; // 81;</div><div> seedPosition[1] = 443 ; // 114;</div><div><br></div><div> const double initialDistance = 5;</div><div><br></div><div> NodeType node;</div><div><br></div><div> const double seedValue = - initialDistance;</div><div><br></div><div> node.SetValue( seedValue );</div><div> node.SetIndex( seedPosition );</div><div><br></div><div> seeds->Initialize();</div><div> seeds->InsertElement( 0, node );</div><div><br></div><div> fastMarching->SetTrialPoints( seeds );</div><div><br></div><div> fastMarching->SetSpeedConstant( 1.0 );</div><div><br></div><div> fastMarching->SetOutputSize(</div><div> reader->GetOutput()->GetBufferedRegion().GetSize() );</div><div><br></div><div><br></div><div> </div><div> gradientMagnitude->Update();</div><div> std::cout<<"gradientMagnitude update"<<std::endl;</div><div><br></div><div> sigmoid->Update();</div><div> std::cout<<"sigmoid update"<<std::endl;</div><div><br></div><div> fastMarching->Update();</div><div> std::cout<<"fastMarching update"<<std::endl;</div><div><br></div><div> geodesicActiveContour->Update();</div><div> std::cout<<"geodesicActiveContour update"<<std::endl;</div><div><br></div><div> writer->Update();</div><div> std::cout<<"writer update"<<std::endl;</div><div><br></div><div><br></div><div><br></div><div> std::cout << std::endl;</div><div> std::cout << "Max. no. iterations: " << geodesicActiveContour->GetNumberOfIterations() << std::endl;</div><div> std::cout << "Max. RMS error: " << geodesicActiveContour->GetMaximumRMSError() << std::endl;</div><div> std::cout << std::endl;</div><div> std::cout << "No. elpased iterations: " << geodesicActiveContour->GetElapsedIterations() << std::endl;</div><div> std::cout << "RMS change: " << geodesicActiveContour->GetRMSChange() << std::endl;</div><div><br></div><div> return 0;</div><div>}</div></div><div><br></div></div>