[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