[Insight-users] Display image with ITK+VTK in VC dialog

Luis Ibanez luis.ibanez at kitware.com
Mon Mar 23 08:22:29 EDT 2009


Hi x0_y0_0,

As you can see from the error message:

ERROR: In D:\Program Files\VTK\VTK\Rendering\vtkImageActor.cxx, line 182
 > vtkOpenGLImageActor (02429DC0): This filter requires unsigned char
 > scalars as input

The image that is passed as input to the vtkImageActor
must be casted to pixel type char.

This is typically done with the vtkImageMapToColors filter.

For a full example on how to do this, please look at IGSTK,
(www.igstk.org) in particular to the class (file):

   IGSTK/Source/
     igstkImageSpatialObjectRepresentation.txx
http://public.kitware.com/IGSTK/NightlyDoc/classigstk_1_1ImageSpatialObjectRepresentation.html



   Regards,


       Luis


----------------
x0_y0_0 wrote:
> thank you help ,luis.
>     I can read image with ITK and show it in VTK,but I fail to show it 
> in a MFC's interface.I try a few methods including 
> ConnectPipelines,itkImageToVTKImageFilter.When I put the code in 
> itkReadITKImageShowVTK.cxx to VC,it failed.I don't kown why .Could you 
> help me ?thanks.
>  
>  
>    Regards,
>                                                                                                    
> mexiao 
>  
> ERROR: In D:\Program Files\VTK\VTK\Imaging\vtkImageImport.cxx, line 323
> vtkImageImport (02426EB0): Unknown exception. 
> ERROR: In D:\Program Files\VTK\VTK\Rendering\vtkImageActor.cxx, line 182
> vtkOpenGLImageActor (02429DC0): This filter requires unsigned char 
> scalars as input
> 
> 
> ÔÚ2009-03-22 00:55:31£¬" luis.ibanez" <luis.ibanez at kitware.com> дµÀ£º
>>
>>Hi x0_y0_0
>>
>>Please look at the following Insight Journal paper:
>>
>>"How to use ITK and MFC"
>>by: Su Y.
>>http://www.insight-journal.org/browse/publication/141
>>
>>
>>You may also find useful to look at:
>>
>>    InsightApplications/Auxiliary/vtk
>>             itkReadITKImageShowVTK.cxx
>>
>>
>>     Regards,
>>
>>
>>         Luis
>>
>>
>>-----------------
>>x0_y0_0 wrote:
>>> 
>>> hi,users,
>>>  I wanted to use ITK read PNG image and segement it,then through VTK and 
>>> show on the VC's dialog.my program can through complie but can't show 
>>> the result.Next It is my code ./Does anybody could give me some 
>>> help?// thanks ./
>>> /                              //                            sincerely 
>>> mexiao/
>>> class CVTK 
>>> {
>>> public:
>>>  vtkWin32RenderWindowInteractor *iren;
>>>  vtkImageViewer  *viewer;
>>>  typedef itk::Image< float, 2 >  InternalImageType1;
>>>  
>>>   typedef itk::Image< unsigned char, 2 > OutputImageType1;
>>>     typedef  itk::ImageFileReader< InternalImageType1 > ReaderType1;
>>>   typedef  itk::ImageFileWriter<  OutputImageType1  > WriterType1;
>>>  typedef itk::CastImageFilter< InternalImageType1, OutputImageType1 > 
>>> CastingFilterType;
>>>   typedef itk::CurvatureFlowImageFilter< InternalImageType1, 
>>> InternalImageType1 > CurvatureFlowImageFilterType;
>>>   typedef itk::ConnectedThresholdImageFilter< InternalImageType1, 
>>> InternalImageType1> ConnectedFilterType;
>>>    float lowerThreshold ;
>>>    float upperThreshold ;
>>>   InternalImageType1::IndexType  index;
>>>    typedef itk::Image< unsigned char, 2 > ImageType;
>>>   typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
>>> public:
>>>  vtkCellPicker * picker;
>>>  static void MyExecute(vtkObject *caller, unsigned long eid, void 
>>> *clientdata, void *calldata);
>>>  void BeginRenderOn(CStatic* aStatic);
>>>  CVTK();
>>>  virtual ~CVTK();
>>> };
>>> //////////////////////////////////////////////////////////////////////////////////////////
>>> CVTK::CVTK()
>>> {
>>>     lowerThreshold = 150.0;
>>>     upperThreshold = 180.0;
>>>    index[0] =60;
>>>   index[1] =116;
>>>   ReaderType1::Pointer reader = ReaderType1::New();
>>>   reader->SetFileName("G:\\ITKVTK\\test\\test\\myProject\\Debug\\BrainProtonDensitySlice.png");
>>>   WriterType1::Pointer writer = WriterType1::New();
>>>   writer->SetFileName("G:\\ITKVTK\\test\\test\\myProject\\Debug\\aa.png");
>>>   CurvatureFlowImageFilterType::Pointer smoothing = 
>>> CurvatureFlowImageFilterType::New();
>>>   ConnectedFilterType::Pointer connectedThreshold = 
>>> ConnectedFilterType::New();
>>>      CastingFilterType::Pointer caster = CastingFilterType::New();
>>>   smoothing->SetInput( reader->GetOutput() );
>>>   connectedThreshold->SetInput( smoothing->GetOutput() );
>>>   caster->SetInput( connectedThreshold->GetOutput() );
>>>   writer->SetInput( caster->GetOutput() );
>>> 
>>>   smoothing->SetNumberOfIterations( 5 );
>>>   smoothing->SetTimeStep( 0.125 );
>>>   connectedThreshold->SetLower(  lowerThreshold  );
>>>   connectedThreshold->SetUpper(  upperThreshold  );
>>>   connectedThreshold->SetReplaceValue( 255 );
>>>   connectedThreshold->SetSeed( index );
>>>    ConnectorType::Pointer connector = ConnectorType::New();
>>>   connector->SetInput( caster->GetOutput());
>>>   
>>> // writer->Update();
>>> 
>>>   viewer = vtkImageViewer::New();
>>>    viewer->SetInput(connector->GetOutput());
>>>    viewer->SetColorWindow(256);
>>>    viewer->SetColorLevel(128);
>>> 
>>> iren = vtkWin32RenderWindowInteractor::New();
>>>       viewer->SetupInteractor(iren);
>>>   //   connector->Update();
>>> picker=vtkCellPicker::New();
>>>     //picker->SetTolerance(0.00001);
>>> 
>>> vtkCallbackCommand * cmd = vtkCallbackCommand::New();
>>> cmd->SetCallback(CVTK::MyExecute);
>>> cmd->SetClientData( this );
>>> picker->AddObserver(vtkCommand::EndPickEvent, cmd);
>>> iren->SetPicker(picker);
>>> cmd->Delete();
>>> 
>>> }
>>> /////////////////////////////////////////////////////
>>> BOOL CDlgVTKITKDlg::OnInitDialog()
>>> {
>>>  CDialog::OnInitDialog();
>>>  SetIcon(m_hIcon, TRUE);   // Set big icon
>>>  SetIcon(m_hIcon, FALSE);  // Set small icon
>>>  // TODO: Add extra initialization here
>>>  this->m_vtk.BeginRenderOn(&(this->m_RenderArea));//have been defined 
>>> CVTK m_vtk;
>>>     UpdateData(FALSE);
>>>  
>>>  return TRUE;  // return TRUE  unless you set the focus to a control
>>> }
>>> ///////////////////////////////////////////////////////////////////////
>>> void CVTK::BeginRenderOn(CStatic * aStatic)
>>> {
>>> CRect rect;
>>> aStatic->GetClientRect(&rect);
>>> viewer->SetSize(rect.Width(),rect.Height());
>>> viewer->SetParentId(aStatic->m_hWnd);   
>>> viewer->Render();                            
>>> // iren->Initialize();
>>> }
>>> /////////////////////////////////////////////////////////////////
>>> void CVTK::MyExecute(vtkObject *caller, unsigned long eid, void 
>>> *clientdata, void *calldata)
>>> {
>>> CVTK *m_viewer = reinterpret_cast<CVTK*>(clientdata );
>>>     if (m_viewer->picker->GetCellId()<0)
>>> {
>>>   AfxMessageBox("CellID < 0");
>>> }
>>>     else
>>> {
>>>   AfxMessageBox("CellID > 0");
>>>   double ScreenCoordinate[3],globalCoordinate[3]; 
>>>   m_viewer->picker->GetSelectionPoint(ScreenCoordinate); 
>>>   m_viewer->picker->GetPickPosition(globalCoordinate);
>>> };
>>> }
>>> 
>>> 
>>> ------------------------------------------------------------------------
>>> ÍøÒ×ÓÊÏ䣬ÖйúµÚÒ»´óµç×ÓÓʼþ·þÎñÉÌ <http://www.yeah.net>
>>> 
>>> 
>>> ------------------------------------------------------------------------
>>> 
>>> _____________________________________
>>> Powered by www.kitware.com
>>> 
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>> 
>>> 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-users
> 
> 
> 
> ------------------------------------------------------------------------
> ÍøÒ×ÓÊÏ䣬ÖйúµÚÒ»´óµç×ÓÓʼþ·þÎñÉÌ <http://www.yeah.net>


More information about the Insight-users mailing list