Hi,<br>I'm trying to use ConnectedThresholdImageFilter.cxx on a 3D image (a .mhd file). I inserted one seed point with 3 coordinates an tried different values of threshold. When I run the program, I save the output results in a .mhd file but i obtain only a black image. So i don't obtain a true segmentation. <br>
The code is this:<br><br><br>#include "itkConnectedThresholdImageFilter.h"<br><br><br>#include "itkImage.h"<br>#include "itkCastImageFilter.h"<br>#include "itkCurvatureFlowImageFilter.h"<br>
#include "itkImageFileReader.h"<br>#include "itkImageFileWriter.h"<br><br><br>int main( int argc, char *argv[])<br>{<br>if( argc < 8 )<br> {<br> std::cerr << "Missing Parameters " << std::endl;<br>
std::cerr << "Usage: " << argv[0];<br> std::cerr << " inputImage outputImage seedX seedY seedZ lowerThreshold upperThreshold" << std::endl;<br> return 1;<br> }<br>
<br> typedef float InternalPixelType;<br> const unsigned int Dimension = 3;<br> typedef itk::Image< InternalPixelType, Dimension > InternalImageType;<br><br><br> typedef unsigned char OutputPixelType;<br>
typedef itk::Image< OutputPixelType, Dimension > OutputImageType;<br> typedef itk::CastImageFilter< InternalImageType, OutputImageType ><br> CastingFilterType;<br>
CastingFilterType::Pointer caster = CastingFilterType::New();<br> <br><br> typedef itk::ImageFileReader< InternalImageType > ReaderType;<br> typedef itk::ImageFileWriter< OutputImageType > WriterType;<br>
<br> ReaderType::Pointer reader = ReaderType::New();<br> WriterType::Pointer writer = WriterType::New();<br><br> reader->SetFileName( argv[1] );<br> writer->SetFileName( argv[2] );<br> typedef itk::CurvatureFlowImageFilter< InternalImageType, InternalImageType ><br>
CurvatureFlowImageFilterType;<br><br> CurvatureFlowImageFilterType::Pointer smoothing = <br> CurvatureFlowImageFilterType::New();<br> <br> typedef itk::ConnectedThresholdImageFilter< InternalImageType, <br>
InternalImageType > ConnectedFilterType;<br> <br> ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New();<br> <br><br> smoothing->SetInput( reader->GetOutput() );<br>
connectedThreshold->SetInput( smoothing->GetOutput() );<br> caster->SetInput( connectedThreshold->GetOutput() );<br> writer->SetInput( caster->GetOutput() );<br><br> smoothing->SetNumberOfIterations( 5 );<br>
smoothing->SetTimeStep( 0.125 );<br><br> const InternalPixelType lowerThreshold = atof( argv[6] );<br> const InternalPixelType upperThreshold = atof( argv[7] );<br><br> connectedThreshold->SetLower( lowerThreshold );<br>
connectedThreshold->SetUpper( upperThreshold );<br><br> connectedThreshold->SetReplaceValue( 255 );<br> <br> InternalImageType::IndexType index;<br> index[0] = atoi( argv[3] );<br> index[1] = atoi( argv[4] );<br>
index[2] = atoi( argv[5] );<br> connectedThreshold->SetSeed( index );<br><br> //InternalImageType::IndexType index1;<br> //index1[0] = atoi( argv[3] );<br> //index1[1] = atoi( argv[4] );<br> //connectedThreshold->AddSeed( index1 );<br>
<br> try<br> {<br> writer->Update();<br> }<br> catch( itk::ExceptionObject & excep )<br> {<br> std::cerr << "Exception caught !" << std::endl;<br> std::cerr << excep << std::endl;<br>
}<br>return 0;<br>}<br><br><br>Can someone explain me if this is a problem of thresholding or a problem of image format?! I don't really know what to do.<br>Thanks,<br>Marco<br>