matlab错误使用dicom>newDicomread(lin

2020-10-18  本文已影响0人  Nick是老外

matlab错误使用dicom>newDicomread(line210) Unsupported data encoding

最近用matlab2014a处理医学影像数据,在用dicomread()读取dicom文件出现错误;报错显示Unsupported data encoding--不支持编码格式,初步判断可能是dicom文件压缩格式的问题。
image.png

在网上查找相关问题答案始终没有解决,最后在同门师兄提醒:可能是matlab版本的问题;于是用matlab2018b来进行处理,不再报错,问题解决!!!谢谢师兄指导

未完待续(2021.9更)...

DICOM 传输语法的平台兼容性 https://www.cnblogs.com/h2zZhou/p/8193779.html

关于DICOM 传输语法详细介绍,传输语法是 DICOM 中用来描述 DICOM 文件格式和网络传输方法的语言。 传输语法中包含 3 个主要变量,其中一个就是像素数据压缩。

https://www.medicalconnections.co.uk/kb/Transfer-Syntax

image.png
image.png

matlab中 dicomwrite()函数支持的压缩格式;lossy为有损压缩,lossless为无损压缩。

image.png
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
上一篇下一篇

猜你喜欢

热点阅读