一.背景
我们在拍ct的时候,经常会发现一个检查下面多个序列,序列里面除定位图之外,还有同个方位的序列.
这种在拍ct的时候,其实都是一次性拍完,通过后处理,调整不同的窗宽窗位生成的不同的序列.
这种序列有什么意义呢?我们知道身体里面每个部位吸收x射线的能力不同,在不同窗宽窗位下呈现不一样的图像,(感兴趣的话可以深入了解窗宽窗位的意义). 截图左下文字,肺和腹指的是该序列以肺和腹对应的窗宽窗位生成的序列. 肺(w:1600 C:-600) 腹(W:350,50)
临床医生一般在序列布局里面去观察同一个病灶的不同窗宽窗位的.这个是其他医学影像博主的解释,大家就尽力理解一下.
二.翻页同步功能是什么
前面背景说到临床会在不同序列布局里面看不同窗宽窗位的序列图像.这个时候怎么确定 左边序列对应的病灶图 和右边序列对应的病灶图是同一个. 不可能让医生自己翻吧
这个时候就会用到翻页同步的功能, 就是在其他序列图像中找到 目标图像中相同的(或者离病灶点最近的图像)
三. 怎么实现
上面一章说过图像有自己的三维位置,Image Position (0020,0032) 三维方向 Image Orientation (0020,0037). sliceThick 切片的层厚.
这块的实现逻辑比较简单,
(1) 当前的图像的位置(这个位置 我取的是图像方向量对应变的那个轴上的坐标 是不是很绕,换个话说 我当前的图像 是从左到右,从前到后 这个是轴位图,取的z坐标(从头到脚那个方向)),这个序列下面其他图像也是z坐标不一样
(2)z坐标为参考点, 问题就化解成 在目标序列里找到 离z坐标最近的点 (目标序列的视图一定 一样的,轴位图)
(3) ct一次采集有上千张,有采样的而且都是mm级,就会出现 不同序列的坐标不一样,有误差的.把目标区域放大 z坐标起始 from (z坐标-selThick / 2) to (z坐标+selThick / 2) ---自己决定允许误差大小
(4)目标序列 循环找 每张图像的z坐标 如果目标图像的z坐标范围 在可接受的范围,就命中该图像.
(5)注意一下 要看看两个图像的方向向量朝向一样不,这个是会需要用
目标图 ImagePositionPatient(0020,0032):三元double数组。用于表示当前图像坐标的原点(左上角)算的是这个面的方向 和源图像的imgOrientation 是否是一样的.
说一说为什么不用 影像的SliceLocation这个字段.这个字段就是切片位置.很多小伙伴发现 用这个字段也能实现翻页同步的功能. 上面那个方法很麻烦,还涉及到如果是mr,方向向量是斜的, 得把不同序列的z坐标换到统一的z轴坐标系上(要算的z坐标的在z轴的投影).
这个字段首先 不是必有的,有些设备拍出来没有这个字段, 但是上面那几个字段是必有的.
然后这个字段其实是个相对值,比如这个位置可能是相对脚的位置(正常的是相对头,方向是反的)