DICOM坐标系
在处理医学图像数据时,通常会首先将数据从像素坐标系转换到患者坐标系,然后再转换到世界坐标系。
这样可以更方便地描述和分析患者的解剖结构,同时也可以方便地与其他设备或系统交互。
世界坐标系
存在一个场景,当我们需要描述其中绝对位置和方向时,约定一个以点O为世界原点,于O点彼此正交的
三个单位轴形成的笛卡尔坐标系为这个空间的世界坐标系。世界坐标系只是无数可能的坐标系之一,但是
我们需要一个坐标系来测量默认情况下的所有事物,所以我们创建了它并给它起了“世界坐标系”
这个特殊名称。
解剖学坐标系
医学影像以患者为主体,因此解剖学坐标系/患者坐标系极其重要。
首先我们需要了解医学上的六个指向和三个观察位:
六个指向:
Anteriort:前
Posterior:后
Left:左
Right:右
Superior/Head:上/头
Inferior/Feet:下/脚
三个观察位:
冠状位(Coronal):垂直于地面,体前/体后观察人体(A-P),紫色面称为冠状面
矢状位(Sagittal):垂直于地面,体侧观察人体( L-R),粉色面称为矢状面
横断位(Transverse):平行于地面,头顶俯视/足底仰视人体(S-I),绿色面称为横断面或水平面
所谓的解剖坐标系,这是一个相对于特定患者的坐标系,通常用于描述患者身体内部结构的位置和方向。
在患者坐标系中,原点通常被定义为患者身体的某个特定点,
方向通常取上述六个方向其三。如常见的LPS坐标系,RAS坐标系。
参考坐标体系
参考坐标体系即Reference Coordinate System(RCS)。也是后续在坐标转换时候的目标坐标系,
其符合各个对象实例之间的相对空间关系,功能近似于解剖学坐标体系。
坐标转换
在医学图像处理中,我们通常会设定一个世界坐标系来描述物体的绝对位置和方向。
这个世界坐标系通常会选择一个与患者身体结构相关的坐标系,如LPS(左后上)
或RAS(右前上)坐标系,因为这样可以更直观地理解和解释图像数据因此,我们
可以说,在医学图像处理的上下文中,解剖学坐标系(也就是LPS或RAS坐标系)
实际上就是一种世界坐标系。而在DICOM中,被称为参考坐标系(Reference Coordinate System)
的世界坐标系以LPS为标准。
当我们进行坐标系的变换时,所涉及的旋转、缩放、翻转、平移等操作,都称之为仿射变换,
变换使用的矩阵称为仿射矩阵。在DICOM中,我们可以通过以下步骤构建从像素坐标系转到
物理坐标系所要用的仿射矩阵:
1.获取DICOM标签值:我们需要以下三个标签的值:
1)Image Position (Patient) (0020,0032):
这个标签包含三个值,分别表示图像平面左上角像素(也就是原点)在物理空间中的x、y、z坐标。
这些值是相对于患者身体的,通常使用LPS(左后上)坐标系。
2)Image Orientation (Patient) (0020,0037):
这个标签包含六个值,前三个值表示图像行(row)的方向,后三个值表示图像列(column)的方向。
这些值是相对于患者身体的,通常使用LPS(左后上)坐标系。每个方向都是一个单位向量,
表示该方向与x、y、z轴的夹角的余弦值。
3)Pixel Spacing (0028,0030):
这个标签包含两个值,第一个值表示行间距(即垂直方向上相邻两像素的物理距离),
第二个值表示列间距(即水平方向上相邻两像素的物理距离)。这些值通常以毫米为单位。
2.计算行和列向量:我们将Image Orientation (Patient)标签的前三个值和
后三个值分别乘以Pixel Spacing标签的值,得到行和列向量。
3.计算切片向量:我们计算行和列向量的叉积,得到切片向量。
4.构建仿射矩阵:我们将行向量、列向量和切片向量作为仿射矩阵的前三列,
将Image Position (Patient)标签的值作为仿射矩阵的最后一列。最后一行是[0, 0, 0, 1]。
以下是最终的矩阵:
row_vector[0] | column_vector[0] | slice_vector[0] | image_position[0] |
row_vector[1] | column_vector[1] | slice_vector[1] | image_position[1] |
row_vector[2] | column_vector[2] | slice_vector[2] | image_position[2] |
0 | 0 | 0 | 1 |
这个仿射矩阵可以将像素坐标系中的坐标转换到物理坐标系中。例如,如果我们有一个像素坐标P(x, y, z),
我们可以通过将P乘以这个仿射矩阵,得到物理坐标系中的坐标。
补充
DICOM相关节点:
Tag 节点 | 说明 |
Slice Thickness(0018,0050) | 层厚. |
Spacing Between Slices(0018,0088) | 层与层之间的间距,单位为mm |
Image Position (Patient) (0020,0032) | 图像位置: 这个标签包含三个值,分别表示图像平面左上角像素(也就是原点)在物理空间中的x、y、z坐标。 这些值是相对于患者身体的,通常使用LPS(左后上)坐标系。 |
Image Orientation (Patient) (0020,0037) | 图像方位 这个标签包含六个值,前三个值表示图像行(row)的方向,后三个值表示图像列(column)的方向。 这些值是相对于患者身体的,通常使用LPS(左后上)坐标系。每个方向都是一个单位向量, |
Slice Location(0020,1041) | 实际的相对位置,单位为mm. (部分DICOM可能没有这个节点) |
Rows(0028,0010) | 图像的总行数,行分辨率. |
Columns(0028,0011) | 图像的总列数,列分辨率. |
Pixel Spacing(0028,0030) | 像素间距.像素中心之间的物理间距. 这个标签包含两个值,第一个值表示行间距(即垂直方向上相邻两像素的物理距离), 第二个值表示列间距(即水平方向上相邻两像素的物理距离)。这些值通常以毫米为单位 |
Patient Position(0018,0050) | 层厚. |
参考文档: