在c#中转换图像坐标(i-j-k)和世界坐标(x-y-z) vtk



有没有人知道我如何从图像坐标这样获取转换:

private void renderWindowControl1_Click(object sender, System.EventArgs e)
    {
        int[] lastPos = this.renderWindowControl1.RenderWindow.GetInteractor().GetLastEventPosition();
        Z1TxtBox.Text = (_Slice1 + 1).ToString();
        X1TxtBox.Text = lastPos[0].ToString();
        Y1TxtBox.Text = (512 - lastPos[1]).ToString();
    }

转换成物理坐标。TX Tal

VTK可能有一个优雅的方法调用,但通常你需要使用图像的图像平面模块中的信息(特别是公式C.7.6.2.1-1)。

http://dicom.nema.org/medical/dicom/current/output/html/part03.html sect_C.7.6.2

以便在点击和物理位置之间进行转换:以下是我从这个项目中获得的一些见解:

int[] lastPos = this.renderWindowControl1.RenderWindow.GetInteractor().GetLastEventPosition();

返回控件中单击的像素位置。这是一个问题,因为如果用户放大,lastPos并不表示dicom中的位置。

我找到的解决方案,是使用vtkPropPicker类。代码示例可以在这里和这里找到。

image_coordinate是世界坐标,但没有原点偏移量。这意味着:1. 如果我们想要获得像素位置(在512x512网格中):x,y值应该通过像素间距和图像方向进行规范化。这些参数的值可由上式C.7.6.2.1-1求得。

vtkDICOMImageReader _reader;
reader.GetPixelSpacing();
reader.GetImageOrientationPatient();
  • 如果我们需要世界物理位置,我们应该添加x和y的原点偏移量:

    reader.GetDataOrigin ();

  • 关于Z轴:我不需要它,所以我不确定。

    这是我对这件事的看法,也许还有更优雅的方法,我还没有找到。

    最新更新