我是vtk编程的新手,并且遇到了一些问题。我拥有DICOM图像和每个图像的坐标点。我要做的是将这些坐标点转换为VTK坐标。
例如;
这些在DICOM坐标中。 (0020,0032)图像位置(患者):
-236.894000 \ -203.378900 \ -1219.400000
(0020,0037)图像方向(患者): 1.000000 \ 0.000000 \ 0.000000 \ 0.000000 \ 1.000000 \ 0.000000(0028,0030)
(0028,0030)像素间距:0.468749 \ 0.468756
(0020,1041)切片位置:228.20
我的问题是:
是否可以合并任何这些标签并将(0020,0032)的值转换为VTK世界坐标,以便可以将转换后的值设置为vtkImageActor的 SetPosition() 或 SetDisplayExtent()函数。
有可能吗?
我尝试过的事情
void vtkInteractorObserver::ComputeDisplayToWorld(vtkRenderer *ren,
double x,
double y,
double z,
double worldPt[4])
{
ren->SetDisplayPoint(x, y, z);//I gave the Image position patient values as x,y and z
ren->DisplayToWorld();
ren->GetWorldPoint(worldPt);
if (worldPt[3])
{
worldPt[0] /= worldPt[3];
worldPt[1] /= worldPt[3];
worldPt[2] /= worldPt[3];
worldPt[3] = 1.0;
}
}
//----------------------------------------------------------------------------
// Description:
// Transform from world to display coordinates.
// displayPt has to be allocated as 3 vector
void vtkInteractorObserver::ComputeWorldToDisplay(vtkRenderer *ren,
double x,
double y,
double z,
double displayPt[3])
{
ren->SetWorldPoint(x, y, z, 1.0);
ren->WorldToDisplay();
ren->GetDisplayPoint(displayPt);
}
编辑
如果对此有任何数学计算,这对我来说也绰绰有余。我还引用了这两个链接:https://www.slicer.org/wiki/Coordinate_systems和
http://vtk.1045678.n5.nabble.com/Correct-coordinate-transformations-for-DICOM-data-set-td5728309.html
但是我并不清楚。