Matlab-写入mhd和raw医学图像处理格式文件

news2024/12/1 8:57:16

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

mhd和raw是什么?

       MHD(MetaImage)和RAW(Raw Image Data)是用于医学图像处理和分析的常见文件格式之一。

  1. MHD (MetaImage) 文件格式

    • 描述:MHD 文件是一种元数据文件,用于描述与医学图像相关的数据。通常与 RAW 格式文件一起使用,MHD 文件包含有关图像数据的元信息,如图像尺寸、像素类型、数据间隔等。
    • 特点:MHD 文件不存储图像本身的像素数据,而是提供关于数据的描述信息。
    • 元信息:MHD 文件通常包含有关图像的描述信息,例如像素类型(如无符号字节型、有符号字节型、无符号短整型、有符号短整型等)、像素尺寸(如宽度、高度、深度)、数据间隔(指数据在内存中的存储方式)等。
    • 扩展名:通常的 MHD 文件扩展名为 .mhd。
  2. RAW (Raw Image Data) 文件格式

    • 描述:RAW 文件是包含原始像素数据的文件格式,通常不包含任何元信息或者包含极少的元信息。
    • 特点:RAW 文件通常存储医学图像的原始像素数据,这些数据未经过处理或解码。
    • 像素数据:RAW 文件包含图像的原始像素数据,通常以二进制形式存储。这些数据可能是未经过任何压缩或编码的原始数据。
    • 用途:通常需要与 MHD 文件一起使用,通过 MHD 文件提供的元信息,可以解释 RAW 文件中的原始像素数据。
    • 扩展名:RAW 文件可以使用各种扩展名,如 .raw、.bin、.dat 等。

       在医学图像处理中,通常使用 MHD 文件来描述图像的属性和结构,而使用 RAW 文件来存储图像的原始像素数据。这种结合使得图像处理软件能够准确解释图像数据,并进行进一步的处理、分析或可视化。

Matlab代码

% 写入Mhd和Raw文件
function writeMhdAndRaw(filename, data, element_spacing, data_type)
% 创建mhd和raw
mhd = strcat(filename, '.mhd');
raw = strcat(filename, '.raw');
% 写入mhd文件
fid = fopen(mhd, 'w');
assert(fid > 0, 'Open MHD File Error.');
% 类型
fprintf(fid, 'ObjectType = Image\n');
% 维度
fprintf(fid, 'NDims = %d\n', ndims(data));
% 不同维度的尺寸和元素间距
dims = ndims(data);
if(dims == 2)
    fprintf(fid, 'DimSize = %d %d \n', size(data,1), size(data,2));
    fprintf(fid, 'ElementSpacing = %1.4f %1.4f\n', element_spacing(1), element_spacing(2));
elseif(dims == 3)
    fprintf(fid, 'DimSize = %d %d %d\n', size(data,1), size(data,2), size(data,3));
    fprintf(fid, 'ElementSpacing = %1.4f %1.4f %1.4f\n', element_spacing(1), element_spacing(2), element_spacing(3));
elseif(dims == 4)
    fprintf(fid, 'DimSize = %d %d %d %d\n', size(data,1), size(data,2), size(data,3), size(data,4));
    fprintf(fid, 'ElementSpacing = %1.4f %1.4f %1.4f %1.4f\n', element_spacing(1), element_spacing(2), element_spacing(3), element_spacing(4));
end
% 数据类型
if(strcmp(data_type,'char') || strcmp(data_type,'uint8'))
    fprintf(fid, 'ElementType = MET_UCHAR\n');
elseif(strcmp(data_type,'short'))
    fprintf(fid, 'ElementType = MET_SHORT\n');
elseif(strcmp(data_type,'float32'))
    fprintf(fid, 'ElementType = MET_FLOAT\n');
end
% 元素字节顺序
% MSB(又名big-endian)排序在SPARC和摩托罗拉处理器(例如Macintoshes)中很常见。
% LSB(又名little-endian)排序在英特尔处理器(例如PC兼容机)中很常见。
fprintf(fid, 'ElementByteOrderMSB = False\n');
% 设置raw文件
fprintf(fid, 'ElementDataFile = %s\n', raw);
% 关闭mhd
fclose(fid);
% 写入raw文件
fid = fopen(raw, 'w');
assert(fid > 0, 'Open RAW File Error.');
% 写入数据
fwrite(fid, data, data_type);
% 关闭raw
fclose(fid);
end

测试代码

       测试功能就是将test.mat中的图像矩阵A1,保存为mhd和raw格式,并用ImageJ软件加载测试。

% 加载mat文件
load('test.mat'); 
filename = 'test';
image_data = int16(A1); 
element_spacing = [1, 1];
data_type = 'short';
% 调用函数
writeMhdAndRaw(filename, image_data, element_spacing, data_type);

测试数据地址:

链接:https://pan.baidu.com/s/1xkR1lfDrCYoGYsfBXRDMIA 
提取码:p0s6 

测试效果     

源数据:

ImageJ加载保存的mhd文件:

       ImageJ中宽高对应matlab中的行列,所以显示效果是转置的。因为我刚开始用ImageJ,也可能是我没配置好,如果有问题烦请指出。

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1555592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字化坚鹏:小熊电器面向数字化转型的大数据顶层设计实践培训

小熊电器面向数字化转型的大数据顶层设计实践培训圆满结束 ——努力打造“数据技术营销”三轮驱动的数字化领先企业 小熊电器股份有限公司由李一峰创立于2006年,是一家专业从事创意小家电研发、设计、生产和销售的实业型企业。2019年8月23日正式在深交所挂牌上市。…

XUbuntu22.04之Typora快捷键Ctrl+5不生效问题(二百二十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Discourse 最多允许有几个分类级别

和 DISCUZ 不同,DISCUZ 可以允许分类下面还有分类,再继续分类这种嵌套式分类。 Discourse 最多只允许有 2 个分类。 如果你在已有的分类下再继续分类的话,系统会提示错误: 意思就是子分类不能再分子分类。 Discourse 尽量采取了…

Web前端—(原生JS)歌词滚动效果

歌词滚动效果实现 歌词滚动效果HTML部分CSS部分JS部分解析歌词字符串,得到歌词的对象数组计算在当前情况下,播放器播放到第几秒的情况创建歌词元素设置ul元素的偏移量最后对时间变化的事件进行监听完整JS代码 歌词滚动效果 实现效果如图所示&#xff1a…

PyCharm中配置PyQt5并添加外部工具

Qt Designer、PyUIC和PyRcc是Qt框架下的三个重要工具,总的来说,这三个工具各司其职,相辅相成,能显著提升Qt开发的速度与效率。 Qt Designer:是一个用于创建图形用户界面的工具,可轻松构建复杂的用户界面。…

Photoshoot 2(Java)

Photoshoot 2 题目描述 在一个似曾相识的场景中,Farmer John 正在将他的 N 头奶牛(1≤N≤10^5)排成一排(为了方便将它们按 1⋯1⋯N 编号),以便拍照。 最初,奶牛从左到右按照 a1,a2,⋯,aN 的顺…

Facebook轮播广告是什么?投放过程中有哪些需要注意的吗?

轮播广告是Facebook广告形式中的一种,可以把3—5个广告合并到一个可滚动的广告单元中。轮播广告会出现在新鲜事即News Feed中,是独立站卖家常用的一种广告形式 为什么选择轮播广告? 转化率更高:相较于单图广告,轮播广…

2024 ccfcsp认证打卡 2022 06 01 归一化处理

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt(); // 输入数字的个数int[] a new int[1010]; // 创建一个数组来存储输入的数字double sum 0; // 用于计算所有输入数字的总…

Linux基础命令篇:操作系统服务管理(systemctl service)

Linux基础命令篇:操作系统服务管理(systemctl & service) service和systemctl是两个用于管理Linux系统服务的命令。它们分别属于SysV init和systemd系统,这两个系统是Linux中用于初始化和管理服务的不同框架。在许多现代Linux…

四、Yocto创建静态IP和VLAN(基于raspiberrypi 4B)

Yocto创建VLAN配置 在车载域控中很多时候需要创建VLAN,本小节记录如何为yocto构建出来的image自动化创建静态IP以及VLAN。 关于各种VLAN的配置参考:VLAN 1. ubuntu系统中使用netplan创建VLAN 正常情况下我们在ubuntu系统中可以通过netplan来自动化创建…

《数据结构学习笔记---第七篇》---栈和队列的OJ练习

1. 括号匹配问题。OJ链接 step1:思路分析 : 1.括号匹配,我们首先考虑用栈实现,我们通过符号栈帧的思想知道,求前中后缀表达式的时候用的就是栈帧,操作数栈和符号栈。 2.根据常见的情况 考虑怎么使用栈,首先…

【Qt】:信号与槽(二)

信号与槽 一.带参数的信号和槽二.信号与槽的多对多连接三.信号与槽的断开四.lamda表达式定义槽函数 一.带参数的信号和槽 Qt的信号和槽也⽀持带有参数,同时也可以⽀持重载.此处我们要求,信号函数的参数列表要和对应连接的槽函数参数列表⼀致.(一致指的是类型一致&a…

微信小程序【从入门到精通】——服务器的数据交互

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

LoRA 及其衍生技术总览:An Overview of the LoRA Family

编者按: 对于大语言模型的微调训练来说,传统的全参数微调方法需要处理数百万甚至数十亿级别的参数,计算量和显存占用都非常大。而 LoRA 这种技术方案,通过引入少量的可训练矩阵来调整预训练模型的行为,极大降低了训练所…

EasyRecovery2024中文版数据恢复软件功能全面介绍

EasyRecovery2024是世界著名数据恢复公司 Ontrack 的技术杰作,它是一个威力非常强大的硬盘数据恢复工具。能够帮你恢复丢失的数据以及重建文件系统。 EasyRecovery不会向你的原始驱动器写入任何东东,它主要是在内存中重建文件分区表使数据能够安全地传输…

基于DCT(离散余弦变换)的图像水印算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

【LeetCode: 面试题 16.05. 阶乘尾数 + 阶乘】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Android 12.0 mtp模式下连接pc后显示的文件夹禁止删除copy重命名功能实现

1.前言 在12.0的系统rom定制化开发中,usb连接pc端的时候有好几种模式,在做otg连接pc端的时候,改成mtp模式的时候,在pc端可以看到产品设备 的显示的文件夹的内容,对于产品设备里面的文件在pc端禁止做删除重命名拷贝等操作功能的实现 2.mtp模式下连接pc后显示的文件夹禁止删…

深入探讨多线程编程:从0-1为您解释多线程(下)

文章目录 6. 死锁6.1 死锁原因 6.2 避免死锁的方法加锁顺序一致性。超时机制。死锁检测和解除机制。 6. 死锁 6.1 死锁 原因 系统资源的竞争:(产生环路)当系统中供多个进程共享的资源数量不足以满足进程的需要时,会引起进程对2…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于纳什谈判的电氢能源系统多时间尺度协同运行优化》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…