211126-Matlab读取mhd文件并转为dcm

Matlab读取mhd文件并转为dcm,做此记录,后续再进行更改。

clc; clear; close all
id = fopen('CT_FCN/CT_predicted_3.raw');
imgs = fread(id,'int16');%以'short'数据类型打开,因为本人存储的raw数据是以short保存的
imgsize = size(imgs);%读出的图像的size为n*1大小
rows = 320;%根据mhd文件的图像大小设定
clos =192;
nums = imgsize(1)/rows/clos; %计算得到图像张数
imgs = reshape(imgs,[rows,clos,nums]);
% img = int16(imgs(:,:,1)');
% imshow(imgs(:,:,1)',[])
for i = 1:26
    
img = int16(imgs(:,:,5*(i-1)+1)');
infopath = 'sun210816/sun210816_CT1gt_image00001.dcm';
imginfo = dicominfo(infopath);
imginfo.InstanceNumber=imginfo.InstanceNumber+i;%保存时保持层数与序列一致
imginfo.ImagePositionPatient=[imginfo.ImagePositionPatient(1), imginfo.ImagePositionPatient(2),imginfo.ImagePositionPatient(3)+5.0*(i-1)];
imginfo.SliceLocation=imginfo.SliceLocation+5.0*(i-1);
dicomwrite(img, ['fcn_dcm/', sprintf('%02d.dcm', 26-i)], imginfo);
end
### 如何在 MATLAB读取 MHD 文件 MHD (Meta Image Data) 是一种用于存储医学图像数据的文件格式。为了在MATLAB中处理这种类型的文件,可以采用自定义函数来解析.MHD文件的内容加载相应的原始数据[^1]。 通常情况下,MATLAB本身不直接支持MHD文件读取操作,因此需要编写特定代码或利用第三方工具箱实现此功能。下面是一个简单的例子展示如何创建一个基本的读取器: ```matlab function imgData = read_mhd_file(filename) % 解析 .mhd 文件头信息 metaioInfo = imfinfo(fullfile('', filename)); % 获取指向实际二进制数据(.raw)路径的信息 elementDataFileField = 'ElementDataFile'; dataFilePath = ''; for i=1:length(metaioInfo) if isfield(metaioInfo(i),elementDataFileField) dataFilePath = fullfile(fileparts(filename), ... getfield(metaioInfo(i), elementDataFileField)); break; end end % 打开关联的数据文件 (.raw 或其他扩展名取决于具体应用) fid = fopen(dataFilePath, 'r'); if fid == -1 error('无法打开指定的数据文件.'); end % 根据元数据中的尺寸和类型读入体素数据 dims = str2num(regexp(metaioInfo.DimSize, '\s+', 'split')); dataType = lower(strtrim(metaioInfo.DataType)); voxelData = fread(fid, prod(dims), ['*',dataType]); fclose(fid); % 调整数组维度顺序以匹配标准矩阵表示法 imgData = reshape(voxelData, dims(end:-1:1)); end ``` 上述脚本提供了一个基础框架,可以根据具体的MHD文件结构和个人需求进一步调整优化。对于更复杂的场景,建议考虑使用专门设计好的库或者工具包来进行高效可靠的读写操作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值