<div dir="ltr">From ITK Software Guide Book, I am trying to do Region Growing - Connected Threshold segmentation and show it using VTK. In the guide book, the segmented image is written into another file. But I don't want to write it but rather display it using VTK renderer. But it seems to be not working. Can anyone see my code and help me out, please? Here's my code:<div><br></div><div><div>#include <iostream></div><div>#include <string.h></div><div>#include <windows.h></div><div>#include <time.h></div><div>#include <dos.h></div><div><br></div><div>#include "itkConnectedThresholdImageFilter.h"</div><div><br></div><div>#include "itkImage.h"</div><div>#include "itkCastImageFilter.h"</div><div><br></div><div>#include "itkCurvatureFlowImageFilter.h"</div><div><br></div><div>#include "itkImageFileReader.h"</div><div>#include "itkImageFileWriter.h"</div><div><br></div><div>#include "itkVTKImageExport.h"</div><div>#include "itkVTKImageImport.h"</div><div>#include "itkRGBPixel.h"</div><div><br></div><div>#include "vtkImageData.h"</div><div>#include "vtkImageImport.h"</div><div>#include "vtkImageExport.h"</div><div>#include "vtkImageActor.h"</div><div>#include "vtkRenderer.h"</div><div>#include "vtkRenderWindow.h"</div><div>#include "vtkRenderWindowInteractor.h"</div><div>#include "vtkInteractorStyleImage.h"</div><div><br></div><div>using namespace std;</div><div><br></div><div>template <typename ITK_Exporter, typename VTK_Importer> void ConnectPipelines(ITK_Exporter exporter, VTK_Importer* importer)</div><div>{</div><div>    importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());</div><div>    importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());</div><div>    importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());</div><div>    importer->SetSpacingCallback(exporter->GetSpacingCallback());</div><div>    importer->SetOriginCallback(exporter->GetOriginCallback());</div><div>    importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());</div><div>    importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());</div><div>    importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());</div><div>    importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());</div><div>    importer->SetDataExtentCallback(exporter->GetDataExtentCallback());</div><div>    importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());</div><div>    importer->SetCallbackUserData(exporter->GetCallbackUserData());</div><div>}</div><div><br></div><div>template <typename VTK_Exporter, typename ITK_Importer> void ConnectPipelines(VTK_Exporter* exporter, ITK_Importer importer)</div><div>{</div><div>    importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());</div><div>    importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());</div><div>    importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());</div><div>    importer->SetSpacingCallback(exporter->GetSpacingCallback());</div><div>    importer->SetOriginCallback(exporter->GetOriginCallback());</div><div>    importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());</div><div>    importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());</div><div>    importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());</div><div>    importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());</div><div>    importer->SetDataExtentCallback(exporter->GetDataExtentCallback());</div><div>    importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());</div><div>    importer->SetCallbackUserData(exporter->GetCallbackUserData());</div><div>}</div><div><br></div><div><br></div><div>void main()</div><div>{</div><div>    char inputImage[1000], seedx[10], seedy[10], lThreshold[100], uThreshold[100];</div><div><br></div><div>    cout<< "Input values: "<<endl;</div><div>    cin >> inputImage;</div><div>    cin>>seedx;</div><div>    cin>>seedy;</div><div>    cin>>lThreshold;</div><div>    cin>>uThreshold;</div><div><br></div><div>    const     unsigned int    Dimension = 2;</div><div><br></div><div>    typedef   float           InternalPixelType;</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><br></div><div>    typedef itk::CurvatureFlowImageFilter< InternalImageType, InternalImageType > CurvatureFlowImageFilterType;</div><div><br></div><div>    CurvatureFlowImageFilterType::Pointer smoothing = CurvatureFlowImageFilterType::New();</div><div><br></div><div>    typedef itk::ConnectedThresholdImageFilter< InternalImageType, InternalImageType > ConnectedFilterType;</div><div><br></div><div>    ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New();</div><div><br></div><div>    typedef itk::CastImageFilter< InternalImageType, OutputImageType > CastingFilterType;</div><div><br></div><div>    CastingFilterType::Pointer caster = CastingFilterType::New();</div><div><br></div><div>    typedef  itk::ImageFileReader< InternalImageType > ReaderType;</div><div>    typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;</div><div><br></div><div>    ReaderType::Pointer reader = ReaderType::New();</div><div>    WriterType::Pointer writer = WriterType::New();</div><div><br></div><div>    reader->SetFileName( inputImage );</div><div>    reader->Update();</div><div>    //writer->SetFileName( outputImage );</div><div><br></div><div>    smoothing->SetInput( reader->GetOutput() );</div><div>    smoothing->SetNumberOfIterations( 5 );</div><div>    smoothing->SetTimeStep( 0.125 );</div><div><br></div><div>    //writer->SetInput( caster->GetOutput() );</div><div>    const InternalPixelType lowerThreshold = atof( lThreshold );</div><div>    const InternalPixelType upperThreshold = atof( uThreshold );</div><div><br></div><div>    connectedThreshold->SetInput( smoothing->GetOutput() );</div><div>    connectedThreshold->SetLower(  lowerThreshold  );</div><div>    connectedThreshold->SetUpper(  upperThreshold  );</div><div><br></div><div>    connectedThreshold->SetReplaceValue( 255 );</div><div><br></div><div>    InternalImageType::IndexType  index;</div><div><br></div><div>    index[0] = atoi( seedx );</div><div>    index[1] = atoi( seedy );</div><div><br></div><div>    connectedThreshold->SetSeed( index );</div><div>    connectedThreshold->Update();</div><div><br></div><div>    //caster->SetInput( connectedThreshold->GetOutput() );</div><div><span style="white-space:pre"> </span>caster->SetInput(connectedThreshold->GetOutput());</div><div><br></div><div>    typedef itk::VTKImageExport< InternalImageType > ExportFilterType; //</div><div>    ExportFilterType::Pointer itkExporter = ExportFilterType::New(); //</div><div><br></div><div>        //itkExporter->SetInput( caster->GetOutput() ); // this line gives me error warning, so i did the following line</div><div><span style="white-space:pre">   </span>itkExporter->SetInput(connectedThreshold->GetOutput());</div><div><br></div><div><br></div><div><br></div><div>    vtkImageImport* vtkImporter = vtkImageImport::New();  //</div><div>    ConnectPipelines(itkExporter, vtkImporter);</div><div><br></div><div>    typedef itk::VTKImageImport< InternalImageType > ImportFilterType; //</div><div>    ImportFilterType::Pointer itkImporter = ImportFilterType::New(); //</div><div><br></div><div><br></div><div>    vtkImageExport* vtkExporter = vtkImageExport::New();</div><div>    ConnectPipelines(vtkExporter, itkImporter);</div><div><br></div><div>#if VTK_MAJOR_VERSION <= 5</div><div>    vtkExporter->SetInput( vtkImporter->GetOutput() );</div><div>#else</div><div>    vtkImporter->Update();</div><div>    vtkExporter->SetInputData( vtkImporter->GetOutput() );</div><div>#endif</div><div><br></div><div>    vtkImageActor* actor = vtkImageActor::New();</div><div>#if VTK_MAJOR_VERSION <= 5</div><div>    actor->SetInput(vtkImporter->GetOutput());</div><div>#else</div><div>    actor->SetInputData(vtkImporter->GetOutput());</div><div>#endif</div><div><br></div><div>    vtkInteractorStyleImage * interactorStyle = vtkInteractorStyleImage::New();</div><div><br></div><div>    vtkRenderer* renderer = vtkRenderer::New();</div><div>    vtkRenderWindow* renWin = vtkRenderWindow::New();</div><div>    vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();</div><div><br></div><div>    renWin->SetSize(500, 500);</div><div>    renWin->AddRenderer(renderer);</div><div>    iren->SetRenderWindow(renWin);</div><div>    iren->SetInteractorStyle( interactorStyle );</div><div><br></div><div>    renderer->AddActor(actor);</div><div>    renderer->SetBackground(0.4392, 0.5020, 0.5647);</div><div><br></div><div>    renWin->Render();</div><div>    iren->Start();</div><div><br></div><div>    actor->Delete();</div><div>    interactorStyle->Delete();</div><div>    vtkImporter->Delete();</div><div>    vtkExporter->Delete();</div><div>    renWin->Delete();</div><div>    renderer->Delete();</div><div>    iren->Delete();</div><div>}</div></div><div><br></div><div>Thanks in advance.</div></div>