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); //得到全局坐标
};
}
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); //得到全局坐标
};
}
...全文
相关推荐
整合QT5.9.7、VTK8.1.2、ITK4.13.1联合开发简单的VS2015工程Demo
具体搭建,请参考博客地址是:https://blog.csdn.net/mdxiaohu/article/details/88947225
【信息科学与工程学】计算机科学与自动化——第八十六篇 各类应用上云计算 01
数字孪生:核心是实时性不等式(Δ<Δt)与带宽-精度权衡。数学上归结为带约束的非线性优化。预测性维护:从物理退化方程(Paris 定律)出发,结合贝叶斯推断,云端训练用深度时序模型,边缘推理用轻量模型。机器人协同:本质是多商品流 + 动态障碍物,需用图论(冲突检测)+ 最优控制(轨迹平滑)。工业视觉:延迟由四个环节组成,需用排队论分析流水线瓶颈,量化感知是降低延迟的关键。液压/气动系统上云(涉及流体力学、热力学、控制)机械臂力控/阻抗控制上云(涉及动力学、力/位混合控制)
itk与vtk混合编程
itk与vtk混合编程
D:\ITK_VTK_TALL\vtk+ITK_link_lib.txt
ITK_VTK_TALL\vtk+ITK_link_lib.txt。和VC一起使用时需要连接的库
itk源码3.6.................
下载ITK压缩包,解压压缩包,用CMake配置,默认即可,为节省编译时间,可将Build_testing,Buile_example 设置为OFF。 打开配置好的文件,打开ITK.dsw,在VC6下编译,编译完成后即完成ITK的安装。


图形处理/算法
