MATLAB医学DICOM影像读取与预处理

2023-11-10

(来点有用的)MATLAB医学DICOM影像读取与预处理


by HPC_ZY


DICOM,是医学图像和相关信息的国际标准。
常见类型有MR和CT,而它们在处理上有细微的不同。


一、DICOM文件的读取与解析

MATLAB内置dicom库,直接调用即可。

  1. 数据读取
    运行以下代码,即可得到:
    (1)dcm: 像素信息;
    (2)info: 参数信息。
% filename 就是你要用的DICOM文件的名字
% 不要使用其他奇怪的东西
filename = 'CT.dcm'; 
dcm = dicomread(filename);
info = dicominfo(filename);

在这里插入图片描述

  1. 常用参数(图像处理)
    当你已经成功获取上述的info结构体之后,就可以通过下列成员名,查看DICOM数据里每个参数的具体数值了。(如果遇到问题请参考文末注意事项3)
参数名 描述 其他
1 Height 行数
2 Width 列数
3 PixelSpacing 像素间隔(单位:mm)
4 SliceLocation 切片位置(单位:mm)
5 SpacingBetweenSlices 层间距(单位:mm)
6 RescaleIntercept 缩放截距 仅CT
7 RescaleSlope 缩放斜率 仅CT
8 WindowCenter 窗位
9 WindowWidth 窗宽

查看方式如下:

info.WindowCenter
info.WindowWidth
info.RescaleSlope
info.RescaleIntercept
info.PixelSpacing
info.SliceLocation

具体使用方式在后面介绍。


二、MR与CT像素处理

CT值是测定人体某一局部组织或器官密度大小的一种计量单位,通常称亨氏单位(hounsfield unit ,HU)。如空气为-1000,致密骨为+1000。
而磁共振图像的信号绝对值,不像CT有明确的物理意义。磁共振更关心不同组织之间信号的强弱对比关系。(感兴趣可自行查阅磁共振图像成像步骤)

  1. MR
    DICOM文件中的像素信息单位为灰度(即强度),与磁共振一致。故MR影像读取后可直接使用,也可进行归一化处理。
%% 读取数据
filename = 'MR.dcm';
dcm = dicomread(filename);
info = dicominfo(filename);
dcm = double(dcm); % 转为double方便后续处理

%% 归一化处理(此处也可直接使用mat2gray()函数)
lv = min(dcm(:));
uv = max(dcm(:));
dcmIM = (dcm - lv)/(uv - lv);

%% 显示
figure
subplot(121), imagesc(dcm)
colorbar, title('原始数据')
subplot(122), imagesc(dcmIM)
colorbar, title('图像数据')
colormap gray;

颅腔MR
2. CT
CT成像信号会转换为灰度保存在DICOM文件中,所以在使用前要先转回CT值,再根据窗位窗宽进行归一化处理。

%% 读取数据
filename = 'MR.dcm';
dcm = dicomread(filename);
dcm = double(dcm); % 转为double方便后续处理

%% 灰度转CT值
dcmCT = dcm * info.RescaleSlope + info.RescaleIntercept;

%% 调窗+归一化
% 重要的事情说一遍
% dicom默认窗宽窗位由设备和操作员决定,有时一个,有时两个,请根据自己的影像核实确认,此代码仅是示例。为了不报错,给加了一个k = 1
k = 1;   % 通常有12个窗,但我不知道你的数据有多神奇
lv = info.WindowCenter(k) - info.WindowWidth(k)/2;
uv = info.WindowCenter(k) + info.WindowWidth(k)/2;
dcmIM = (dcmCT-lv)/info.WindowWidth(k);
dcmIM(dcmIM<0) = 0;
dcmIM(dcmIM>1) = 1;

%% 显示
figure
subplot(131),imagesc(dcm)
colorbar,title('原始数据')
subplot(132),imagesc(dcmCT)
colorbar,title('CT数据')
subplot(133),imagesc(dcmIM)
colorbar,title('图像数据')
colormap gray;

颅腔CT
腹腔CT


三、其他

  1. 行列数、像素间隔与层间距、切片位置,主要用于DICOM序列的三维重建。
    直接使用三维DICOM数据进行三维可视化,结果是变形的;所以利用上述参数,对原始数据按照真实比例进行重采样。具体方法这里不做介绍,可自行百度采样与插值。
  2. 一个DICOM(CT)影像有时不止一个窗位窗宽
    关于CT值与窗位窗宽:https://www.cnblogs.com/vranger/p/3806956.html 。
  3. 不同厂家的机器,导出的DICOM文件包含的信息有区别。有些非医院提供,在网上下载的DICOM文件(或许是其他用户自己生成的),可能只含图像信息。有时你获得的DICOM可能都是错误的,一定要确认数据来源,当遇到问题点开info仔细查看

有任何问题欢迎讨论,最后还是把演示代码上传
https://download.csdn.net/download/xsz591541060/11221516
由于很简单,不推荐下载,除非你买了年VIP。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB医学DICOM影像读取与预处理 的相关文章

  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • MATLAB问题:在图块中引用变量的值[重复]

    这个问题在这里已经有答案了 可能的重复 matlab 绘图标题中的变量 https stackoverflow com questions 5629458 matlab variable in plot title 我想在图中引用 m 文件
  • MATLAB:图像角坐标和引用元胞数组

    我在比较不同元胞数组中的元素时遇到一些问题 这个问题的背景是我正在使用bwboundariesMATLAB 中的函数可追踪图像的轮廓 该图像是结构横截面 我试图找出整个部分是否具有连续性 即 只有一个轮廓由bwboundaries命令 完成
  • 基本矩阵错误?

    我试图通过扫描从相机拍摄的两个图像 检测图像中的特征 匹配它们 创建基本矩阵 使用相机内在函数计算基本矩阵 然后分解它以找到旋转和翻译 这是matlab代码 I1 rgb2gray imread 1 png I2 rgb2gray imre
  • Blob 的簇生长

    考虑以下来自 Mathworks 的图像 我已经用标签标记了斑点 L num bwlabel I 如何迭代连接所有斑点 即从一个斑点开始 找到离它最近的一个 考虑最左边的两个斑点 可以从一个斑点的许多点绘制许多条线来连接到另一个斑点blob
  • 如何在matlab中使矩阵图平滑

    就像上图一样 怎样才能让画面更流畅呢 或者缩小y轴的范围 数据来自二维矩阵 然后我用plot data 请随意提出任何想法 平滑线条的一种方法涉及样本点之间数据的非线性插值 当你这样做时plot x y o http www mathwor
  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod
  • 使用网络计算机进行 Matlab 并行处理

    我熟悉matlabpool and parfor用法 但我仍然需要加快计算速度 我的 1GB 网络中有一台功能更强大的计算机 两台计算机都有 R2010b 并且具有相同的代码和路径 使用两台计算机进行并行计算的最简单方法是什么 我今天使用的
  • MATLAB 符号替换

    我知道在 MATLAB 中如果声明了 syms x y f x 2 y 2 grad gradient f 然后grad会存储值 2 x 2 y 如果我想评估梯度 2 2 I use subs f x y 2 2 这返回 4 4 我正在编写
  • MATLAB;具有 2+ 个/分割图例的饼图 R2017b

    我正在创建一个饼图 理想情况下希望图例水平显示在顶部和 或底部 然而 在几乎所有情况下 这是不可能的 因为图例超出了数字 因此 我理想情况下希望将图例分成两个 或更多 子图例并单独放置它们 我知道这不是 MATLAB 中的内置功能 我使用的
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • Python 中的 eig(a,b) 给出错误“需要 1 个位置参数,但给出了 2 个”

    根据https docs scipy org doc numpy 1 15 0 user numpy for matlab users html https docs scipy org doc numpy 1 15 0 user nump
  • 了解 Matlab 中的 DEL2 函数以便用 C++ 对其进行编码

    为了用 C 编写 DEL2 matlab 函数 我需要了解该算法 我已经成功地为不在边界或边缘上的矩阵元素编写了函数 我已经看过几个有关它的主题 并通过输入 edit del2 或 type del2 来阅读 MATLAB 代码 但我不明白
  • 如何使用 MATLAB 的“等值面”函数创建三角球体

    如何创建一个三角球体 其中每个三角形的面面积相同 我想要这样的东西 http imageshack us a img198 5041 71183923 png http imageshack us a img198 5041 7118392

随机推荐

  • RocketMQ Rebalance流程分析

    这节介绍Rebalance流程 在介绍Consumer消费消息流程前 先介绍Rebalance得流程 该过程涉及到Consumer的启动 之前介绍过 Topic是一个逻辑概念 Topic下可以划分多个Queue以增加Consumer消费的并
  • react+antd+vscode的运行环境搭建

    初学者 在学着做一个前端项目 有时候要换新电脑 或者重装系统 前端代码就不能用了 解决时候总是忘记还遇到麻烦 记录一下 按步骤来吧 也不知道对不对 先这样用着 1 下载vscode 就去官网下就完事 好像点下载会根据电脑的系统版本位数啥的下
  • 接口测试&管理续集

    今天应大家需要 接着谈app端数据返回层面的用例设计方法 第二部分给大家安利一个 接口管理平台 以帮助大家解决接口文档维护 接口测试数据Mock 接口自动化测试等问题 希望对小伙伴们有用 言归正传 进入今天的话题 一 用例设计 查漏补缺 数
  • Python网络爬虫之js逆向之远程调用(rpc)免去抠代码补环境简介

    点击上方 Python共享之家 进行关注 回复 资源 即可获赠Python学习资料 今 日 鸡 汤 折戟沉沙铁未销 自将磨洗认前朝 大家好 我是黑脸怪 这篇文章主要给大家介绍jsrpc 方便大家日后在遇到JS逆向的时候派上用场 前言 jsr
  • Unity编辑器拓展(一)实现快速制作书本效果插件

    目录 前言 自定义窗口实现使用的方法 效果演示 前言 Unity自定义书本编辑器窗口 书本功能实现参考教程 Unity代码实现翻书效果 自定义窗口实现使用的方法 EditorWindow GetWindow EditorGUILayout
  • 数据库学习(6)MySQL数据库DDL——索引

    MySQL数据库DDL 索引 创建索引 添加与删除索引 索引的使用原则 数据排序的好处 一旦数据排序之后 查找的速度就会翻倍 现实世界跟程序世界都是如此 创建索引 CREATE TABLE 表名称 INDEX 索引名称 字段 注 排序方法为
  • ToDesk远程控制

    实现远程控制有多简单 https www todesk com download htmlhttps www todesk com download htmlhttps www todesk com download html 电脑浏览器打
  • vue-pdf使用+分页预览+第一查看正常,第二次查看空白解决方案

    重点提示 全网通用pdf查看的功能都是使用vue pdf这个插件 除了各种坑外 最致命的一点就是 它的npm包有一个Bug 在第一次查看之后 再次查看 页面会空白并报错 Error during font loading Failed to
  • jsp、freemarker、velocity、thymeleaf页面方案分析

    1 概述 在java领域 表现层技术主要有三种 1 jsp 2 freemarker 3 velocity 4 thymeleaf 2 jsp 优点 1 功能强大 可以写java代码 2 支持jsp标签 jsp tag 3 支持表达式语言
  • Kattis Doors

    Problem open kattis com problems doors vjudge net contest 183886 problem B Reference 点到线段的最短距离算法 Meaning 有两个球 Alex 和 Bob
  • FastDFS性能调优 know how

    FastDFS性能调优 本篇文章转载于FastDFS作者 余庆 大佬的 FastDFS分享与交流 公众号 众所周知 软件性能调优不是一撮而就的事情 它是一个反复磨合的过程 下面介绍FastDFS 几个性能调优相关的重要参数 供大家参考 1
  • React官网API模块知识点整理(三)

    react版本 16 13 1 1 React 顶层 API React Component React Component 是使用 ES6 classes 方式定义 React 组件的基类 React PureComponent Reac
  • formatter function (value,row,index){ } 参数的含义

    datagarid的formatter属性 formatter function value row index if value 1 return 提交 else if value 99 return 完成 else return 保存
  • 【python爬虫】爬取链家二手房数据

    相信大家买房前都会在网上找找资料 看看行情 问问朋友 今天就带大家扒一扒 链家二手房 的数据 一 查找数据所在位置 打开链家官网 进入二手房页面 选取某个城市 可以看到该城市房源总数以及房源列表数据 二 确定数据存放位置 某些网站的数据是存
  • LocalDate与Date介绍与转换

    一 介绍 java util Date和SimpleDateFormatter都不是线程安全的 而LocalDate和LocalTime和最基本的String一样 是不变类型 不单线程安全 而且不能修改 java util Date月份是从
  • Linux 脚本文件第一行的特殊注释符(井号和感叹号组合)的含义

    我的CSDN主页 My Python 学习个人备忘录 我的HOT博 usr bin env python 的含义 Python 代码存储文件 py 中 经常看到在首行最前端 都是半角符号 输入法英文状态下输入 这是 Linux 系统下指定脚
  • 图像 ISP 处理流程以及新人学习图像的注意点

    1 什么是 ISP ISP 全称 Image Signal Processing 即图像信号处理 景物通过光学图像投射到 sensor 表面后 光电转换为模拟电信号 消除噪声后经过 A D 转换后变为数字图像信号 由于原始的图像是 Baye
  • 2.1 信息的存储

    整数 虽然只能编码一个相对较小的数值范围 但是这种表示是精确的 符点数 虽然可以编码一个较大的数值范围 但是这种表示只是近似的 c c 完全相同的数字表示和运算 java 创建了一套新的数字表示和运算标准 gcc版本 gcc std c11
  • CSS特性---------继承性

    一 继承性 1 1 特性 子元素有默认继承父元素的特点 1 2 可继承的常见属性 font size font weight font family font style text indent text align line height
  • MATLAB医学DICOM影像读取与预处理

    来点有用的 MATLAB医学DICOM影像读取与预处理 一 DICOM文件的读取与解析 二 MR与CT像素处理 三 其他 by HPC ZY DICOM 是医学图像和相关信息的国际标准 常见类型有MR和CT 而它们在处理上有细微的不同 一