如何将DICOM坐标转换为VTK世界坐标

时间:2019-04-26 05:51:23

标签: vtk dicom

我是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  但是我并不清楚。

0 个答案:

没有答案