matlab错误使用dicom>newDicomread(line210) Unsupported data encoding
image.png最近用matlab2014a处理医学影像数据,在用dicomread()读取dicom文件出现错误;报错显示
Unsupported data encoding
--不支持编码格式,初步判断可能是dicom文件压缩格式的问题。
在网上查找相关问题答案始终没有解决,最后在同门师兄提醒:可能是matlab版本的问题;于是用matlab2018b来进行处理,不再报错,问题解决!!!谢谢师兄指导
未完待续(2021.9更)...
DICOM 传输语法的平台兼容性 https://www.cnblogs.com/h2zZhou/p/8193779.html
image.png关于DICOM 传输语法详细介绍,传输语法是 DICOM 中用来描述 DICOM 文件格式和网络传输方法的语言。 传输语法中包含 3 个主要变量,其中一个就是像素数据压缩。
https://www.medicalconnections.co.uk/kb/Transfer-Syntax
image.png
image.pngmatlab中 dicomwrite()函数支持的压缩格式;lossy为有损压缩,lossless为无损压缩。
matlab代码:实现功能:读取不同序列的dicom文件,并重新按照无损的方式保存(保留原来dicom元数据信息--很关键)
1.读取原始dicom影像(编码格式:JPEG Extended(Process 2&4)[1.2.840.1008.1.2.4.51])matlab2014 2016 dicomread()函数无法读取
2.用matlab 2018b (or更高版本)读取,再重新存储成dicom文件(编码格式:JPEG 2000 Image Compression[1.2.840.10008.1.2.4.91])
3.可以直接覆盖原始dicom文件 无损压缩的文件较大
clear;
clc;
loadpath = 'G:\DCE+T2+ADC\00326101\MR\20160405\';
file1=dir(loadpath);
for i=3: length(file1)
series_path=[loadpath,file1(i).name,'\'];
file2 = dir(series_path);%获取当前序列下的所有dicom文件路径
for j =3:length(file2)%遍历每一个dicom文件
source_every_dicom = [series_path,file2(j).name];
try
metadata = dicominfo(source_every_dicom);%头文件信息
source = dicomread(source_every_dicom);
disp(source_every_dicom);
%disp(class(source)); %uint16
%imshow(source,'DisplayRange',[]);
%des = strrep(source_every_dicom,'D:','E:');
%写入Dicom图像 'JPEG2000 lossy'有损压缩 'JPEG2000 lossless'无损压缩
dicomwrite(source,source_every_dicom,metadata,'CompressionMode','JPEG lossless');
catch
delete(source_every_dicom);%删除无法读取的dicom文件(没有像素信息)
fprintf('Ca not read file --->| %s |--->Delete!!!\n',source_every_dicom)
continue
end
end
end
说明:参考或转发本文需注明本文链接,有什么问题请联系小编nick.yu.jd@qq.com
网友评论