vtkimagereslice来crop 三维DICOM,啊啊啊啊啊啊啊啊啊,奔溃了
vtk吧
全部回复
仅看楼主
level 1
记忆之风j 楼主
我做的是模拟slicer中的crop功能,通过在每个平面产生一个flat来控制要crop的几个节点,然后利用vtkimagereslice来切割,主要代码如下
double* or1 = Axialflat->GetPoint1();
double* or2 = Axialflat->GetPoint2();
double* or3 = Sagitalflat->GetPoint1();
double* or4 = Sagitalflat->GetPoint2();
int Axial1 = ((int)((or3[1] + 0.5)* m_nSliceSum));
int Axial2 = ((int)((or4[1] + 0.5)* m_nSliceSum));
int Cornoal1 = (int)((or1[1] + 0.5 )* m_nHeight);
int Cornoal2 = (int)((or2[1] + 0.5 )* m_nHeight);
int Sagital1 = (int)((or2[0] + 0.5 )* m_nWidth);
int Sagital2 = (int)((or1[0] + 0.5 )* m_nWidth);
int nAxial = Axial2 - Axial1;
int nCornoal = Cornoal2 - Cornoal1;
int nSagital = Sagital2 - Sagital1;
vtkSmartPointer<vtkImageReslice> reslice = vtkSmartPointer<vtkImageReslice>::New();
reslice->SetInterpolationModeToCubic();
reslice->SetInput(m_Imagedata);
reslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0, 0,0,1);
reslice->SetResliceAxesOrigin(spacing[0]*Sagital1, spacing[1]*Cornoal1, spacing[2]*Axial1);
reslice->SetOutputSpacing(spacing[0], spacing[1], spacing[2]);
reslice->SetOutputOrigin(origon[0],origon[1],origon[2]-13);
reslice->SetOutputExtent(0,nSagital,0,nCornoal,0,nAxial);
reslice->Update();
然后来显示
结果显示的时候crop界面的Axial界面是正常显示的,但是cornoal和sagital界面显示的结果略微向上平移了几个单位,我用数据测了一下,大概向上平移了10各单位。In other words, 我在原来程序上z方向减个10差不多可以正常显示,不过还是有问题
求助求助!
2017年12月07日 02点12分 1
1