You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中处理DICOM RT结构提取2D最小包围盒的函数咨询

MATLAB 处理DICOM RT结构生成带尺度最小2D包围盒的方案

可用内置函数清单

所有函数均原生支持读取DICOM自带的空间尺度信息(患者物理坐标系,单位mm),不需要额外做尺度校准:

  • dicominfo:读取RTSTRUCT文件的全量元数据,包含坐标系、像素间距、结构集标签等所有原始信息,你当前使用的UseVRHeuristic=false参数可以兼容非标准VR编码的DICOM文件,避免读取出错。
  • dicomContours(Image Processing Toolbox提供):专门用于解析RTSTRUCT格式的轮廓数据,输出对象中存储的轮廓点坐标直接为DICOM患者坐标系下的真实物理坐标,自带原始尺度,不需要手动转换坐标。
  • plotContour:支持直接在DICOM物理坐标系下绘制轮廓,不会出现拉伸、尺度变形问题,你当前设置的view([180 0])对应冠状位投影视角。
  • imref2d/imref3d:空间参考对象,可存储DICOM影像的方向、原点、像素间距信息,用于后续把包围盒叠加到对应CT/MRI序列时自动匹配尺度。
  • 基础矩阵运算函数(min/max/cell2mat):直接在物理坐标维度计算包围盒边界,无精度损失。

保留原始尺度的最小2D包围盒实现代码

你当前选取的是方位角180°、仰角0°的投影视角(对应X-Z平面冠状位投影,Y轴为前后方向),直接在物理坐标下计算即可完全保留尺度,参考代码如下:

% --- 你已有的基础读取代码 ---
info = dicominfo("C:\Temp\....\RtTest2\rtstruct2.dcm",UseVRHeuristic=false);
rtContours = dicomContours(info);
% 可通过rtContours.ROIs.ROIName核对58号ROI是否为目标结构
figure(1)
plotContour(rtContours,58); 
view([180 0])

% --- 提取轮廓点计算最小包围盒 ---
% 读取目标ROI所有层的轮廓坐标,为细胞数组,每个元素对应一层的N×3物理坐标点
targetContour = rtContours.ROIs.ContourData{58};
% 合并所有层的点为M×3矩阵,三列分别对应患者坐标系下X(左右)、Y(前后)、Z(头脚)坐标,单位mm
allPoints = cell2mat(targetContour);

% 按当前视角做2D投影:取X、Z维度坐标
projPoints = allPoints(:,[1,3]);
% 计算轴对齐最小包围盒,输出格式为[X起点, Z起点, X方向宽度, Z方向高度],单位为mm
bbox_min = [min(projPoints(:,1)), min(projPoints(:,2)), ...
    max(projPoints(:,1))-min(projPoints(:,1)), max(projPoints(:,2))-min(projPoints(:,2))];

% 可视化验证:在当前图上叠加包围盒
hold on
rectangle('Position', bbox_min, 'EdgeColor','r','LineWidth',2)
hold off

如果需要非轴对齐的、贴合结构旋转角度的最小外接矩形,可以先将投影点构建为polyshape对象,结合凸包计算最小外接矩形即可,全程在物理坐标下运算不会丢失尺度。

尺度保留注意事项

  • 不要将轮廓点转换为像素坐标后再计算包围盒,直接使用dicomContours输出的物理坐标计算即可保证尺度和原始DICOM一致。
  • 后续如果需要将包围盒匹配到对应的CT/MRI影像序列,读取影像时同步生成对应的imref2d空间参考对象,即可直接叠加显示,不需要额外做尺度配准。

轮廓运行效果参考

内容的提问来源于stack exchange,提问作者lam90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 21:30:56