有没有人知道我如何从图像坐标这样获取转换:
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轴:我不需要它,所以我不确定。
这是我对这件事的看法,也许还有更优雅的方法,我还没有找到。