当前位置: 首页 > news >正文

图像像素如何排列?是如何存储到diocm里面?读取到内存中是如何存储?

图像像素的排列和存储在DICOM(Digital Imaging and Communications in Medicine,医学数字成像和通信)文件中遵循特定的标准。DICOM 是一种国际标准(ISO 12052),用于处理、存储、打印和传输医学影像信息。

像素排列

在图像中,像素是按照二维网格排列的,每个像素都有一个灰度值或颜色值,表示该位置的亮度或颜色。对于DICOM图像,这个二维网格通常代表一个切片(slice)或者说是三维体积数据的一个二维平面视图。像素从左到右、从上到下依次排列。此外,DICOM 文件可以包含多帧图像,每一帧可以视为独立的二维图像,例如心脏的超声视频中的每一帧。

网格的基本概念

  • 二维矩阵:网格本质上是一个二维矩阵,其中每个元素代表一个像素。这个矩阵的行数和列数定义了图像的宽度和高度。例如,如果一张图像是512x512像素大小,那么它就是由512行和512列组成的网格。

  • 像素位置:每个像素都有其独特的行列坐标,通常从(0, 0)开始,即左上角的第一个像素。随着向右移动,列坐标增加;随着向下移动,行坐标增加。

 

存储到DICOM文件

在DICOM文件中,图像数据被组织为一系列属性(Attribute),这些属性包括但不限于:

  • 患者信息:如姓名、ID等。
  • 研究信息:如研究日期、描述等。
  • 序列信息:如序列名称、参数等。
  • 图像信息:如尺寸、分辨率、像素间距、位深等。
  • 像素数据:这是实际的图像数据,通常以压缩或未压缩的格式存在。

像素数据存储的具体方式取决于几个因素:

  • Bits Stored (位存储):定义了每个像素用多少位来表示。比如8位意味着每个像素有256个可能的灰度值。
  • Pixel Representation (像素表示):确定像素是以无符号整数还是有符号整数形式存储。
  • Photometric Interpretation (光度解释):指定了如何解释像素值,例如单色、RGB等。
  • Planar Configuration (平面配置):对于彩色图像,指定了颜色分量是如何排列的。
  • Compression (压缩):一些DICOM文件使用压缩算法(如JPEG、JPEG-LS、JPEG 2000、RLE等)来减少文件大小。

在DICOM中的实现

  • Rows 和 Columns:在DICOM元数据中,图像的高度(行数)和宽度(列数)分别由RowsColumns属性指定。这两个值共同确定了图像的分辨率以及网格的尺寸。

  • Pixel Spacing:另一个重要的属性是Pixel Spacing,它表示相邻像素之间的物理距离,通常以毫米为单位给出两个值,分别是水平方向和垂直方向上的间距。这有助于准确地解释图像的空间尺度。

  • 多帧图像:对于包含多个相关图像的数据集(如心脏CT扫描的时间序列),每个时间点的图像都构成了一个独立的二维网格。这些网格被串联起来形成一个多维数组,称为多帧图像。

存储方式

  • 光栅顺序:尽管逻辑上像素是以二维网格的形式组织的,但在实际存储时,它们通常按照光栅顺序(raster order)线性化存储,即先存储第一行的所有像素,然后是第二行,依此类推,直到最后一行。对于彩色图像或多通道图像,每个像素的颜色分量也会连续存储。

  • 压缩与编码:为了节省空间并提高传输效率,像素数据可能会被压缩。DICOM支持多种压缩算法,如JPEG、JPEG 2000等。压缩后的数据仍然遵循光栅顺序,但具体的编码方式会影响解码过程中的数据重组。

元数据的重要性

  • 完整描述:除了像素数据本身外,DICOM文件还包含了大量元数据,用于描述图像的各个方面,包括但不限于患者的个人信息、成像设备的技术参数、图像处理的历史记录等。这些信息对于正确解释和使用图像至关重要。

当图像数据被写入DICOM文件时,它会根据上述属性进行编码,并且通常会被打包成一个字节流。如果使用了压缩,那么解码者需要知道并能够执行相应的解压缩算法来恢复原始图像数据。

DICOM文件的结构是一个标签-长度-值(Tag-Length-Value, TLV)格式的序列,其中每个元素都有一个唯一的标签标识它的类型,一个长度指定它的大小,以及一个值域存放实际的数据。像素数据本身通常是文件中最大的一部分,因为它包含了所有构成图像的原始数据。

 

对于单帧图像

  • 灰度图像:像素数据会按行存储,每行的所有像素依次排列。
  • RGB图像:对于彩色图像,每个像素的颜色分量可能会以交错的方式存储,例如 R1 G1 B1 R2 G2 B2 ... 或者以平面分离的方式存储,即所有红色分量之后跟着所有绿色分量,最后是所有蓝色分量。

对于多帧图像(如CT或MRI序列),每一帧图像的数据都按照上述规则进行组织,并且这些帧也会按照特定顺序(通常是时间或空间顺序)存储在DICOM文件中。

此外,DICOM标准还支持压缩格式,如JPEG、JPEG 2000等,这可能会影响像素数据的实际存储方式。压缩后的图像数据将根据所选压缩算法的要求进行编码。

 

读取到内存中是如何存储

无论是灰度图像还是RGB图像,当它们被读取到内存中时,通常也是以线性结构存储的。这是因为计算机内存本质上是一维的地址空间,所有数据都是按照线性顺序存储在内存中的。

然而,在程序中处理这些图像时,开发者通常会使用二维数组(对于灰度图像)或三维数组(对于RGB图像)来表示图像数据,以便更直观地映射到图像的行和列结构。这种抽象使得图像处理操作(如遍历像素、应用滤镜等)更加方便和高效。

具体来说:

  • 灰度图像:在内存中可能以一个一维数组的形式存在,但程序中常常用一个二维数组image[x][y]来访问像素值,其中x是列索引,y是行索引。每个元素代表一个像素的亮度值。

  • RGB图像:同样地,在内存中可能是线性排列的一维数组,但在程序中可能会用一个三维数组image[x][y][c]来表示,其中x是列索引,y是行索引,c是颜色通道索引(0=红色, 1=绿色, 2=蓝色)。这样可以方便地访问每个像素的颜色分量。

许多编程语言和库提供了专门的数据结构来处理图像,例如Python的NumPy库,它允许你将图像数据存储在一个多维数组(ndarray)中,这个数组内部是以线性方式存储的,但是对外提供了一个多维接口来简化图像处理任务。

此外,一些高效的图像处理库(如OpenCV)可能采用特定的优化策略来组织图像数据,例如通过调整颜色通道的顺序(如BGR而不是RGB),或者通过缓存和预取机制来提高性能,但底层数据依然是线性存储的。

总结来说,虽然图像数据在线性内存中是连续存储的,但为了便于处理,编程接口通常会提供一种多维视图来访问这些数据。

图像的像素在内存中的存储方式_图像在内存中的存储方式-CSDN博客文章浏览阅读730次,点赞5次,收藏5次。图像的像素在内存中的存储方式_图像在内存中的存储方式https://blog.csdn.net/wangnaisheng/article/details/140178059

 

相关文章:

图像像素如何排列?是如何存储到diocm里面?读取到内存中是如何存储?

图像像素的排列和存储在DICOM(Digital Imaging and Communications in Medicine,医学数字成像和通信)文件中遵循特定的标准。DICOM 是一种国际标准(ISO 12052),用于处理、存储、打印和传输医学影像信息。 …...

HDR视频技术之七:逆色调映射

HDR 技术近年来发展迅猛,在未来将会成为图像与视频领域的主流。当前 HDR 内容非常短缺,限制了 HDR 视听节目的广泛应用。逆色调映射(Inverse Tone Mapping)应运而生,它是一种用来将 SDR 源信号转换为 HDR 源信号的技术,可以应用于…...

12.10深度学习_经典神经网络_GoogleNet自我理解

为了更清晰地展示 GoogLeNet 中每个卷积层及其相关参数,我们可以将这些信息整理成表格形式。这不仅有助于理解每一层的输入和输出尺寸,还能直观地看到卷积核的数量、大小、步长以及填充方式等关键参数。以下是 GoogLeNet 前几层(包括两个卷积…...

漫谈 Vercel Serverless 函数

我们需要明白什么是 Serverless。顾名思义,Serverless 并不是没有服务器,而是 “不需要你管理服务器”。就像你去超市买东西,不用自己去种菜、养鸡,直接挑选、付款就好。Vercel 的 Serverless 函数也是类似的,它帮你自…...

Nacos系列:Nacos 控制台手册

引言 Nacos是阿里巴巴中间件部门开源的一款用于服务发现和配置管理的产品,Nacos 控制台主要旨在于增强对于服务列表、健康状态管理、服务治理、分布式配置管理等方面的管控能力,以便进一步帮助用户降低管理微服务应用架构的成本。 一、访问 Nacos 控制台…...

react-dnd 拖拽事件与输入框的文本选中冲突

问题描述 当我们使用拖拽库的时候,往往会遇到拖拽的一个元素他的子孙元素有输入框类型的dom节点,当拖拽的事件绑定在该元素身上时候,发现子孙的输入框不能进行文本选中了,会按住鼠标去选中文本的时候会触发拖拽 实际的效果&…...

LeetCode:150. 逆波兰表达式求值

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:150. 逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表…...

python中向量指的是什么意思

一、向量是什么 在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度&am…...

7.Vue------$refs与$el详解 ------vue知识积累

$refs 与 $el是什么? 作用是什么? ref,$refs,$el ,三者之间的关系是什么? ref (给元素或者子组件注册引用信息) 就像你要给元素设置样式,就需要先给元素设定一个 class 一样,同理,…...

一个很好的直接网站操作的回测框架

1 网址 https://cn.tradingview.com/...

【电子元器件】贴片电阻的故障现象、故障原理和解决方法

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、故障现象概要 贴片电阻与其他电子元器件相比,虽然属于比较不容易引发故障的零部件,但是在过载或…...

基于Spring Boot + Vue的摄影师分享交流社区的设计与实现

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…...

SpringBoot项目监听端口接受数据(Netty版)

文章目录 前言服务端相关配置核心代码 客户端 前言 前言 环境: JDK:64位 Jdk1.8 SpringBoot:2.1.7.RELEASE Netty:4.1.39.Final 功能: 使用Netty监听端口接受客户端的数据,并发送数据给客户端。 服务端 …...

超标量处理器设计笔记(9) 重命名映射表、超标量处理器重命名中相关性问题

寄存器重命名 重命名映射表基于 SRAM 的重命名映射表 超标量处理器的寄存器重命名解决 RAW 相关性解决 WAW 相关性对写 RAT 进行检查(判断哪个 ARF 写入到 RAT)对写 ROB 进行检查(判断) 特殊指令处理方式 重命名映射表 重命名时…...

如何使用 Python 写入文本文件 ?

在Python编程中,写入文本文件是一项基本且重要的操作。 无论是生成日志文件、配置文件,还是进行数据输出,都需要用到这一技能。 下面,我将详细介绍如何使用Python写入文本文件,并提供一些实际开发中的建议和注意事项…...

07篇(附)--仿射变换矩阵

此篇献给某些 头铁 的小只因们,认真钻研下面的数学式吧 原理示例 首先我们以最简单的一个点的旋转为例子,且以最简单的情况举例,令旋转中心为坐标系中心O(0,0),假设有一点P0(x0,y0)&#xff0…...

KubeSphere搭建单节点RocketMQ

前提环境: Docker环境 Harbor仓库(可选) 参考官方文档: 《Docker 部署 RocketMQ》 https://rocketmq.apache.org/zh/docs/quickStart/02quickstartWithDocker参考官方文档: 《RocketMQ Dashboard》 https://rocketmq.apache.org/zh/docs/deploymentOperations/04Dashboard/ 声…...

深度学习中损失函数(loss function)介绍

深度学习中损失函数(loss function)介绍 ​ 在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…...

Vue3+Node中使用webrtc推流至mediamtx

前言 项目的 Web 端是 Vue3 框架,后端是 GO 框架。需要实现将客户端的本地摄像头媒体流推送至服务端,而我自己从未有媒体流相关经验,最初 leader 让我尝试通过 RTSP 协议推拉流,我的思路就局限在了 RTSP 方向。 最初使用的服务端…...

React 内置的Hook学习

useState:管理组件状态 useState 是一个用于在函数组件中添加状态的 Hook。它允许你在函数组件中声明一个状态变量,并提供一个更新该状态的方法,其中与组件生命周期的关系: 初始化:当组件首次渲染时,useS…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景: 1、常规某个机器被钓鱼后门攻击后,我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后,我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解

文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...

Git 命令全流程总结

以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...

构建Docker镜像的Dockerfile文件详解

文章目录 前言Dockerfile 案例docker build1. 基本构建2. 指定 Dockerfile 路径3. 设置构建时变量4. 不使用缓存5. 删除中间容器6. 拉取最新基础镜像7. 静默输出完整示例 docker runDockerFile 入门syntax指定构造器FROM基础镜像RUN命令注释COPY复制ENV设置环境变量EXPOSE暴露端…...