matlab-read-medical-data について
DICOM、NIfTI、NRRD の医用画像データを MATLAB で読み書き・操作するためのスキルです。利用可能なツールボックスを先に確認し、Medical Imaging Toolbox の API を優先します。
主な機能
- 01医用画像ファイルの読み書き
- 02DICOM シリーズの一覧表示と選択
- 03空間参照と座標変換の取得
- 04ボリュームの向き変更とスライス抽出
- 05DICOM RT 構造と匿名化の処理
活用シーン
- 01DICOM フォルダーや NIfTI ボリュームの読み込み
- 02複数シリーズのディレクトリから対象を選択
- 03指定した向きで医用画像スライスを抽出
- 04DICOM の匿名化や 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 シリーズを一覧表示して、1 つを読み取る
次の場合に限り、dicomCollection を使用してください。
- フォルダーに複数のシリーズまたはボリュームが含まれているとユーザーが伝えている場合
medicalVolumeまたはdicomreadVolumeがエラーで失敗する場合(例:「not a DICOM file」や「multiple volumes detected」)- 読み取るシリーズを決める前に、存在するシリーズを特定する必要がある場合
dicomCollection はディレクトリをスキャンし、DICOM 以外のファイルを除外して、各行が 1 つのシリーズを表すテーブルを返します。ピクセルデータは読み取りません。
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を適用してください medicalVolumeからスライスを取得するには、必ずextractSliceを使用してください。手動インデックス指定のV.Voxels(:,:,n)は使用しないでください。extractSliceは向きと空間メタデータを処理し、ボリュームがディスク上にどのように保存されているかに関係なく正しく動作します- ネストされた DICOM 構造体を手動で解析しないでください。
dicomContoursを使用してください extractSliceの引数順序:(vol, sliceIndex, direction)— 数値を文字列より前に指定しますintrinsicToWorldは、1 つのベクトルではなく、3 つの個別の出力[x, y, z]を返します
Copyright 2026 The MathWorks, Inc.