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

2023-11-23 00:50

本文主要是介绍MATLAB医学DICOM影像读取与预处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  • 一、DICOM文件的读取与解析
  • 二、MR与CT像素处理
  • 三、其他

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)
参数名描述其他
1Height行数
2Width列数
3PixelSpacing像素间隔(单位:mm)
4SliceLocation切片位置(单位:mm)
5SpacingBetweenSlices层间距(单位:mm)
6RescaleIntercept缩放截距仅CT
7RescaleSlope缩放斜率仅CT
8WindowCenter窗位
9WindowWidth窗宽

查看方式如下:

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。

这篇关于MATLAB医学DICOM影像读取与预处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/414133

相关文章

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法