医学影像中的一般的预处理包括重采样,调整坐标系,强度映射(归一化),裁剪等操作
因为图像是三维的,所以区别于二维有几个比较坑的点:
像素(又叫体素)是有他自己的物理大小的,这就是spacing三维的片子的物理尺寸是不变的,也就是说他和真实世界是1:1还原的因为拍的是人体的结构,所以图像位置坐标必然是存在实际意义的,也就是说图上的点和人身上的要能够对应
“体素大小”(Voxel Spacing) 是指两个体素之间的距离,spacing定义了图像像素的物理大小并且保证了实际距离测量的准确性。比如,如果知道x和y轴的像素间距为 0.4mm,那么在图像中的一条 10 像素的线就会有 4mm的长度。同样,由于知道图像像素中的宽和高(比如对于普通CT来说是 512×512),就能够找到图像的实际尺寸了:512 × 0.4 mm = 204.8 mm。对应的,当图像从2D扩展到3D时,“像素”会扩展成“体素”,“像素间距”(Pexel Spacing)也会扩展成“体素间距”(Voxel Spacing)。
物理大小 = spacing*shape
由于不同的扫描仪或不同的采集协议通常会产生具有不同体素间距的数据集,而CNN无法理解体素间距,因此我们需要将所有医学影像的spacing重采样到一致,这样shape就可以反映成像大小了。
由上式可以看出,当spacing变小的时候,shape必然增大,因为物理大小是个定值。因此此时就需要对增加的点进行插值填充。这样会使得重采样以后的尺寸和原图有出入。
一般来说,由于数据来源复杂,很多时候拿到的image和label之间的spacing并不相同,但是shape是一致的, 这个时候千万不要进行重采样到相同spacing! 因为这样会导致后续crop的时候img和label对应不上,导致结果出错! 又因为CNN无法理解体素间距,所以spacing不一致并不会导致出错。
举个例子: 重采样以前的img和label,此时image和label之间的spacing并不相同,但是shape是一致的
image shape: (248, 177, 179)
label shape: (248, 177, 179)
image pixdim:
[[ -0.40000001 0. 0. 200. ]
[ 0. -0.40000001 0. 200. ]
[ 0. 0. 0.40000001 -11.60000038]
[ 0. 0. 0. 1. ]]
image pixdim:
[1. 0.4 0.4 0.4 0. 0. 0. 0. ]
image pixdim:
[[-1. 0. 0. -0.]
[ 0. -1. 0. -0.]
[ 0. 0. 1. 0.]
[ 0. 0. 0. 1.]]
image pixdim:
[1. 1. 1. 1. 0. 0. 0. 0.]
重采样以后: spacing相同,但是shape不一致,这样就会导致后续crop的时候对应不上
image shape: (1, 248, 177, 179)
label shape: (1, 618, 441, 446)
image affine after Spacing:
[[ -0.4 0. 0. 200. ]
[ 0. -0.4 0. 200. ]
[ 0. 0. 0.4 -11.6]
[ 0. 0. 0. 1. ]]
label affine after Spacing:
[[-0.4 0. 0. 0. ]
[ 0. -0.4 0. 0. ]
[ 0. 0. 0.4 0. ]
[ 0. 0. 0. 1. ]]
至于Origin的话,目前没有发现会对分割结果造成影响,而且在做crop的时候进行可视化分析也没有发现会导致不align。可以不去管它。
参考: https://zhuanlan.zhihu.com/p/355570425?ivk_sa=1024320u https://blog.csdn.net/weixin_43380735/article/details/109718863
推荐链接
发表评论