关于 matlab-read-medical-data
为 MATLAB 医学影像处理提供读取、写入和操作 DICOM、NIfTI、NRRD 数据的指导。它会先检查可用工具箱,并优先采用 Medical Imaging Toolbox 的接口。
主要功能
- 01读取与写入医学影像文件
- 02列出并选择 DICOM 序列
- 03提取空间参考与坐标变换
- 04调整体数据方向并提取切片
- 05处理 DICOM RT 结构与匿名化
适用场景
- 01读取 DICOM 文件夹或 NIfTI 体数据
- 02从多序列目录中选择目标序列
- 03提取指定方向的医学影像切片
- 04匿名化 DICOM 或编辑 RT 结构
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-read-medical-data安装后在 Claude Code 中输入/matlab-read-medical-data确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
manifest.yamlreferences/dicom-anonymization.mddicom-rt-workflows.mdipt-reading-writing.mdmit-medical-volume.mdmit-spatial-referencing.md详细介绍
读取和写入医学数据
在 MATLAB 中读取、写入和处理医学成像数据。本技能涵盖 Image Processing Toolbox(IPT)函数和 Medical Imaging Toolbox(MIT)增强型 API。
适用场景
- 读取或写入 DICOM、NIfTI 或 NRRD 文件
- 使用
dicomCollection列出 DICOM 序列 - 提取空间参考信息或坐标变换
- 更改体数据方向或提取定向切片
- 处理 DICOM RT 结构(轮廓、掩膜、修改/写入)
- 匿名化 DICOM 数据
不适用场景
- 显示或可视化体数据(使用
matlab-display-volume技能) - 显示带注释的 2-D 医学图像(使用
matlab-display-image技能) - 读取非医学图像格式(PNG、TIFF、JPEG)——使用
imread
工具箱检测——首要关键步骤
选择处理方式前,务必检查哪些工具箱可用。 如果已安装 Medical Imaging Toolbox,优先使用其 API。如果只有 Image Processing Toolbox 可用,则使用 IPT 模式。
任务 → 函数速查表
| 任务 | 仅使用 IPT | 使用 Medical Imaging Toolbox(首选) |
|---|---|---|
| 读取单个 DICOM 文件 | dicomread + dicominfo | medicalImage |
| 读取 DICOM 文件夹 | dicomreadVolume | medicalVolume |
| 读取 NIfTI | niftiread + niftiinfo | medicalVolume |
| 读取 NRRD | —(需要 MIT) | medicalVolume 或 nrrdread + nrrdinfo |
| 列出 DICOM 序列 | dicomCollection | dicomCollection |
| 空间参考 | imref3d | medicalref3d |
| 提取定向切片 | 手动索引 | extractSlice |
| 更改方向 | 手动使用 permute | updateOrientation |
| 读取 DICOM RT 结构 | dicomContours(dicominfo(file)) | 同左 |
| 匿名化 DICOM | dicomanon + dicomuid | 同左 |
| 可视化体数据 | volumeViewer | medicalVolumeViewer 或 volshow(medVol) |
4 个常用模式
1. 读取 DICOM 文件夹
直接对 DICOM 文件夹路径调用 medicalVolume 或 dicomreadVolume。不要先调用 dicomCollection——读取仅包含单个序列的文件夹时,这没有必要。
% WITH Medical Imaging Toolbox (preferred):
medVol = medicalVolume("path/to/dicom/folder");
V = medVol.Voxels; % Auto-rescaled (e.g., HU for CT)
spacing = medVol.VoxelSpacing; % [dx dy dz] in mm
orientation = medVol.Orientation; % "transverse", "coronal", "sagittal"
modality = medVol.Modality; % "CT", "MR"
% Access spatial referencing via VolumeGeometry (medicalref3d object)
geom = medVol.VolumeGeometry;
geom.VolumeSize; % [rows cols slices]
geom.PatientCoordinateSystem; % "LPS+" or "RAS+"
geom.Position; % [slices×3] slice positions in patient coords
geom.VoxelDistances; % {[slices×3] [slices×3] [slices×3]} per-axis distances
geom.PixelSpacing; % [slices×2] in-plane pixel spacing per slice
geom.IsAffine; % true if uniform spacing (affine transform)
geom.IsAxesAligned; % true if volume axes align with patient axes
geom.IsMixed; % true if slices have varying pixel spacing
% IPT only:
[V, spatial, dim] = dicomreadVolume("path/to/dicom/folder");
V = squeeze(V); % Remove singleton 4th dimension
2. 读取 NIfTI 文件
% WITH Medical Imaging Toolbox (preferred):
medVol = medicalVolume("path/to/file.nii.gz");
% IPT only:
V = niftiread("path/to/file.nii.gz");
info = niftiinfo("path/to/file.nii.gz");
voxelSize = info.PixelDimensions(1:3);
3. 列出 DICOM 序列并读取其中一个
仅在以下情况下使用 dicomCollection:
- 用户说明文件夹中包含多个序列或体数据
medicalVolume或dicomreadVolume失败并报错(例如“不是 DICOM 文件”或“检测到多个体数据”)- 在决定读取哪个序列之前,需要确认有哪些序列
dicomCollection 会扫描目录、排除非 DICOM 文件,并返回一个表格,每一行对应一个序列。它不会读取像素数据。
collection = dicomCollection("path/to/directory");
disp(collection); % Table with Modality, SeriesDescription, Rows, Columns, Frames
% WITH Medical Imaging Toolbox:
medVol = medicalVolume(collection, "s1");
% IPT only:
[V, spatial] = dicomreadVolume(collection, "s1");
4. 提取切片 / 更改方向(需要 Medical Imaging Toolbox)
medVol = medicalVolume("path/to/file.nii");
% Extract slices — works for any orientation
[axialSlice, position, spacings] = extractSlice(medVol, 50, "transverse");
[coronalSlice, ~, ~] = extractSlice(medVol, 30, "coronal");
[sagittalSlice, ~, ~] = extractSlice(medVol, 45, "sagittal");
% If medVol.Orientation is not empty, use it as the third input
[sliceData, position, spacings] = extractSlice(medVol, 50, medVol.Orientation);
% Change orientation — do NOT use permute
medVolCoronal = updateOrientation(medVol, "coronal"); % Returns NEW object
updateOrientation 于 R2025a 引入。
详细参考文件
重要:为以下任何任务生成代码前,请先阅读匹配的参考文件。
| 任务触发条件 | 参考文件 | 编写前请先阅读 |
|---|---|---|
| 使用 IPT 读取/写入 DICOM 或 NIfTI | references/ipt-reading-writing.md | 编写 dicomreadVolume、niftiread、imref3d 或重缩放逻辑 |
使用 medicalVolume、medicalImage、切片或方向 | references/mit-medical-volume.md | 编写 medicalImage、medicalVolume、extractSlice 或 updateOrientation 调用 |
| 空间参考或坐标变换 | references/mit-spatial-referencing.md | 编写 medicalref3d、intrinsicToWorld 或 worldToIntrinsic 调用 |
| RT 结构(轮廓、标签图、RTSTRUCT) | references/dicom-rt-workflows.md | 读取、编辑、显示或绘制轮廓/RTSTRUCT 文件,或编写任何 dicomContours、plotContour、createMask、addContour、deleteContour 调用 |
| 匿名化 DICOM 文件 | references/dicom-anonymization.md | 编写任何 dicomanon 或 dicomuid 调用 |
应避免的旧模式
| 不要使用 | 改用 | 原因 |
|---|---|---|
对单个文件使用 dicomread + dicominfo | medicalImage(MIT) | 统一访问、自动重缩放 |
对 DICOM 文件夹使用 dicomreadVolume | medicalVolume(MIT) | 保留空间参照 |
niftiread + niftiinfo | medicalVolume(MIT) | 统一容器 |
使用 V.Voxels(:,:,n) 或 V(:,:,n) 提取切片 | extractSlice(medVol, n, medVol.Orientation)(MIT) | 处理方向和空间元数据,无论存储顺序如何都能正常工作 |
手动使用 permute 调整方向 | updateOrientation(medVol, orient)(MIT) | 更新空间元数据 |
| 手动解析 RT 结构体 | dicomContours(info) | 输出整洁的表格 |
volumeViewer | medicalVolumeViewer(MIT,R2026a) | 医学专用功能 |
对医学图像使用 imshow | imageshow | 为医学数据提供更合适的默认设置 |
约定
- 选择函数前,始终检测可用的工具箱
- 优先使用 Medical Imaging Toolbox API(
medicalVolume、medicalImage) - 对不可变方法始终捕获其输出(
deleteContour、updateOrientation) - 写入 RT Structure DICOM 文件时,始终使用
CreateMode="Copy" - 默认不要在
medicalVolume/dicomreadVolume前调用dicomCollection——直接对文件夹路径调用读取函数 - 仅在以下情况下使用
dicomCollection:文件夹中包含多个序列、medicalVolume出错,或需要在不读取像素数据的情况下确定有哪些序列 - 对灰度数据,始终对
dicomreadVolume的输出使用squeeze - 始终使用
extractSlice从medicalVolume获取切片——不要使用V.Voxels(:,:,n)手动索引。extractSlice会处理方向和空间元数据,无论卷在磁盘上的存储方式如何都能正确工作 - 切勿手动解析嵌套的 DICOM 结构体——使用
dicomContours extractSlice参数顺序:(vol, sliceIndex, direction)——数值参数在字符串参数之前intrinsicToWorld返回 3 个独立输出:[x, y, z]——而非单个向量
版权所有 2026 The MathWorks, Inc.
评论
支持 Markdown