ITK分割,VTK+VC怎么显示
请问,有谁知道ITK分割后的图像通过VTK和VC显示出来?帮帮忙谢谢!我写了一个代码,编译能通过,但是老是在Viewer->Render()出错。
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();
}
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); //得到全局坐标
};
}