DICOM:每一层图像都作为一个独立的文件,使用Python中的pydicom和SimpleITK库来读取。
mhd+raw:每一个病人的数据包含一个mhd文件和一个同名的raw文件(一一一对应),使用Python的SimpleITK库即可读取。
mhd(数据头部信息):存放数据的非图像信息,如图像大小、切片大小、像素大小等。
raw(未加工的数据):存储病人的图像信息,往往是三维体数据。(可以理解为将该病人不同的dicom切片图像都叠到一起,形成了一个三维图像,也就是我们通常处理的数据)。
这些像素按照什么坐标系来存储的?
世界坐标体系
如上图左所示,
世界坐标体系是典型的笛卡尔坐标体系,整个模型只有一个世界坐标来定义位置与方向,在这个坐标系中,每个模型都(如核磁扫描器,病人)有它自身的坐标体系,但是只存在一个世界坐标体系来定义模型的位置与方向。也就是说,每个模型都可以被世界坐标系表示,可以理解为绝对坐标。
解剖学坐标体系
如上图中所示,
这个解剖学坐标体系是一个连续的三维空间,在这个空间中,图像被采样。如上图中所示,这个坐标系包括3个位面(解剖轴):
横断面:与地面平行,上下分离人体(绿色)
矢状面:垂直地面,左右分离人体(红色)
冠状面:垂直地面,前后分离人体(紫色)
本文以 LPS 为坐标轴。
不同的医学应用软件运用不同的3D基本定义,下面这些基本上是最常用的:
LPS (Left,Posterior,Superior):Dicom与ITK工具包上用这个
from right to left
from anterior to posterior
from inferior to superior
RAS (Right,Anterior,Superior):3D Slicer上用这个
from left to right
from posterior to anterior
from inferior to superior
从根本上来说,这两种坐标轴是等价使用的,有着相同的逻辑。
图像坐标体系
如上图右所示,
医学扫描仪器创建了规则的点和网格的矩形数组,它的原点在左上角,向右为 i 轴正方向,向下为 j 轴正方向,向后为 k 轴正方向。除每个立体像素voxel (i,j, k)的强度值外,这个解剖学坐标的原点以及间距也被保存下来。(体素:立体像素,本质上还是像素,换个名字而已)
这个原点代表着第一个voxel (0,0,0) 体素在解剖学坐标体系中的位置如(100mm,50mm,-25mm)。这个间距指定立体像素在各个坐标轴的实际距离间隔例如(1.5mm,0.5mm,0.5mm)。在下面的2D例子中显示了原点与间距的意义,3D的类推即可。
也就是说,通过解剖学坐标系我们获得了一个3D图像,这个3D图像中的坐标原点(原点是对应图像坐标系说的)在解剖学坐标系并不是原点,而是对应着一个坐标,在解剖学坐标系中,单位基本都是mm。
利用原点和间距,每个立体像素在解剖学坐标体系中的对应位置都能够被计算出来
为什么不直接在解剖学坐标系中获取呢?因为解剖学坐标系中的单位都是1 mm,你写程序的时候怎么去获取这个1mm呢,而用图像坐标系中的坐标,不用考虑单位,直接根据索引获取就可以。可以这样理解,图像坐标体系是虚拟的,为了方便处理才有的。
这三个坐标体系有什么关系?怎样转换呢?
图像坐标体系与解剖学坐标体系的关系
DICOM的Orientation和MHD的TransformMatrix 表示图像坐标与解剖学坐标体系对应坐标的夹角余弦值。
图像坐标体系与世界坐标体系的关系
原点(origin)和间距(spacing)这两个参数将世界坐标转换为相应的图像坐标,即求出结节中心在图像中的位置。
origin表示图像坐标系原点在世界坐标系中的位置单位mm,
spacing表示每个像素的实际距离间隔,单位也是mm
所以结节中心坐标减去origin再除以spacing,就是对应像素在图像坐标系中的位置。
// 世界坐标转换到图像中的坐标
def worldToVoxelCoord(worldCoord, origin, spacing):
stretchedVoxelCoord = np.absolute(worldCoord - origin)
voxelCoord = stretchedVoxelCoord / spacing
return voxelCoord
重采样的含义和代码
————————————————
文章链接:https://blog.csdn.net/weixin_43581819/article/details/124822521