医学影像 Image Orientation
1. Image Orientation:
如之前在博文《DICOM中几个判断图像方向的tag》中提到的ImageOrientation(0020,0037)表示的是图像第一行和第一列相对于病人的方向。而在DICOM坐标系是根据病人的方向来确定的,其中X轴正向指向病人的左侧,Y轴正向指向病人的背部,Z轴正向指向病人的头部。
在医学影像处理软件中,最常见的是将导入系统的MRI/CT序列以三视图的形式进行呈现,分别为轴状位(Transverse/Axisplane)、冠状位(Coronal/Frontal plane)和矢状位(Sagittal plane)。以下图显示的是这三个方位对应的切面方位,以及在成像过程中对应的坐标系。
图1 成像坐标系
图2 三视图
2. Software and Coding
图3 医学软件中标准三视图与MPR变换后的图像方位
如图3所示为某一款医疗影像软件在载入一个患者头部MRI序列后,三个不同视图中所标注的图像方位图。可以判断出这三个视图依次为轴状位(AP-LR)、矢状位(HF-AP)、冠状位(HF-LR)。
在网上找到的计算视图中方位的程序如下:
char *
ImageOrientationLayer::ComputeOrientation(Vector3D vector)
{
char *orientation=new char[4];
char *optr = orientation;
*optr='\0';
char orientationX = vector.getX() < 0 ? 'R' : 'L';
char orientationY = vector.getY() < 0 ? 'A' : 'P';
char orientationZ = vector.getZ() < 0 ? 'F' : 'H';
double absX = fabs(vector.getX());
double absY = fabs(vector.getY());
double absZ = fabs(vector.getZ());
int i;
for (i=0; i<3; ++i) {
if (absX>.0001 && absX>absY && absX>absZ) {
*optr++=orientationX;
absX=0;
}
else if (absY>.0001 && absY>absX && absY>absZ) {
*optr++=orientationY;
absY=0;
}
else if (absZ>.0001 && absZ>absX && absZ>absY) {
*optr++=orientationZ;
absZ=0;
}
else break;
*optr='\0';
}
return orientation;
}
结合到软件开发中,则首先需要在窗口的top,bottom,left,right中间找到四个单位向量,(0,1,0),(0,-1,0),(-1,0,0),(1,0,0),将其对应的窗口坐标点转化为世界坐标系的点,求出与(0,0,0)所对应的世界坐标原点的四个向量并且归一化,作为上述ComputeOrientaton函数的参数传进去,即可得到当前图像在世界坐标系下的方位。