DCM医学影像文件的格式与读取方法分享

CT图像.dcm文件转换成图片格式 dcm文件转换成jpg文件 阅读详情

医学影像DCM是个类似PNG的分块格式,内涵丰富医疗信息,由于应用领域较窄,OpenCV没有提供对其加载支持,一般采用dcmtk库进行加载。

博主本着研究探索的精神写了这段代码,并分享出来,提供了解析DCM的DIB数据、宽高、窗宽窗位、像素间距的功能,支持反色DCM。

将来可以参考spec文档进行扩充,可以在大框架中加入块的处理,从而抽取更多感兴趣的信息,也可以加入压缩DCM的支持。


// 输入:文件名
// 输出:宽高 窗宽窗位 像素间距 dib
unsigned short* dcmLoadImage(char* fn, int& width, int& height, int& windowWidth, int& windowLevel, double& pixelSpacing)
{
	// 读取整个文件到内存
	FILE* f = fopen(fn, "rb");
	fseek(f, 0, SEEK_END);
	int dcmSize = ftell(f);
	fseek(f, 0, SEEK_SET);
	unsigned char* dcm = new unsigned char[dcmSize];
	fread(dcm, dcmSize, 1, f);
	fclose(f);
	
	// 解析
	width = -1;
	height = -1;
	windowWidth = -1;
	windowLevel = -1;
	pixelSpacing = 0.0;
	bool invert = false;
	unsigned short* dib = NULL;
	int dibSize = -1;
	int p = 132;
	while( p<dcmSize )
	{
		short group = *(short*)(dcm+p);
		p+=2;
		short element = *(short*)(dcm+p);
		p+=2;
		//cout<<setfill('0')<<hex<<setw(4)<<group<<","<<setw(4)<<element<<setfill('\0')<<dec<<endl;


		if(group==0x0002)
		{
			if(element==0x0001)// 2,1
			{
				p+=10;
			}
			else// 2,*
			{
				char vr[3];
				vr[0] = dcm[p++];
				vr[1] = dcm[p++];
				vr[2] = '\0';
				short size = *(short*)(dcm+p);
				p+=2;
				p+=size;
			}
		}
		else// *
		{
			int size = *(int*)(dcm+p);
			p+=4;
			if(size==-1)
				size=0;
			if(group==0x0028&&element==0x0010)
				height = *(short*)(dcm+p);
			if(group==0x0028&&element==0x0030)
				pixelSpacing = atof((char*)dcm+p);
			if(group==0x0028&&element==0x0004)
				invert = !strncmp((char*)dcm+p, "MONOCHROME1", 11);
			else if(group==0x0028&&element==0x0011)
				width = *(short*)(dcm+p);
			else if(group==0x0028&&element==0x1050)
				windowLevel = atoi((char*)dcm+p);
			else if(group==0x0028&&element==0x1051)
				windowWidth = atoi((char*)dcm+p);
			else if(group==0x7FE0&&element==0x0010)
			{
				dibSize = size;
				dib = new unsigned short[dibSize];
				memcpy(dib, dcm+p, dibSize);
			}
			p+=size;
		}
	}
	assert(p==dcmSize);
	assert(width!=-1);
	assert(height!=-1);
	assert(windowLevel!=-1);
	assert(windowWidth!=-1);
	assert(dib!=NULL);
	assert(dibSize==width*height*2);
	
	// 反图做修正
	if(invert)
	{
		for(int i=0; i<width*height; i++)
			dib[i] ^= 0xFFFF;
		windowLevel = 65535-windowLevel;
	}
	
	delete[] dcm;
	return dib;
}


void dcmReleaseImage(unsigned short* dib)
{
	delete[] dib;
}


DICOM文件格式剖析(初识) DICOM文件格式剖析(初识) 初识DICOM文件,发现网上的资料有点少,大部分的资料都是一些简单的解析,近期在开发对DICOM文件进行操作的封装类,读取磁盘的数据来分析dcm文件的具体存储格式,在这里总结一下 复杂的DICOM文件 我们知道在操作系统中已经提供了很多的文件格式了,如:。那么为何又提出了DICOM文件(一般文件后缀名是.dcm或.dic) ... 阅读详情

相关推荐

(MATLAB)DICOM序列的读取与数字体模重建

之前写了一些关于医学影像三维重建(可视化)的文章,不少网友对原始数据那一部分提问。所以写此文,分享DICOM序列重建三维数字体模的方法。

HPC_ZY 6764

DCM文件的相关操作

DICOM图像的元数据包含了多个字段,用于描述和标识图像的相关信息。以下是一些常见的规则和建议,用于设置DICOM图像的患者PID、Accession Number和Study UID:pydicom请注意,DICOM标准涵盖了大量的元数据字段和规范,上述规则仅针对特定的字段进行说明。根据实际需求和使用场景,可能还需要考虑其他DICOM元数据字段的设置和处理。

weixin_43999691的博客 1784

医学影像格式转换:DICOM转NIfTI原理与Python实操指南

在医学影像数据处理中,格式标准化是科研与临床落地的首要挑战。DICOM作为医疗设备的标准输出格式,携带完整元数据但结构分散;而NIfTI以紧凑的单文件形式,成为神经影像和深度学习社区的主流分析格式。转换的本质是通过空间方向余弦与仿射矩阵(affine)完成物理坐标的正确映射,从而保证图像方向、体素尺寸和切片顺序不失真。这一过程对基于PyTorch/MONAI的医学图像分割、影像组学特征提取及多中心数据共享至关重要。文章系统对比SimpleITK、pydicom+nibabel、dcm2niix三种工具的实现

weixin_33922672的博客 289

标定数据分析-DCM(.DCM)

欢迎关注《汽车软件技术》公众号,回复关键字获取资料。 1. DCM介绍 DCM(Data Conservation Format)是一种标定数据文件格式,文件后缀是“.dcm”。 DCM在INCA等标定软件中都有包含,比如INCA CDM中: 2. 数据格式 DCM有标准的文档说明(公众号回复“DCM文档“获取)。因为DCM使用了德语关键字,加上稍微复杂的格式,所以可读性不如CVX,但数据完整...

zhyongquan的专栏 1万+

从医疗到工业:一文搞懂DICOM与DICONDE图像格式的异同与转换(附.dcm文件查看工具推荐)

本文深入解析医疗DICOM与工业DICONDE图像格式的核心差异与应用场景,涵盖文件结构、模块对比及CT图像处理技巧。特别推荐实用的.dcm文件查看工具,并提供格式转换代码示例,帮助技术人员实现医疗与工业影像数据的无缝对接。

weixin_30800807的博客 421

SPM12新手避坑指南:DCM转NII格式时,为什么你的MATLAB总卡死?

本文详细解析了SPM12在DCM转NII格式时导致MATLAB卡死的常见原因及解决方案。从内存管理、SPM12默认设置、工作路径优化到并行处理技巧,提供了一套完整的避坑指南,帮助神经影像研究者高效完成数据转换,避免系统崩溃和数据丢失。

weixin_29098117的博客 173

java读取dcm影像文件_DCM医学影像文件的格式与读取方法分享

医学影像DCM是个类似PNG的分块格式,内涵丰富医疗信息,由于应用领域较窄,OpenCV没有提供对其加载支持,一般采用dcmtk库进行加载。博主本着研究探索的精神写了这段代码,并分享出来,提供了解析DCM的DIB数据、宽高、窗宽窗位、像素间距的功能,支持反色DCM。将来可以参考spec文档进行扩充,可以在大框架中加入块的处理,从而抽取更多感兴趣的信息,也可以加入压缩DCM的支持。// 输入:文件名...

weixin_31742871的博客 1239

【医学影像数据处理】 Dicom 文件格式处理汇总二(Python格式转换)

Dicom数据存储格式,是医学领域通用的数据传输形式,本文将围绕dicom与医学算法展开

钱多多先森 9341

医学图像DCM格式文件处理

医学图像中主流格式为DCM文件或者称为DICOM(DigitalImaging andCommunications inMedicine),该格式最令人头痛的是切片众多且命名混乱。众所周知,医学图像(以CT图像为例)多为三维图像,分为横断面、矢状面和冠状面。如图(1)所示,三维格式的图像经常会以横断面分割为多个切片数据(Slice),但是由于命名混乱的原因,不容易理解切片位置。本文旨在分享多个切片重构成一个三维数据的过程,若有错误,欢迎指正。 图1 首先,需要对DCM文件进行简单介绍,令读者有个直观的

tianjinyikedaxue的博客 1万+

医疗系统生成的dcm文件

**DCM文件详解** 在医疗图像领域,DCM(Digital Imaging and Communications in Medicine)文件是一种标准格式,用于存储、传输和打印医学影像数据。DCM文件由DICOM(Digital Imaging and Communications in Medicine)协议定义,这是一个国际标准,旨在促进医疗成像设备之间的互操作性。该标准不仅包含了图像数据,还包括患者信息、扫描参数、临床注释等多种医疗相关信息。 **DICOM协议的核心特点:** 1. **元数据集成**:DICOM文件不仅包含图像数据,还包含有关图像生成的元数据,如患者基本信息、检查日期、扫描序列等。 2. **多模态支持**:支持多种医学成像技术,如X射线、CT、MRI、超声等。 3. **压缩算法**:支持多种图像压缩算法,如JPEG、RLE(Run-Length Encoding)和JPEG 2000,以优化存储和传输效率。 4. **网络通信**:定义了网络传输协议,使得不同设备间能共享和交换图像信息。 5. **安全性**:提供安全机制,如SSL/TLS加密,确保数据传输的安全。 **DCM文件结构:** DCM文件分为三个主要部分: 1. **文件头(Header)**:包含DICOM元数据,以字典形式存储,每个元素都有一个唯一的标识符(Tag)。 2. **像素数据(Pixel Data)**:存储实际的图像像素值,可以是未压缩的原始数据,也可以是经过压缩编码的数据。 3. **文件尾(Footer)**:通常较小,用来验证文件完整性。 **多帧与单帧DCM文件的区别:** - **单帧DCM文件**:通常代表一次成像操作产生的单一图像,例如一张CT切片或一张超声图像。它仅包含一次扫描得到的数据。 - **多帧DCM文件**:适用于连续动态成像,如心电图(ECG)同步的心脏MRI序列或连续的X射线序列。多帧DCM文件将多个时间点的图像组合在一个文件中,便于查看和分析。 **应用和处理DCM文件:** 1. **医学影像软件**:专业医学影像查看软件如OsiriX、DICOM Viewer等,能够打开并解析DCM文件,展示图像并提供测量、标注等功能。 2. **数据分析**:科研人员使用DCM文件进行医学研究,比如通过图像处理算法分析肿瘤生长或病灶检测。 3. **数据交换**:医院信息系统(HIS)和放射信息系统(RIS)利用DICOM协议接收和发送DCM文件,实现影像数据的共享。 4. **云存储**:云服务如Google Cloud Healthcare API和AWS HealthLake支持 DICOM 格式的医疗影像数据存储和分析。 了解并掌握DCM文件和DICOM协议对于医疗影像领域的专业人士至关重要,它能确保在不同设备和系统间无缝地处理和分析医学图像,从而提高诊疗质量和效率。

数字孪生在智慧医疗中的5个创新应用:从手术模拟到个性化治疗

数字孪生技术通过创建患者或医疗流程的动态虚拟映射,正在深刻变革智慧医疗。本文重点剖析了其在个性化治疗、手术模拟与导航、药物研发、医院管理优化及慢性病管理五大核心场景的创新应用,展现了如何利用智能映射与数据融合,为精准医疗和高效决策提供强大支持。

weixin_29189003的博客 444

如何用手机打开dcm格式图片_实现原始Dicom自动转换BIDS格式 ——Heudiconv

Python神经影像社区日趋完善,Linux shell搭配Python的神经影像工具开发方式越来越受追捧,催生出fMRIPrep、fMRIDenoise、Nipype、Nilearn、PyMVPA等优秀的toolbox,今天给大家介绍一个前期准备数据,自动整理BIDS格式的软件基于Linux及MacOS的Heudiconv是一款很方便的dicom转nifti格式的工具,不同于dcm2nii等传统...

weixin_35729243的博客 4899

WorkBench3.2 + VxWorks6.8安装教程

按照FTP连接主机和目标机,将整个VxWorks6.8的安装分为两个部分,一是在主机(win10系统,可以使用虚拟机或者实体机,推荐使用虚拟机)上安装workbench3.2,进行bootrom与VxWroks映像文件的生成,二是在虚拟机上安装VxWorks系统 19.10.10 首先很高兴文章能帮到大家,但由于本人已不做该方向良久,私信和评论的很多问题现在已经无法解答,如果大家有什么问题欢迎...

Alive的博客 3万+

python输出jpg_利用python实现.dcm格式图像转为.jpg格式

如下所示:import pydicomimport matplotlib.pyplot as pltimport scipy.miscimport pandas as pdimport numpy as npimport osdef Dcm2jpg(file_path):#获取所有图片名称c = []names = os.listdir(file_path) #路径#将文件夹中的文件名称与后边的 ...

weixin_39548832的博客 538

VC Spyglass CDC实战:如何快速定位和解决重汇聚问题(附详细调试步骤)

本文深入探讨了在SoC设计中利用VC Spyglass进行CDC验证时,如何高效定位和解决棘手的重汇聚问题。通过实战演练,详细解析了重汇聚的本质、VC Spyglass的检测逻辑,并提供了从报告筛选、GUI原理图分析到制定设计修复或约束豁免方案的全套调试步骤,帮助工程师快速攻克这一常见验证难题。

weixin_29219539的博客 755

Dify插件实战:实时渲染AI生成的HTML/SVG/Canvas代码

在现代Web开发与AI应用集成中,前端渲染技术是实现动态内容展示的核心。其原理在于浏览器引擎解析HTML、CSS、JavaScript等代码,并将其转换为可视化的用户界面。这项技术的价值在于极大提升了开发效率与用户体验,允许开发者快速构建和迭代交互式应用。在AI应用开发领域,尤其是大语言模型(LLM)集成场景,如何将模型生成的**结构化代码**(如描述UI的HTML或数据图表的SVG)实时转化为可视化组件,成为一个关键需求。这直接关系到**Dify**等低代码AI平台能否提供流畅的、所见即所得的交互体验。本

weixin_42545664的博客 499

医学影像数据格式解析:从DICOM到NIfTI的转换与应用

本文深入解析了医学影像分析中DICOM与NIfTI两大核心数据格式的差异与应用。DICOM作为临床标准,包含丰富的患者与设备信息;而NIfTI则为算法研究设计,结构精简、空间信息明确。文章重点阐述了从DICOM到NIfTI转换的必要性、核心原理、实战流程(使用dcm2niix等工具)及关键验证步骤,旨在帮助研究者和开发者高效处理数据,为后续的AI模型训练与多中心研究奠定坚实基础。

weixin_29103191的博客 368

高德地图JS API私有化部署实战:从数据爬取到内网集成

本文详细介绍了高德地图JS API私有化部署的完整流程,涵盖从地图瓦片数据爬取、JS API离线化改造到内网项目集成的实战步骤。重点解决了在封闭内网环境中实现地图功能的核心难题,并提供了Vue.js项目中的具体集成代码与调试技巧,帮助开发者在离线环境下构建稳定可靠的地图应用。

weixin_29062255的博客 319

Filee 自研 APNG 与 DICOM 读取器:为文件转换手写两个图像格式解析器

Filee 是一款免费、开源的**离线文件转换器**,支持 180+ 格式互转。这篇文章的主角是它引擎中两个"非比寻常"的组件:[Apng.cs](https://link.gitcode.com/i/c3b08560aee61c74e907fe536e2991d7) 实现的 **APNG 读取器/写入器**,和 [Dicom.cs](https://link.gitcode.com/i/2c16

gitblog_00032的博客 816

Canoe Panel基础功能介绍

CANoe Panel 是 Vector CANoe 软件中用于设计图形化操作界面的功能模块。用户可以在面板上添加合适的控件,实时的改变信号或者变量的值

m0_56208280的博客 1951

上证指数30年k线图_金融占星简单解读上证指数30年历史行情

阅读此文需要一定的占星基础知识,本人对于金融知识了解甚少,如有描述错误请包涵指正!影响大众事件发展趋势的都是外行星,即木星-冥王星这5颗,由于时间跨度长达30年,绘制社会行星的K线图工作量太大,所以只以时代行星对这30年行情的简单解读作为分享,在今后的短期分析中会逐渐加入社会行星,甚至在个股分析上还会加入个人行星。那即使只绘制时代行星,所展现出来的信息也无法在一张图上画出来,否则太乱难以分辨,所以...

weixin_39831242的博客 1675

python医学图像处理之读取DICOM文件信息

python:读取DICOM文件信息

Cherry330的博客 7160

OTFS 消息传递算法信号检测【附matlab代码详解】

OTFS 消息传递算法方面的一些浅浅理解。

Cuby的博客 4013

用python批量把DICOM(dcm)转换成jpg图像

用python把DICOM(dcm)转换成jpg图像 直接上代码 import os import pydicom #用于读取DICOM(DCOM)文件 import argparse # import scipy.misc #用imageio替代 import imageio if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--origin', typ

you2336的博客 6608

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: QQMail Hack——QQ超大附件(中转站)的安全问题
anders0821
博客等级 码龄21年 48粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值