美文网首页
matlab错误使用dicom>newDicomread(lin

matlab错误使用dicom>newDicomread(lin

作者: Nick是老外 | 来源:发表于2020-10-18 20:52 被阅读0次

    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

    相关文章

      网友评论

          本文标题:matlab错误使用dicom>newDicomread(lin

          本文链接:https://www.haomeiwen.com/subject/guzcmktx.html