[疑难杂症2024-003]如何判断一张没有头信息的dcm图像,是否是压缩图像?

本文主要是介绍[疑难杂症2024-003]如何判断一张没有头信息的dcm图像,是否是压缩图像?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文由Markdown语法编辑器编辑完成.

1. 前言:

DCM格式,是医学图像领域里面的通用格式.DCM图像一般分为两大部分,一部分是TAG信息,一部分是像素.

而TAG信息,一般又会分为两部分,如下图所示, 是用dcmtk下面的dcmdump指令,来读图任意一张正常的dcm图像后,展示的tag信息.
可以看到,主要分为两部分:
Dicom-Meta-Information-Header和DICOM-Data-Set.
在这里插入图片描述
DICOM-Meta-Information-Header, 是dicom头,一般是0002开头的Element.
这里面, TransferSyntaxUID, 是用来标识这个图像的传输方式.

以下是对Transfer Syntax UID的一个说明:

来源于: https://www.dicomlibrary.com/dicom/transfer-syntax/Transfer Syntax
A Transfer Syntax is a set of encoding rules able to unambiguously represent one or more Abstract Syntaxes. 
In particular, it allows communicating Application Entities to negotiate common encoding techniques they both support (e.g., byte ordering, compression, etc.).
A Transfer Syntax is an attribute of a Presentation Context, one or more of which are negotiated at the establishment of an Association between DICOM Application Entities.

这里面提到了,它用来标识图像的字节排序,压缩算法,等等。

今天要提到的这个解决方案,就是跟dicom的Trasnfer Syntax UID取值相关的。

从以上的定义,我们可以知道,如果想知道,一张dcm图像,到底是不是压缩图像,我们可以很方便地根据这个tag来识别。
以下是我分别读取一张标准的(非压缩图),和压缩图,读取图像后的区别。

# 读取正常图像
import pydicom
file_1 = "/path/to/normal"
ds1 = pydicom.read_file(file_1)
print(ds1.file_meta.TransferSyntaxUID.is_compressed)file_2 = "/path/to/compress"
ds2 = pydicom.read_file(file2)
print(ds2.file_meta.TransferSyntaxUID.is_compressed)

但是,今天遇到的问题,却是,这个图像没有头信息,所以使用pydicom读取后,没有file_meta, 当然也就没有TransferSyntaxUID. 由于后续的服务,只能在原图上面进行。

因此,我需要做的事情就是,在没有file_meta的情况下,依然能够根据图像是否是压缩图像来解压。

2. 解决方案

经过一系列的调研,dicom的TAG中,还是会有一些,可以帮助我们来推算出图像的压缩类型。
以下列举这些有用的dicom, 以及计算方法:

DICOM TAG含义取值
BitsAllocated
Rows
Columns
SamplePerPixel
FrameOf

未完待续…

这篇关于[疑难杂症2024-003]如何判断一张没有头信息的dcm图像,是否是压缩图像?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916605

相关文章

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编