Hello,<br><br>I am reading a 3D volume, rescale it to [0,255], extract a 3D region from this volume, use the itkGeodesicActiveContourLevelSetImageFilter over the extracted region and finally get a slice from the output of the GAC filter. Well I have wrote some code, which doesn't give any debug errors. I have loaded a small extracted region (5x5x5) as input for the itkGeodesicActiveContourLevelSetImageFilte.After finishing the debug of the code, the compiler seems to still runing, for 3 hours so far. I cannot understand the reason why debuger is still runing and I didn't get any result, while I do not get any debug error when using breakpoints. Here is my code. I hope someone could help me.<br>
<br>Thanks<br><br><br> ///////////filter rescale<br> FilterType_rescale::Pointer filter_rescale = FilterType_rescale::New();<br> filter_rescale->SetOutputMinimum( 0 );<br> filter_rescale->SetOutputMaximum( value_norm );<br>
<br>//////extract region filter<br> FilterType_region::Pointer filter_region = FilterType_region::New();<br> OutputImageType::IndexType start_region;<br> start_region[0] = ui->doubleSpinBox_start_x->value();<br>
start_region[1] = ui->doubleSpinBox_start_y->value();<br> start_region[2] = ui->doubleSpinBox_start_z->value();<br><br> OutputImageType::SizeType size_region;<br> size_region[0] = ui->doubleSpinBox_size_x->value();<br>
size_region[1] = ui->doubleSpinBox_size_y->value();<br> size_region[2] = ui->doubleSpinBox_size_z->value();<br><br> OutputImageType::RegionType desiredRegion_region;<br> desiredRegion_region.SetSize( size_region );<br>
desiredRegion_region.SetIndex( start_region );<br><br> filter_region->SetRegionOfInterest( desiredRegion_region );<br><br> ReaderType::Pointer reader = ReaderType::New();<br> <br><br> reader->SetFileName( fileName.toStdString() );<br>
<br><br> filter_rescale->SetInput( reader->GetOutput() );<br> filter_region->SetInput( filter_rescale->GetOutput() );<br> ////////////////////////////////////////////////////////////<br>
/////////////////////GAC algorithm in extracted region<br> ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();<br> <br> thresholder->SetLowerThreshold( -1000.0 );<br>
thresholder->SetUpperThreshold( 0.0 );<br><br> thresholder->SetOutsideValue( 0 );<br> thresholder->SetInsideValue( 255 );<br><br> <br> SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();<br>
<br> GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();<br><br> SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();<br><br> sigmoid->SetOutputMinimum( 0.0 );<br> sigmoid->SetOutputMaximum( 1.0 );<br>
<br><br> FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();<br><br> GeodesicActiveContourFilterType::Pointer geodesicActiveContour = <br> GeodesicActiveContourFilterType::New();<br>
<br><br><br> const double propagationScaling = ui->doubleSpinBox_propagationScaling->value();<br> geodesicActiveContour->SetPropagationScaling( propagationScaling );<br> geodesicActiveContour->SetCurvatureScaling( 1.0 );<br>
geodesicActiveContour->SetAdvectionScaling( 1.0 );<br><br><br> geodesicActiveContour->SetMaximumRMSError( 0.02 );<br> geodesicActiveContour->SetNumberOfIterations( 800 );<br><br><br> smoothing->SetInput( filter_region->GetOutput() );<br>
gradientMagnitude->SetInput( smoothing->GetOutput() );<br> sigmoid->SetInput( gradientMagnitude->GetOutput() );<br><br> geodesicActiveContour->SetInput( fastMarching->GetOutput() );<br> geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );<br>
<br> thresholder->SetInput( geodesicActiveContour->GetOutput() );<br><br> //////////////////////////<br><br> FilterType_extract_GAC::Pointer filter_extract_z = FilterType_extract_GAC::New();<br><br> WriterType::Pointer writer_z = WriterType::New();<br>
writer_z->SetFileName( "result_z.png" );<br><br> filter_region->Update();<br> InputImageType::RegionType inputRegion =<br> filter_region->GetOutput()->GetLargestPossibleRegion();<br><br>
InputImageType::SizeType size = inputRegion.GetSize();<br> <br> // get the size of the hole 3D image<br> size_x = size[0];<br> size_y = size[1];<br> size_z = size[2];<br> <br> // get slices of z coordinate<br> size[2] = 0; <br>
<br> InputImageType::IndexType start = inputRegion.GetIndex();<br> // const unsigned int sliceNumber = 90;<br> ui->verticalScrollBar_z->setRange(0,size_z-1);<br> unsigned int sliceNumber = ui->verticalScrollBar_z->value();<br>
start[2] = sliceNumber;<br> // ui->verticalScrollBar_z->setValue(sliceNumber);<br> <br><br> InputImageType::RegionType desiredRegion;<br> desiredRegion.SetSize( size );<br> desiredRegion.SetIndex( start );<br><br>
filter_extract_z->SetExtractionRegion( desiredRegion );<br><br> ////////////////////////////<br><br> filter_extract_z->SetInput( thresholder->GetOutput() );<br> writer_z->SetInput( filter_extract_z->GetOutput() );<br>
<br><br> smoothing->SetTimeStep( 0.0625 );<br> smoothing->SetNumberOfIterations( 5 );<br> smoothing->SetConductanceParameter( 9.0 );<br><br> const double sigma = ui->doubleSpinBox_sigma->value(); <br>
gradientMagnitude->SetSigma( sigma );<br><br> const double alpha = ui->doubleSpinBox_alpha->value(); <br> const double beta = ui->doubleSpinBox_beta->value(); <br> sigmoid->SetAlpha( alpha );<br>
sigmoid->SetBeta( beta );<br><br><br> NodeContainer::Pointer seeds = NodeContainer::New();<br><br> InputImageType::IndexType seedPosition;<br> <br> seedPosition[0] = ui->doubleSpinBox_seed_x->value(); <br>
seedPosition[1] = ui->doubleSpinBox_seed_y->value();<br> seedPosition[2] = ui->doubleSpinBox_seed_z->value();<br><br> const double initialDistance = ui->doubleSpinBox_initial_distance->value();<br><br>
NodeType node;<br><br> const double seedValue = - initialDistance;<br> <br> node.SetValue( seedValue );<br> node.SetIndex( seedPosition );<br><br><br> seeds->Initialize();<br> seeds->InsertElement( 0, node );<br>
<br> fastMarching->SetTrialPoints( seeds );<br><br> fastMarching->SetSpeedConstant( 1.0 );<br><br> <br> <br> <br> fastMarching->SetOutputSize( <br> reader->GetOutput()->GetBufferedRegion().GetSize() );<br>
<br> try<br> {<br> writer_z->Update();<br><br> }<br> catch( itk::ExceptionObject & excep )<br> {<br> std::cerr << "Exception caught !" << std::endl;<br> std::cerr << excep << std::endl;<br>
}<br> <div style="visibility: hidden; left: -5000px; position: absolute; z-index: 9999; padding: 0px; margin-left: 0px; margin-top: 0px; overflow: hidden; word-wrap: break-word; color: black; font-size: 10px; text-align: left; line-height: 130%;" id="avg_ls_inline_popup">
</div>