CT图像中存在两个基本概念,窗口(window width)和窗位(window center),用于选取感兴趣的CT值范围,因为人体各组织结构不同,对X线吸收程度各异,形成不同的CT值,因此可以利用CT值来鉴别组织的性质。CT值的单位为Hounsfield

Hounsfield单位(HU)是计算机断层扫描(CT)中普遍使用的无量纲单位,用于标准、便捷的表达CT数值。Hounsfield单位是通过对测量得到的衰减系数进行线性变换得到的。这种转换是基于空气和的密度,其中纯水被定义为0 Hounsfield单元,空气被定义为-1000 Hounsfield单元。组织密度越大,x射线吸收越强,其值为正,呈亮信号;密度较低的组织,x射线吸收较少,显示负值,呈暗信号。Hounsfield单位是以1979年诺贝尔生理学或医学奖得主Godfrey Hounsfield爵士的名字命名的,以表彰他在CT的发明中所做的贡献。

窗宽是CT图像上显示的CT值范围,在此CT值范围内的组织和病变均以不同的模拟灰度显示。而CT值高于此范围的组织和病变,无论高出程度有多少,均以白影显示,不再有灰度差异; 反之,低于此范围的组织结构,不论低的程度有多少,均以黑影显示,也无灰度差别。增大窗宽,则图像所示CT值范围加大,显示具有不同密度的组织结构增多,但各结构之间的灰度差别减少。减小窗宽,则显示的组织结构减少,然而各结构之间的灰度差别增加。如观察脑质的窗宽常为-15~+85H,即密度在-15 ~+85H范围内的各种结构如脑质和脑脊液间隙均以不同灰度显示。而高于+85H的组织结构如骨质几颅内钙化,其间虽有密度差,但均以白影显示,无灰度差别;而低于-15H组织结构如皮下脂肪及乳突内气体均以黑影显示,其间也无灰度差别。

窗位是窗的中心位置,同样的窗宽,由于窗位不同,其所包括CT值范围的CT值也有差异。例如窗宽同为100H,当窗位为0H时,其CT值范围为-50 ~ +50H ; 如窗位为+35H时,则CT值范围为-15~+85H。通常,欲观察某以组织结构及发生的病变,应以该组织的CT值为窗位。例如脑质CT值约为+35H,则观察脑组织及其病变时,选择窗位以+35H为妥。

常见的人体组织CT值

(1) 液体CT值:-10~10Hu,水的CT值为0Hu;

(2) 空气CT值:-1000Hu;

(3) 脂肪CT值:-10~90Hu;

(4) 肝脾肾、脑实质等软组织CT值:20~50Hu;

(5) 骨性组织CT值一般超过300Hu;骨皮质一般CT值超过+1000Hu;

(6) 腹部常用CT值:-160~240Hu

下边是对腹部窗口的图像预处理:

# 腹部窗口的选取
def pretreatmentImage(image):image[image < -160] = 0image[image > 240] = 0return image

医疗图像重采样:

对于一张大小为128*128的彩色图像,其在计算机中可以表示为128*128*3的矩阵,其中每一个像素点的取值范围为0-255,不同的数值代表不同的亮度。但是对于医疗图像其是由若干个slice组成的,假设每一个slice的大小为512*512的单通道的图像,其中每一个像素点表示的是一个体素的取值,其范围可以-1000~2000之间。接下来通过以胰腺分割数据集中PANCREAS_0015.nii.gz为例,对医疗图像中体素这个概念进行讲解。Spacing(0.78125, 0.78125, 1.0)表示的是原始图像体素的大小,也可以将Spacing想象成大小为(0.78125, 0.78125, 1.0)的长方体。而原始图像的Size为 (512, 512, 247),表示的是原始在X轴,Y轴,Z轴中体素的个数。原始图像的size*对应的Spacing既可以得到真实3D图像大小(512*0.78125,512*0.78125,247*1 ),在图像重采样只是修改体素的大小,而真实3D图像大小是保持不变的,因此假设我们将Spacing修改成(1.0, 1.0, 2.0)的时候,则修改之后其对应的size应该为((512*0.78125)/ 1.0,(512*0.78125)/ 1.0,(247*1 )/ 2.0)即(400, 400, 124)。

import pydicom
path = ""
dcm_data = pydicom.read_file(path)
print(dcm_data.PixelSpacing, dcm_data.SliceThickness) # 查看医学图像的体素大小和切片间距

重采样代码:

def img_resmaple(path, new_spacing=[1.0, 1.0, 1.0]):data = STK.ReadImage(path)image = STK.GetArrayFromImage(data) # 获取图像# print(image.shape)original_spacing = data.GetSpacing()# print(original_spacing)original_size = data.GetSize()# print(data.GetOrigin(), data.GetDirection())new_shape = [int(np.round(original_spacing[0] * original_size[0] / new_spacing[0])),int(np.round(original_spacing[1] * original_size[1] / new_spacing[1])),int(np.round(original_spacing[2] * original_size[2] / new_spacing[2])),]resmaple = STK.ResampleImageFilter()resmaple.SetInterpolator(STK.sitkLinear)resmaple.SetDefaultPixelValue(0)resmaple.SetOutputSpacing(new_spacing)resmaple.SetOutputOrigin(data.GetOrigin())resmaple.SetOutputDirection(data.GetDirection())resmaple.SetSize(new_shape)data = resmaple.Execute(data)image = STK.GetArrayFromImage(data)# print(image.shape)return image

按照图像的中心裁剪:

def centerCrop(image, label, output_size):if image.shape[0] <= output_size[0] or image.shape[1] <= output_size[1] or image.shape[2] <= output_size[2]:pw = max((output_size[0] - image.shape[0]) // 2 + 3, 0)ph = max((output_size[1] - image.shape[1]) // 2 + 3, 0)pd = max((output_size[2] - image.shape[2]) // 2 + 3, 0)image = np.pad(image, [(pw, pw), (ph, ph), (pd, pd)], mode='constant', constant_values=0)label = np.pad(label, [(pw, pw), (ph, ph), (pd, pd)], mode='constant', constant_values=0)(w, h, d) = image.shapew1 = int(round((w - output_size[0]) / 2.))h1 = int(round((h - output_size[1]) / 2.))d1 = int(round((d - output_size[2]) / 2.))# print(image.shape, output_size, get_center(label), w1, h1, d1)image = image[w1:w1 + output_size[0], h1:h1 + output_size[1], d1:d1 + output_size[2]]label = label[w1:w1 + output_size[0], h1:h1 + output_size[1], d1:d1 + output_size[2]]return image, label

两种常用的归一化方法

1)min-max标准化

2)Z-score标准化方法

(1)min-max标准化(Min-Max Normalization)(线性函数归一化)
定义:也称为离差标准化,是对原始数据的线性变换,使得结果映射到0-1之间。
本质:把数变为【0,1】之间的小数。
转换函数:(X-Min)/(Max-Min)
如果想要将数据映射到-1,1,则将公式换成:(X-Mean)/(Max-Min)
其中:max为样本数据的最大值,min为样本数据的最小值,Mean表示数据的均值。

缺陷:当有新数据加入时,可导致max和min的变化,需要重新定义。

(2)0均值标准化(Z-score standardization)
定义:这种方法给与原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1.
本质:把有量纲表达式变成无量纲表达式。
转换函数:(X-Mean)/(Standard deviation)
其中,Mean为所有样本数据的均值。Standard deviation为所有样本数据的标准差。

两种归一化方法的使用场景:
(1)在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

因为:第一种方法(线性变换后),其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。

(2)在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在(0 ,255)的范围。

因为:第二种归一化方式中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。

代码实现:

def MinMax(image):image = image - np.mean(image)  # 零均值if np.max(image) - np.min(image) != 0:image = (image - np.min(image)) / (np.max(image) - np.min(image))  # 归一化return imagedef zsorce(image):image = (image - np.mean(image)) / np.std(image)return image

参考:

CT图像之Hu值变换与窗宽窗位调整_HuiYu-Li的博客-CSDN博客_ct图像调窗

CT医学影像的窗高窗位、CT值(Hu值)_土豆娃wkl的博客-CSDN博客_hu影像学单位

医学图像预处理之重采样_YYLin-AI的博客-CSDN博客_医学图像重采样

机器学习-数据归一化方法(Normalization Method)_Microstrong0305的博客-CSDN博客_数据归一化

【医学图像分割】CT医学图像的预处理(重采样)相关推荐

  1. 三维重建 阈值分割 3D可视化 医学图像分割 CT图像分割及重建系统 可视化编程技术及应用

    一. 概述 此系统实现了常见的VTK四视图,实现了很好的CT图像分割,可以用于骨骼,头部,肺部,脂肪等分割,,并且通过三维重建实现可视化.使用了第三方库 VTK,ITK 实现分割和生不重建. 窗口分为 ...

  2. 医学图像笔记(四)医学图像分割

    医学图像笔记(四)医学图像分割 1.医学图像分割的开源工具 2.其他分割 2.1.3D VNet 2.2.PE-VNet 3.医学图像数据集 3.1.百度AI studio 数据集 3.2.Githu ...

  3. 医学图像预处理----重采样(Resample)

    前言: 在医学图像中,重采样是指将医疗图像中大小不同的体素归一化到相同的大小.体素是体积元素(Volume Pixel)的简称,一张3D医学图像可以看成是由若干个体素构成的,体素是一张3D医疗图像在空 ...

  4. [医学图像分割综述] Medical Image Segmentation Using Deep Learning: A Survey

    使用深度学习的医学图像分割:一项调查 论文地址 本综述有两个独创之处,首先,与传统的调查方法直接将医学图像分割的文献划分为多个组,并对每个组详细介绍文献的方法相比,我们将目前流行的文献按照从粗到细的多 ...

  5. nnU-Net团队新作MedNeXt:新一代医学图像分割之王,刷新多项榜单记录!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入->[医疗影像和Transformer]微信技术交流群 转载自:CVHub Title: Me ...

  6. nnU-Net: 基于U-Net医学图像分割技术的自适应框架

    ** nnU-Net: 基于U-Net医学图像分割技术的自适应框架 ** https://arxiv.org/pdf/1809.10486.pdf 作者:Fabian Isensee 提要 U-Net ...

  7. 【论文笔记】基于U-Net的医学图像分割模型nnU-Net(no-new U-Net)

    本文是 nnU-Net 论文的笔记,稍微做了整合了一下,可能有些地方有所遗漏,等以后看完代码之后再补充. 1. 摘要 nnU-Net(no-new-Net)是基于 U-Net 的一种模型,它在达到很好 ...

  8. 基于深度学习的医学图像分割综述

    转载:https://blog.csdn.net/weixin_41783077/article/details/80894466 摘要:医学图像分割是决定医学图像在临床诊疗中能否提供可靠依据的关键问 ...

  9. nnUNet原创团队全新力作!MedNeXt:医学图像分割新SOTA

    Title:MedNeXt: Transformer-driven Scaling of ConvNets for Medical Image Segmentation MedNeXt:用于医学图像分 ...

最新文章

  1. 迪普科技:G20峰会背后的网络安全守护者
  2. Android-6步教你自定义View
  3. 利用python来解析html
  4. 支持将数据导出到Excel文档的时候设置单元格格式的.NET控件Spire.DataExport
  5. 从 Java 到 Scala(一):面向对象谈起
  6. 在Ubuntu 16.04 上安装和卸载matlab 2018b(Install and uninstall matlab 2018b on ubuntu)
  7. 第九节:掌握vue的另一个核心:组件
  8. 利用路由器端口映射远程连接
  9. linux中级之netfilter防火墙(firewalld)
  10. mysql排序同值排名一致
  11. 丑小鸭变白天鹅 数据中心进化三部曲
  12. Redis的高级应用-安全性和主从复制
  13. sublime 中文配置
  14. 阿里云域名和ip绑定具体内容步骤
  15. Express + JWT用户认证最轻实践
  16. 你说的等保3.0,是不是等保三级测评
  17. JAVA 设计模式(三)—— 设计模式之工厂模式
  18. mfc7420调整复印浓度_理光AFICIO复印机如何调节复印浓度
  19. 中英文文本分类的区别
  20. ajax请求无法下载文件

热门文章

  1. 手机上照片大小怎么改?如何用手机修改图片尺寸?
  2. 利用python计算个人所得税
  3. Python Apex YOLO V7 main 目标检测 全过程记录
  4. 【Valve】Dead Thread Detection Valve
  5. css权重是什么?css权重的介绍
  6. 初中计算机实践研究计划,项目式教学法在初中信息技术课堂教学中的研究与实践...
  7. AVT工业相机Windows、Opencv开发——驱动相机(超详细)
  8. 完全零基础,到底该怎样学习编程?
  9. Wi-Fi DFS与TPC介绍
  10. 移动硬盘加密方法加密后对硬盘读写的影响