医学图像数据读取及预处理方法总结

2022 年 1 月 4 日 极市平台
↑ 点击 蓝字  关注极市平台

作者丨李慕清@知乎
来源丨https://zhuanlan.zhihu.com/p/112176670
编辑丨极市平台
本文仅供学术参考,如有侵权请联系小编删文。

极市导读

 

个人认为,比如说医学图像分割这个方向,再具体一点比如腹部器官分割或者肝脏肿瘤分割,需要掌握两方面的知识:(1)医学图像预处理方法;(2)深度学习知识。 而第一点是进行第二点的必要条件,因为你需要了解输入到DL网络中的到底是长啥样的数据。这篇文章主要介绍常见的医学图像读取方式和预处理方法。>>加入极市CV技术交流群,走在计算机视觉的最前沿

这两天又重新回顾了一下医学图像数据的读取和预处理方法,在这里总结一下。

基于深度学习做医学图像数据分析,例如病灶检测、肿瘤或者器官分割等任务,第一步就是要对数据有一个大概的认识。但是我刚刚入门医学图像分割的时候,很迷茫不知道自己该干啥,不知道需要准备哪些知识,慢慢到现在才建立了一个简陋的知识体系。个人认为,比如说医学图像分割这个方向,再具体一点比如腹部器官分割或者肝脏肿瘤分割,需要掌握两方面的知识:(1)医学图像预处理方法;(2)深度学习知识。 而第一点是进行第二点的必要条件,因为你需要了解输入到DL网络中的到底是长啥样的数据。

这篇文章主要介绍常见的医学图像读取方式和预处理方法。

1. 医学图像数据读取

1.1 ITK-SNAP软件

首先介绍一下医学图像可视化软件ITK-SNAP, 可以作为直观感受医学图像3D结构的工具,也可以用来做为分割和检测框标注工具,免费,很好用,安利一下:ITK-SNAP官方下载地址:http://www.itksnap.org/pmwiki/pmwiki.php。此外,mangohttp://ric.uthscsa.edu/mango/是另一个非常轻量的可视化软件,也可以试试。我一般用ITK-SNAP。

ITK-SNAP的使用方法可以参考大佬的这篇博文,讲的很简洁:

JunMa:ITK-SANP使用入门:

https://zhuanlan.zhihu.com/p/104381149

ITK-snap界面

首先要明确一下和人体对应的方向,其中三个窗口对应三个切面,对应关系如下图所示,按照字母索引即可。例如,左上图对应R-A-L-P这个面,是从脚底往头部方向看的切面(即z方向),另外两张类似。

红色切面为矢状面,紫色切面为冠状面,绿色切面为横断面

也可以同时将分割结果导入,对比观察。

对于标注不太严谨的地方也可以精细化修改。当然公开集的话,绝大多数都挺好的。自己标注也是类似。(如果显示不太清晰,对比度太低,需要在软件中调节窗宽和窗位)

1.2 SimpleITK

我们知道,最常见的医学图像有CT和MRI,这都是三维数据,相比于二维数据要难一些。而且保存下来的数据也有很多格式,常见的有.dcm .nii(.gz) .mha .mhd(+raw)。这些类型的数据都可以用Python的SimpleITK来处理,此外pydicom可以对.dcm文件进行读取和修改。

读取操作的目的是从每一个病人数据中抽取tensor数据,用Simpleitk读取上面的.nii数据为例:

import numpy as np
import os
import glob
import SimpleITK as sitk
from scipy import ndimage
import matplotlib.pyplot as plt # 载入需要的库

# 指定数据root路径,其中data目录下是volume数据,label下是segmentation数据,都是.nii格式
data_path = r'F:\LiTS_dataset\data'
label_path = r'F:\LiTS_dataset\label'

dataname_list = os.listdir(data_path)
dataname_list.sort()
ori_data = sitk.ReadImage(os.path.join(data_path,dataname_list[3])) # 读取其中一个volume数据
data1 = sitk.GetArrayFromImage(ori_data) # 提取数据中心的array
print(dataname_list[3],data1.shape,data1[100,255,255]) #打印数据name、shape和某一个元素的值

plt.imshow(data1[100,:,:]) # 对第100张slice可视化
plt.show()

输出结果:

['volume-0.nii', 'volume-1.nii', 'volume-10.nii', 'volume-11.nii',... 
volume-11.nii (466, 512, 512) 232.0

表明该数据shape为(466,512,512),注意对应的顺序是z,x,y。z其实是slice的索引。x和y是某一个slice的宽和高。

z索引为100的plot结果:

同一个slice在ITK-SNAP可视化结果(注意这里(x,y,z=(256,256,101)),因为itk-snap默认从1开始索引):

可以发现,上下两张x轴一样但y轴方向上下翻转了,这是由于matplotlib显示方式不同,但是不会出现读取数据对不齐的问题。

对于dicom和mhd的处理方式,可以参考这篇博文:

谭庆波:常见医疗扫描图像处理步骤:

https://zhuanlan.zhihu.com/p/52054982

2.医学图像预处理

这部分内容比较杂乱。因为不同的任务、不同的数据集,通常数据预处理的方法有很大不同。但基本思路是要让处理后的数据更有利于网络训练。那么二维图像预处理的一些方法都是可以借鉴的,如对比度增强、去噪、裁剪等等。此外还有医学图像本身的一些先验知识也可以利用,比如CT图像中不同仿射剂量(单位:HU) 会对应人体不同的组织器官。

不同放射剂量对应的组织器官

基于上表,可以对原始数据进行归一化处理:

MIN_BOUND = -1000.0
MAX_BOUND = 400.0

def norm_img(image): # 归一化像素值到(0,1)之间,且将溢出值取边界值
image = (image - MIN_BOUND) / (MAX_BOUND - MIN_BOUND)
image[image > 1] = 1.
image[image < 0] = 0.
return image

也可以将其标准化/0均值化,将数据中心转移到原点处:

image = image-meam

上述归一化处理适用于绝大多数数据集,其他一些都是可有可无的针对于具体数据的操作,这些操作包括上面的MIN_BOUND 和MAX_BOUND 都最好参考优秀论文的开源代码的处理方式。

预处理后的数据集建议保存在本地,这样可以减少训练时的部分资源消耗。此外,如随机裁剪、线性变换等数据增强处理步骤,还是需要在训练时进行。

参考:

https://zhuanlan.zhihu.com/p/77791840

https://zhuanlan.zhihu.com/p/104381149

谭庆波:常见医疗扫描图像处理步骤

如果觉得有用,就请分享到朋友圈吧!

△点击卡片关注极市平台,获取 最新CV干货

公众号后台回复“transformer”获取最新Transformer综述论文下载~


极市干货
课程/比赛: 珠港澳人工智能算法大赛 保姆级零基础人工智能教程
算法trick 目标检测比赛中的tricks集锦 从39个kaggle竞赛中总结出来的图像分割的Tips和Tricks
技术综述: 一文弄懂各种loss function 工业图像异常检测最新研究总结(2019-2020)


CV技术社群邀请函 #

△长按添加极市小助手
添加极市小助手微信(ID : cvmart4)

备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳)


即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群


每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~



觉得有用麻烦给个在看啦~   
登录查看更多
22

相关内容

医学影像是指为了医疗或医学研究,对人体或人体某部分,以非侵入方式取得内部组织影像的技术与处理过程。它包含以下两个相对独立的研究方向:医学成像系统(medical imaging system)和医学图像处理(medical image processing)。前者是指图像行成的过程,包括对成像机理、成像设备、成像系统分析等问题的研究;后者是指对已经获得的图像作进一步的处理,其目的是或者是使原来不够清晰的图像复原,或者是为了突出图像中的某些特征信息,或者是对图像做模式分类等等。
医学图像关键点检测深度学习方法研究与挑战
专知会员服务
50+阅读 · 2022年4月10日
迁移学习方法在医学图像领域的应用综述
专知会员服务
59+阅读 · 2022年1月6日
专知会员服务
46+阅读 · 2021年8月28日
专知会员服务
26+阅读 · 2021年8月24日
专知会员服务
61+阅读 · 2021年3月6日
图像分割方法综述
专知会员服务
54+阅读 · 2020年11月22日
领域知识图谱研究综述
专知会员服务
142+阅读 · 2020年8月2日
最新《医学图像深度语义分割》综述论文
专知会员服务
94+阅读 · 2020年6月7日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
225+阅读 · 2020年3月22日
只讲关键点之兼容100+种关键点检测数据增强方法
图像分割在医学影像中的应用
极市平台
2+阅读 · 2022年2月16日
迁移学习方法在医学图像领域的应用综述
计算机视觉中的传统特征提取方法总结
极市平台
1+阅读 · 2021年12月9日
计算机视觉中的图像标注工具总结
极市平台
1+阅读 · 2021年10月21日
基于深度学习的医学图像半监督分割
CVer
14+阅读 · 2020年9月24日
关于GANs在医学图像领域应用的总结
人工智能前沿讲习班
31+阅读 · 2019年6月4日
深度学习目标检测概览
AI研习社
46+阅读 · 2017年10月13日
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
2+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
5+阅读 · 2011年12月31日
国家自然科学基金
4+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Arxiv
0+阅读 · 2022年4月18日
Arxiv
0+阅读 · 2022年4月16日
Arxiv
17+阅读 · 2020年11月15日
VIP会员
相关VIP内容
医学图像关键点检测深度学习方法研究与挑战
专知会员服务
50+阅读 · 2022年4月10日
迁移学习方法在医学图像领域的应用综述
专知会员服务
59+阅读 · 2022年1月6日
专知会员服务
46+阅读 · 2021年8月28日
专知会员服务
26+阅读 · 2021年8月24日
专知会员服务
61+阅读 · 2021年3月6日
图像分割方法综述
专知会员服务
54+阅读 · 2020年11月22日
领域知识图谱研究综述
专知会员服务
142+阅读 · 2020年8月2日
最新《医学图像深度语义分割》综述论文
专知会员服务
94+阅读 · 2020年6月7日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
225+阅读 · 2020年3月22日
相关资讯
只讲关键点之兼容100+种关键点检测数据增强方法
图像分割在医学影像中的应用
极市平台
2+阅读 · 2022年2月16日
迁移学习方法在医学图像领域的应用综述
计算机视觉中的传统特征提取方法总结
极市平台
1+阅读 · 2021年12月9日
计算机视觉中的图像标注工具总结
极市平台
1+阅读 · 2021年10月21日
基于深度学习的医学图像半监督分割
CVer
14+阅读 · 2020年9月24日
关于GANs在医学图像领域应用的总结
人工智能前沿讲习班
31+阅读 · 2019年6月4日
深度学习目标检测概览
AI研习社
46+阅读 · 2017年10月13日
相关基金
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
2+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
5+阅读 · 2011年12月31日
国家自然科学基金
4+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Top
微信扫码咨询专知VIP会员