【C#】获取DICOM图像像素的像素值

8位像素深度的像素值

public byte GetGreyValue(int x, int y)
{x = Math.Min(x, m_nWidth - 1);y = Math.Min(y, m_nHeight - 1);unsafe{byte* greyValue = (byte*)m_pDicomData.ToPointer() + y * m_nWidth + x;return *greyValue;}
}

16位像素深度的像素值

public ushort GetGreyValue(int x, int y)
{x = Math.Min(x, m_nWidth - 1);y = Math.Min(y, m_nHeight - 1);unsafe{ushort* greyValue = (ushort*)m_pDicomData.ToPointer() + y * m_nWidth + x;return *greyValue;}
}

RGB(3通道)类型的像素值

public Tuple<byte, byte, byte> GetRGBValue(int x, int y)
{x = Math.Min(x, m_nWidth - 1);y = Math.Min(y, m_nHeight - 1);unsafe{byte* pixelData = (byte*)m_pDicomData.ToPointer() + y * m_nWidth * 3 + x * 3;byte r = pixelData[0]; // Red componentbyte g = pixelData[1]; // Green componentbyte b = pixelData[2]; // Blue componentreturn Tuple.Create(r, g, b);}
}

 在这个例子中,我们假设像素数据是按R-G-B顺序存储的,并且每个分量都是8位的。m_pOutData 应该指向图像数据的起始位置,m_nWidth 是图像的宽度,因为我们每次读取像素时需要跳过3个字节(R、G、B)。

然而,实际情况可能会有所不同,因为DICOM标准允许不同的像素表示方式,包括像素深度、字节序以及颜色分量的排列。例如,一些DICOM图像可能使用16位RGB,这意味着每个颜色分量占用16位,或者可能是B-G-R顺序。

为了正确处理DICOM图像的RGB数据,你需要考虑以下几点:

  1. 像素表示:确定每个颜色分量的位数和图像的总位数。
  2. 字节序:确认数据是大端还是小端存储。
  3. 颜色分量顺序:确认R、G、B分量的存储顺序。
  4. DICOM元数据:利用DICOM文件中的元数据来确定上述信息,这些信息可以在DICOM标签中找到。

通常,使用一个DICOM库(如DcmQRScu、DCMTK、GDAL或Dcm4che)来解析DICOM文件并处理像素数据是最简单和最可靠的方式。这些库能够自动处理上述所有细节,让你可以直接访问图像数据而无需手动编写复杂的低级代码。

ushort和byte的区别 

ushortbyte 都是 C# 中的基本数值类型,但它们在大小、范围和用途上有所不同。

byte

byte 类型是一个无符号的整数类型,它占用 1 个字节(8 位)。这意味着它可以存储从 0 到 255 的整数值。byte 类型经常用于以下场景:

  • 存储小范围的非负整数。
  • 处理单个字符或 ASCII 编码。
  • 存储图像的像素值,尤其是在 8 位灰度或颜色图像中。
  • 网络编程中,处理二进制数据或网络协议数据单元(PDU)。

ushort

ushort 类型也是一个无符号的整数类型,但它占用 2 个字节(16 位)。它可以存储从 0 到 65535 的整数值。ushort 类型适用于:

  • 存储更大的非负整数值,比 byte 提供了更大的范围。
  • 在音频样本、16 位图像数据或需要更大动态范围的应用中存储数据。
  • 用于标识或索引,尤其是当 byte 的范围不足以覆盖所有可能的值时。

总结

  • 大小byte 占用 1 字节(8 位),ushort 占用 2 字节(16 位)。
  • 范围byte 范围是 0 至 255,ushort 范围是 0 至 65535。
  • 用途byte 更适合存储小范围的非负整数,而 ushort 适合存储较大的非负整数。

在选择使用哪种类型时,应考虑到所需值的范围以及存储效率。如果值永远不会超过 255,使用 byte 可能更节省内存;如果值可能达到几千或几万,使用 ushort 更合适。在处理图像和声音数据时,这一点尤其重要,因为这些数据通常以特定的位深度(如 8 位或 16 位)编码。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Javascript】前端面试基础3【每日学习并更新10】

Web开发中会话跟踪的方法有那些 cookiesessionurl重写隐藏inputip地址 JS基本数据类型 String&#xff1a;用于表示文本数据。Number&#xff1a;用于表示数值&#xff0c;包括整数和浮点数。BigInt&#xff1a;用于表示任意精度的整数。Boolean&#xff1a;用于表示逻辑值…

认证授权概述和SpringSecurity安全框架快速入门

1. 认证授权的概述 1.1 什么是认证 进入移动互联网时代&#xff0c;大家每天都在刷手机&#xff0c;常用的软件有微信、支付宝、头条、抖音等 以微信为例说明认证的相关基本概念。在初次使用微信前需要注册成为微信用户&#xff0c;然后输入账号和密码即可登录微信&#xff0c…

git 推送时出现错误 Locking support detected on remote “origin“

背景&#xff1a;代码托管是局域网搭建的gitlab 按照提示配置 lfs.locksverify true 还是没有用。 网上搜索了一番&#xff0c;其中有人提到可能时服务器磁盘满了&#xff0c;连到服务器上 df -h 查看&#xff0c; 发现根目录已经写满了&#xff1a; 使用命令行&#xff1a; d…

scipy.fft.fft函数与scipy.fft.rfft函数的异同

import numpy as np from scipy import signal import matplotlib.pyplot as plt思路&#xff1a;1&#xff09;先利用fft计算得出其幅频值2&#xff09;在利用rfft计算得出其幅频值&#xff0c;看1&#xff09;和2&#xff09;那个能还原出信号的原始幅值# 生成一个示例信号 n…

c#实际开发长到的知识

基础科普: 个人建议先把rotion的库导入进来再操作,具体需要导入的库有,helper库包含了modbus通讯封装好的模块,而mvvm则可以用来做设计mvvm模块,你可以使用里面封装好的实现方法,用起来特别简单更容易实现其中的操作,但是我担心那天被卡脖子了啊啊啊,要是我罗工把库下…

【CTFHub】文件上传漏洞详解!

Webshell&#xff1a; 又称一句话木马。WebShell就是以网页文件形式存在的一种代码执行环境&#xff0c;主要用于网站管理、服务器管理、权限管理等操作。 WebShell根据不同的语言分为:ASP木马、PHP木马、JSP木马(上传解析类型取决于网站服务端编写语言类)&#xff0c;该类木马…

(二)延时任务篇——通过redis的key监听,实现延迟任务实战

前言 本节内容是关于使用redis的过期key&#xff0c;通过开启其监听失效策略&#xff0c;模拟订单延迟任务的执行流程。其核心原理是通过使用redis订阅与发布的方式&#xff0c;将过期失效的key通过广播的方式&#xff0c;发布给客户端&#xff0c;客户端可以监听此消息进而消…

LNMP动态网站环境部署

1、LINUX部署 stop firewallddisable selinux 2、Nginx部署 ​ vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.…

【前端 · 面试 】JavaScript 之你不一定会的基础题(一)

最近我在做前端面试题总结系列&#xff0c;感兴趣的朋友可以添加关注&#xff0c;欢迎指正、交流。 争取每个知识点能够多总结一些&#xff0c;至少要做到在面试时&#xff0c;针对每个知识点都可以侃起来&#xff0c;不至于哑火。 JavaScript 之你不一定会的基础题 前言 面试往…

Windows蓝屏问题解决(电脑只要安装了VPN_SV独立客户端)必蓝屏

一、SERNEL_SECURITY_CHECK_FAILURE (139) 蓝屏分析 官方介绍蓝屏现象&#xff0c;官方Windows为了保护电脑&#xff0c;出现故障&#xff0c;自动蓝屏&#xff0c;避免损坏电脑的一种现象&#xff0c;别名buckcheck、蓝屏。 100%复现软件&#xff1a;天融信VPN&#xff0c;同事…

为了方便写CURD代码,我在UTools写了个插件SqlConvert来生成代码!

-1. 前言 为了方便摸鱼&#xff0c;我之前写过一个通过sql生成代码的工具&#xff0c;但是服务器到期了&#xff0c;也就懒得重新部署了。 技术框架是 SpringBoot MybatisPlus Velocity Vue ElementUI Sql-ParseeSql-Parser-ui 0. Utools应用安装 官网地址: https://u.too…

【HZHY-AI300G智能盒试用连载体验】使用YOLOv8进行车辆流量监测

目录 YOLOv8的RKNN模型 程序的部署 流量统计 本文首发于电子发烧友论坛&#xff1a;【新提醒】【HZHY-AI300G智能盒试用连载体验】 智能工业互联网网关 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 环境准备好之后&#xff0c;接…

福建聚鼎:现在装饰画好做吗

在当今社会&#xff0c;随着人们审美情趣的提升和生活品质的改善&#xff0c;家居装饰画已经成为了一种流行的墙面装饰方式。许多人都在思考&#xff0c;现在做装饰画是否是一个好时机? “逆水行舟&#xff0c;不进则退。”在日新月异的市场中&#xff0c;装饰画行业的竞争愈发…

商用密码测评之对HTTPS(TLS)协议中各个参数解释

1、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 是一个广泛使用的TLS&#xff08;传输层安全协议&#xff09;加密套件&#xff0c;它结合了多种技术和算法来确保网络通信的安全。下面是对该加密套件中各个参数的详细解释&#xff1a; 1. TLS 定义&#xff1a;TLS&#xff08;传…

JMeter 使用

1.JMeter 是什么&#xff1f; JMeter 是一款广泛使用的开源性能测试工具&#xff0c;由 Apache 软件基金会维护。它主要用于测试 Web 应用程序的负载能力和性能&#xff0c;但也支持其他类型的测试&#xff0c;如数据库、FTP、JMS、LDAP、SOAP web services 等。 2.特点&#x…

Infuse Pro for Mac全能视频播放器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

Qt系统机制

Qt系统 Qt文件概述输入输出设备类QFileQFileInfoQt多线程Qt多线程常用API使用Qt多线程 线程安全互斥锁读写锁条件变量信号量 Qt网络QUdpSocketQNetworkDatagram设计一个UDP回显服务器QTcpServerQTcpSocketTcp版本的回显服务器HttpClient核心API Qt 音频Qt视频 Qt文件概述 ⽂件操…

【C++BFS】1020. 飞地的数量

本文涉及知识点 CBFS算法 LeetCode1020. 飞地的数量 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻&#xff08;上、下、左、右&#xff09;的陆地单元格或跨过 gr…

【C++初阶】string类

【C初阶】string类 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符串 1.2 实际中 2. 标准库中的string类 2.1 string类 2.…

前缀表达式(波兰式)和后缀表达式(逆波兰式)的计算方式

缀是指操作符。 1. 前缀表达式&#xff08;波兰式&#xff09; &#xff08;1&#xff09;不需用括号&#xff1b; &#xff08;2&#xff09;不用考虑运算符的优先级&#xff1b; &#xff08;3&#xff09;操作符置于操作数的前面。&#xff08;如 3 2 &#xff09; 1.1 中…