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

作者:翟天保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, '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,也可能是我没配置好,如果有问题烦请指出。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【力扣hot100】207 课程表(c++、python)解析

相关题目: 210 课程表2 【力扣hot100】207 课程表(c++、python)解析 1.官方题解:1.1深搜c++版本python版本1.2广搜c++1.官方题解: 这是一题经典的「拓扑排序」问题 给定一个包含 n 个节点的有向图 G,我们给出它的节点编号的一种排列,如果满足:对于图 G 中的任意一条…

PTA引水入城

在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个 N 行 M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 为了使居民…

如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试

文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段,应用服务通常是部署在开发环境,在有数据回调的开发场…

百度百科词条创建流程是怎样的?

百度百科词条,作为当今权威的知识分享平台之一,越来越多的个人和企业希望自己在百度百科上拥有独立的词条。如何创建一个高质量的百度百科词条呢?本文伯乐网络传媒将为您详细解析百度百科词条的创建流程及编辑技巧,并提供一些常见…

【YOLOv5改进系列(4)】高效涨点----添加可变形卷积DCNv2

可变形卷积 🚀🚀🚀前言一、1️⃣ 什么是可变形卷积二、2️⃣如何在yolov5中添加DCNv2模块2.1 🎓 修改common.py模块2.2 ✨修改yolo.py文件2.3 ⭐️修改yolov5s.yaml文件2.4 🎯训练可能报错结果 三、3️⃣DCNv2实验结果…

【好书推荐3】Python网络爬虫入门到实战

【好书推荐3】Python网络爬虫入门到实战 写在最前面内容简介作者简介目录前言/序言 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能&#xff…

关于《海岛奇兵》中n点能量可造成最大伤害的计算

最近在玩海岛奇兵, 里面有 武器A, 第n次使用消耗(10 6 * (n - 1))点能量并造成18315伤害; 武器B, 第n次使用消耗 (3 2 * (n - 1))点能量并造成8124伤害, 就想着能不能写一个程序计算一下, 当有x点能量时, 可造成的最大伤害是多少? 分别使用AB武器各多少次? 讨论: https://…

《仙剑7》登陆Xbox主机平台年末大作空窗期

首发一年后,《仙剑奇侠传7》终于登陆Xbox主机平台,而这也恰逢Xbox平台年末大作的窗口期。 随着年底大作的稀缺,以及海外3A RPG《星空》的延期,2022年底的这段时间给Xbox玩家体验《刀剑7》留下了一段空白。 可以说是因祸得福。 《仙…

微服务的可观测性

微服务是是一个大型的分布式系统,服务之间相互依赖支撑系统功能。同时对微服务系统的监控也是微服务体系的重要组成分。对微服务系统的监控主要分为三大部分,Trace追踪,Metrics指标,Log日志。 这三大部分几乎记录了微服务的前部信…

Stable Diffusion之核心基础知识和网络结构解析

Stable Diffusion核心基础知识和网络结构解析 一. Stable Diffusion核心基础知识1.1 Stable Diffusion模型工作流程1. 文生图(txt2img)2. 图生图3. 图像优化模块 1.2 Stable Diffusion模型核心基础原理1. 扩散模型的基本原理2. 前向扩散过程详解3. 反向扩散过程详解4. 引入Late…

【linux】进程地址空间(进程三)

目录 快速了解:引入最基本的理解:细节:如何理解地址空间:a.什么是划分区域:b.地址空间的理解: 为什么要有进程空间?进一步理解页表与写时拷贝: 快速了解: 先来看这样一段…

算法系列--两个数组的dp问题(1)

💕"低头要有勇气,抬头要有底气。"💕 作者:Mylvzi 文章主要内容:算法系列–两个数组的dp问题(1) 大家好,今天为大家带来的是算法系列--两个数组的dp问题(1),两个数组的dp问题在动态规划问题中属于较难的部分…

c++之旅第八弹——多态

大家好啊,这里是c之旅第八弹,跟随我的步伐来开始这一篇的学习吧! 如果有知识性错误,欢迎各位指正!!一起加油!! 创作不易,希望大家多多支持哦! 一&#xff0…

AI研报:从Sora看多模态大模型发展

《从Sora看多模态大模型发展》的研报来自浙商证券,写于2024年2月。 这篇报告主要探讨了多模态大模型的发展趋势,特别是OpenAI发布的视频生成模型Sora,以及其对行业发展的影响。以下是报告的核心内容概述: Sora模型的发布&#x…

【C++航海王:追寻罗杰的编程之路】queue

目录 1 -> queue的介绍和使用 1.1 -> queue的介绍 1.2 -> queue的使用 1.3 -> queue的模拟实现 1 -> queue的介绍和使用 1.1 -> queue的介绍 queue的文档介绍 1. 队列是一种容器适配器,专门用于在FIFO(先进先出)上下文中操作,其…

C语言例4-4:putchar()函数的调用格式和使用的例子

代码如下&#xff1a; //putchar()函数的调用格式和使用的例子 #include<stdio.h> //编译预处理命令&#xff0c;即文件包含命令 int main(void) {char ch1N, ch2E, ch3W;putchar(ch1);putchar(ch2);putchar(ch3); //输出变量c1、c2和c3中的字符putchar(\n);putcha…

Protocol Buffers设计要点

概述 一种开源跨平台的序列化结构化数据的协议。可用于存储数据或在网络上进行数据通信。它提供了用于描述数据结构的接口描述语言&#xff08;IDL&#xff09;&#xff0c;也提供了根据 IDL 产生代码的程序工具。Protocol Buffers的设计目标是简单和性能&#xff0c;所以与 XM…

长安链共识算法切换:动态调整,灵活可变

#功能发布 长安链3.0正式版发布了多个重点功能&#xff0c;包括共识算法切换、支持java智能合约引擎、支持后量子密码、web3生态兼容等。我们接下来为大家详细介绍新功能的设计、应用与规划。 随着长安链应用愈加成熟与广泛&#xff0c;一些在生产中很实用的需求浮出水面。长安…

MySQL进阶-----索引的结构与分类

目录 前言 一、认识索引 二、索引结构 1.概述 2. 二叉树 3 .B-Tree 4.BTree 5.Hash 三、索引的分类 1 .索引分类 2 .聚集索引&二级索引 前言 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维…

基于nginx 动态 URL反向代理的实现

背景&#xff1a; 我们在项目中在这样一个场景&#xff0c;用户需要使用固定的软件资源&#xff0c;这些资源是以服务器或者以容器形式存在的。 资源以webAPI方式在内网向外提供接口&#xff0c;资源分类多种类型&#xff0c;每种类型的资源程序和Wapi参数都一样。这些资源部属…