在DICOM标准里,有三个TAG与成像的方向相关。

参考来源:Kitware关于DICOM方向的说明

http://public.kitware.com/IGSTKWIKI/index.php/DICOM_data_orientation

包括

1、Image Position (0020,0032): specifies the x, y, and z coordinates of the upper left hand corner of the image. In other words, this tag specifies the coordinates of the the first voxel transmitted.

图像位置:指示了图像左上角的第一个像素的空间坐标(x,y,z)。 也就是DICOM文件传输的第一个像素的坐标

2、Image Orientation (0020,0037): specifies the direction cosines of the first row and the first column with respect to the patient. The direction of the axes are defined by the patients orientation to ensure LPS system ( x-axis increasing to the left hand side of the patient, y-axis increasing to the posterior side of the patient and z-axis increasing toward the head of the patient )

图像方向:指示了图像第一行和第一列相对于病人的方向cosine。 坐标轴的方向是根据病人的方向来确定的(X轴指向病人的左手边,y轴指向病人的后面,Z轴指向病人的头部。

3、Patient position( 0018,5100) : Patient position descriptor relative to the equipment. Required for CT and MR images. Possible values: HFP= head first-prone, HFS=head first-supine, HFDR= head first-decibitus right, HFDL = head first-decubiturs left, FFP = feet first-prone, FFS, FFDR, FFDL.

病人的位置:  是描述病人相对于CT或者MR等成像设备的位置。 HFP:头部在前,俯卧; HFS:头在前,仰卧

一个例子:

某个切片 m:

0020,0032  Image Position (Patient): -99.8046875/-282.8046875/94.25

0020,0037  Image Orientation (Patient): 1/0/0/0/1/0

0018,5100  Patient Position: HFS 
另外一个切片n:

0020,0032  Image Position (Patient): -99.8046875/-282.8046875/157.5

0020,0037  Image Orientation (Patient): 1/0/0/0/1/0

0018,5100  Patient Position: HFS 
我们发现
图像的位置坐标中,只有Z轴坐标有变化,而且从Z坐标的大小可以看出,m切片是在n切片的下方
知道了图像的方向,就很容易进行后面的图像分析了

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)。

在网上找到的计算视图中方位的程序如下:

  1. char *
  2. ImageOrientationLayer::ComputeOrientation(Vector3D vector)
  3. {
  4. char *orientation=new char[4];
  5. char *optr = orientation;
  6. *optr='\0';
  7. char orientationX = vector.getX() < 0 ? 'R' : 'L';
  8. char orientationY = vector.getY() < 0 ? 'A' : 'P';
  9. char orientationZ = vector.getZ() < 0 ? 'F' : 'H';
  10. double absX = fabs(vector.getX());
  11. double absY = fabs(vector.getY());
  12. double absZ = fabs(vector.getZ());
  13. int i;
  14. for (i=0; i<3; ++i) {
  15. if (absX>.0001 && absX>absY && absX>absZ) {
  16. *optr++=orientationX;
  17. absX=0;
  18. }
  19. else if (absY>.0001 && absY>absX && absY>absZ) {
  20. *optr++=orientationY;
  21. absY=0;
  22. }
  23. else if (absZ>.0001 && absZ>absX && absZ>absY) {
  24. *optr++=orientationZ;
  25. absZ=0;
  26. }
  27. else break;
  28. *optr='\0';
  29. }
  30. return orientation;
  31. }

结合到软件开发中,则首先需要在窗口的top,bottom,left,right中间找到四个单位向量,(0,1,0),(0,-1,0),(-1,0,0),(1,0,0),将其对应的窗口坐标点转化为世界坐标系的点,求出与(0,0,0)所对应的世界坐标原点的四个向量并且归一化,作为上述ComputeOrientaton函数的参数传进去,即可得到当前图像在世界坐标系下的方位。

DICOM中几个判断图像方向的tag的更多相关文章

  1. Android图片处理:识别图像方向并显示

    在Android中使用ImageView显示图片的时候发现图片显示不正.方向偏了或者倒过来了. 解决问题非常自然想到的分两步走: 1.自己主动识别图像方向,计算旋转角度. 2.对图像进行旋转并显示. ...

  2. 从单一图像中提取文档图像:ICCV2019论文解读

    从单一图像中提取文档图像:ICCV2019论文解读 DewarpNet: Single-Image Document Unwarping With Stacked 3D and 2D Regressi ...

  3. android应用中增加权限判断

    android6.0系统允许用户管理应用权限,可以关闭/打开权限. 所以需要在APP中增加权限判断,以免用户关闭相应权限后,APP运行异常. 以MMS为例,在系统设置——应用——MMS——权限——&g ...

  4. sql 语句中使用条件判断case then else end

    sql 语句中使用条件判断case then else end范例: SELECT les.[nLessonNo] FROM BS_Lesson AS les WHERE les.[sClassCod ...

  5. JAVA 中两种判断输入的是否是数字的方法__正则化_

    JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...

  6. Swift - 判断设备方向(或监听设备方向的改变)

    通过UIDevice.currentDevice()来获取设备,可以取得设备当前的方向. 同时,我们可以添加一个通知来监听设备方向的变化,这样在开发中可以对不同的方向定制不同的排版布局界面. 下面通过 ...

  7. JavaScript 中 if 条件判断

    在JS中,If 除了能够判断bool的真假外,还能够判断一个变量是否有值. 下面的例子说明了JS中If的判断逻辑: 变量值 true '1' 1 '0' 'null' 2 '2'  false 0 n ...

  8. 移动端JS判断手势方向

    原生JS判断手势方向的解决思路: 1.滑动屏幕事件使用html5 的touchstart滑动开始事件和touchend滑动结束事件. 2.方向的判断,以起点做平面坐标系,与终点连线做直线,直线与x正半 ...

  9. Java中的空值判断

    Java中的空值判断 /** * 答案选项: * A YouHaidong * B 空 * C 编译错误 * D 以上都不对 */ package com.you.model; /** * @auth ...

随机推荐

  1. bzoj 1297 矩阵乘法变形

    首先对于矩阵乘法的功能有很多,记得有篇论文叫矩阵乘法在信息学竞赛中的应用,里面详细介绍了矩阵的 作用 其中一个就是求图的固定时间方案数,也就是给定一张图,每两个点之间由一条边长为1的边相连, 求任意两 ...

  2. python—用for循环、while循环和一句话打印九九乘法表

    用for循环打印九九乘法表: for i in range (1,10): for j in range(1,10): print(j,"x",i,"=",i* ...

  3. Linux内核:关于中断你需要知道的【转】

    转自:http://blog.csdn.net/duqi_2009/article/details/38009717 1.中断处理程序与其他内核函数真正的区别在于,中断处理程序是被内核调用来相应中断的 ...

  4. Servlet中使用 Last-Modified、Expires和Cache-Control

    long now = System.currentTimeMillis(); long expires = System.currentTimeMillis() + (1000 * 60 * minu ...

  5. 只有5行代码的算法——Floyd算法

    Floyd算法用于求一个带权有向图(Wighted Directed Graph)的任意两点距离的算法,运用了动态规划的思想,算法的时间复杂度为O(n^3).具体方法是:设点i到点j的距离为d[i][ ...

  6. 【hdoj_1009】FatMouse's Trade

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1009< 本题用到贪心策略和结构体排序. 问题简化:现有资本M,N个房间,第i个房间对应着价格为F[i ...

  7. ibatis(sqlmap)中使用in语句的方法

    对于快速学习ibatis而没有过多时间去查阅资料的朋友,比如我,可能有些东西不一定能在快速上手的文档中涉猎到.今天就碰到一个问题,要在分页 查询的同时进行where语句删选操作.由于表记录比较少,因此 ...

  8. 转载 Ofbiz 入门教程

    1.Ofbiz 介绍: Ofbiz(http://www.ofbiz.org) 是 Open Source 的商务软件系统,充分利用了各优秀的的Open Source 项目,像 Tomcat, Ant ...

  9. 运行微信支付demo

    首先要说说写这篇文章的初衷:集成支付宝支付运行demo都是可以正常运行的,但是我下载下来微信支付的demo,却发现一大堆报错,而且相关文章几乎没有,可能大家觉得没必要,也许你觉得很简单:但是技术大牛都 ...

  10. win上使用nvm管理node版本

    win上使用nvm管理node版本 若想让nvm管理机器上所有的node版本,首先需要卸载电脑上已有的node(很重要), 然后下载nvm在win上的安装包 windows-nvm的下载地址 下载 下 ...