两个vtkImageSlabReslice生成的图像(一个图像和一个遮罩)位置一致。
我们直觉会第一时间写如下代码
imageslabReslice->Update();
maskslabReslice->SetResliceAxes(imageslabReslice->GetResliceAxes());
maskslabReslice->SetOutputSpacing(imageslabReslice->GetOutputSpacing()); maskslabReslice->SetOutputOrigin(imageslabReslice->GetOutputOrigin());
maskslabReslice->SetOutputExtent(imageslabReslice->GetOutputExtent());
但由于VTK的VTK 使用的是延迟执行(lazy execution)模型,这意味着直到需要数据时,过滤器才会执行,
执行Update()也没有结果,特别是imageslabReslice后面连接了其他的过滤器。
在我的电脑上
imageslabReslice->GetOutputExtent()取出来的【0,0,0,0,0,0】
所以为了确保取到真实的输出参数修改为
auto image =imageslabReslice->GetOutput();
maskslabReslice->SetOutputSpacing(image->GetSpacing());
maskslabReslice->SetOutputOrigin(image->GetOrigin());
maskslabReslice->SetOutputExtent(image->GetExtent());