【代码 | 格式转换】Dicom转png

这篇具有很好参考价值的文章主要介绍了【代码 | 格式转换】Dicom转png。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 【相关链接】

How To Convert a DICOM Image Into JPG or PNG - PYCAD、中文

【相关知识】

1、PNG和JPEG(JPG)格式各有优缺点,根据不同的应用场景可以选择不同的格式。

从保留图片信息的完整性和减少信息丢失的角度来看,PNG格式比JPEG格式更好。PNG是一种无损压缩格式,可以保留图像的每个像素的完整信息,并且不会引起压缩失真。因此,当需要在图像处理中保留最高质量的图像信息时,通常选择PNG格式。

相比之下,JPEG格式是一种有损压缩格式,压缩时会丢失图像的一些信息,导致图像质量下降。虽然JPEG格式的压缩比较高,文件大小比PNG格式小,但JPEG格式在图像处理中可能会导致信息丢失和质量下降。

总的来说,如果您需要在图像处理中保留最高质量的图像信息,则应选择PNG格式。如果文件大小比较重要,而图像质量不是最高优先级,则可以选择JPEG格式。

2、DICOM(Digital Imaging and Communications in Medicine)是医学图像和相关信息的标准格式。要读取DICOM文件,可以使用DICOM库,例如pydicom

虽然DICOM最初是为CT(计算机断层扫描)图像设计的,但它现在也广泛用于其他医学成像设备产生的图像,包括X射线片,核磁共振(MRI),超声波,PET等。

因此,DICOM格式的文件不一定是CT,也可以是X光片或其他医学成像设备的图像。DICOM格式为各种医学图像提供了一种标准的方式,使它们可以在不同的医学成像设备和软件之间交换和共享。

由.DCM转成.PNG时:DICOM格式的医学影像数据存储了大量的元数据和像素数据,而PNG格式的图像数据只包含像素数据。在转换过程中,需要注意DICOM数据可能包含了压缩编码,需要使用pydicom库进行解码。同时,由于DICOM文件中的像素值可能不是标准的8位灰度值,需要进行归一化处理,确保像素值的范围在0到255之间。

【代码记录】

1、使用pydicom读取DICOM文件信息

中间出现报错:UnicodeEncodeError: 'gbk' codec can't encode character '\xcd' in position 3694: illegal multibyte sequence因为有些Unicode字符无法编码

# -*- coding: utf-8 -*-
import pydicom
import sys

# 将输出编码格式设置为utf-8
sys.stdout.reconfigure(encoding='utf-8')

# 读取DICOM文件
ds = pydicom.dcmread('-0001-0001-0001-W4095L2047.DCM')  # .dcm

# 打印DICOM数据集信息
print(ds.__repr__().encode('utf-8').decode('unicode_escape'))

(0018, 1050) Spatial Resolution DS: '0.143' 表示图像的空间分辨率为 0.143mm,空间分辨率是指在图像上相邻两个像素之间的物理距离。
(0028, 0030) Pixel Spacing DS: [0.1408399617591, 0.1408399617591]

Pixel SpacingImager Pixel Spacing都是描述像素之间间距的DICOM属性,但是它们描述的是不同的像素间距。

Imager Pixel Spacing描述的是数字图像显示设备(imager)中的像素间距,它是一个由两个数字组成的列表,第一个数字表示行间距,第二个数字表示列间距,单位是mm。

Pixel Spacing描述的是图像平面(pixel array)中的像素间距,它是一个由两个数字组成的列表,第一个数字表示行间距,第二个数字表示列间距,单位也是mm。

在本例中,Imager Pixel Spacing的值是[0.143, 0.143],表示数字图像显示设备中相邻像素的行间距和列间距都是0.143mm。而Pixel Spacing的值是[0.1408399617591, 0.1408399617591],表示图像平面中相邻像素的行间距和列间距都是0.1408399617591mm。可以看出,两者的值略有不同,可能是由于数字图像显示设备的插值等因素导致的差异。

2、提取多文件夹下.DCM文件到指定统一目录下

一共有80个,但是总是只能提取出22个,Debug之后发现是不同子目录下的最后.DICOM文件名称相同,导致少提取了很多,让医生重新导出要占用就诊时间,那就加一个文件名判断。

(1)只顾提取(.DCM不重名)

# -*- coding: utf-8 -*-
import os
import shutil

# 设置根目录
root_dir = 'F:/0-MINE-coding/0DataProcess/dicom2png/4'

# 设置目标文件夹
target_dir = 'F:/0-MINE-coding/0DataProcess/dicom2png/20230330'

# 遍历目录树
for dirpath, dirnames, filenames in os.walk(root_dir):
    for filename in filenames:
        # 如果是.DCM文件
        if filename.endswith('.DCM'):
            # 拼接完整路径
            filepath = os.path.join(dirpath, filename)
            # 复制到目标文件夹
            shutil.copy2(filepath, target_dir)

(2)如有同名,加个序号(i)        os.path.exists()来判断目标文件夹中是否存在同名文件

import os
import shutil

# 设置根目录
root_dir = 'F:/0-MINE-coding/0DataProcess/dicom2png/4'

# 设置目标文件夹
target_dir = 'F:/0-MINE-coding/0DataProcess/dicom2png/20230330_1'

# 遍历目录树
for dirpath, dirnames, filenames in os.walk(root_dir):
    for filename in filenames:
        # 如果是.DCM文件
        if filename.endswith('.DCM'):
            # 拼接完整路径
            filepath = os.path.join(dirpath, filename)

            # 如果目标文件夹中已存在同名文件,则在文件名中加入序号
            if os.path.exists(os.path.join(target_dir, filename)):
                i = 1
                while True:
                    new_filename = filename.split('.DCM')[0] + f' ({i}).DCM'
                    if not os.path.exists(os.path.join(target_dir, new_filename)):
                        break
                    i += 1
                shutil.copy2(filepath, os.path.join(target_dir, new_filename))
            else:
                shutil.copy2(filepath, target_dir)

 3、一张.DCM转成.png

先是得到一片漆黑的图片,然后得到一张全白的图片(只有天赋异禀的人才能看得到( •̀ ω •́ )V

可能是像素值的范围设置不正确导致的,将像素值的范围调整到 [0, 255],然后再保存为 PNG 文件。

# -*- coding: utf-8 -*-
import numpy as np
import pydicom
from PIL import Image

# 读取 DICOM 文件
ds = pydicom.dcmread("-0001-0001-0001-W4095L2047.DCM")

# 将像素值的范围调整到 [0, 255]
pixel_array = ds.pixel_array
min_value = np.min(pixel_array)
max_value = np.max(pixel_array)
pixel_array = (pixel_array - min_value) / (max_value - min_value) * 255
pixel_array = pixel_array.astype(np.uint8)

# 创建 PIL Image 对象
image = Image.fromarray(pixel_array)

# 保存为 PNG 文件
image.save("-0001-0001-0001-W4095L2047.png")

4、dicom2png批处理文章来源地址https://www.toymoban.com/news/detail-482748.html

# -*- coding: utf-8 -*-
import os
import numpy as np
import pydicom
from PIL import Image

# 设置根目录
root_dir = './20230330'

# 设置目标文件夹
target_dir = './20230330_png'

# 遍历目录树
for dirpath, dirnames, filenames in os.walk(root_dir):
    for filename in filenames:
        # 如果是.DICOM文件
        if filename.endswith('.DCM'):
            # 拼接完整路径
            filepath = os.path.join(dirpath, filename)

            # 读取 DICOM 文件
            ds = pydicom.dcmread(filepath)

            # 将像素值的范围调整到 [0, 255]
            pixel_array = ds.pixel_array
            min_value = np.min(pixel_array)
            max_value = np.max(pixel_array)
            pixel_array = (pixel_array - min_value) / (max_value - min_value) * 255
            pixel_array = pixel_array.astype(np.uint8)

            # 创建 PIL Image 对象
            image = Image.fromarray(pixel_array)

            # 保存为 PNG 文件
            png_filename = os.path.splitext(filename)[0] + '.png'
            png_filepath = os.path.join(target_dir, png_filename)
            image.save(png_filepath)

到了这里,关于【代码 | 格式转换】Dicom转png的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DICOM图像的常用一些参数解析

    医学图像DICOM医学影像文件格式详解 Dicom文件基本操作 DICOM图像参数? 像素:构成图片的小色点。图像每个维度的像素个数——该维度一共有多少个均匀分布的像素点。 分辨率(单位DPI):每英寸(Inch)上像素的数量,即小色点的分布密度,当像素相同时,分辨率越高,即

    2024年02月12日
    浏览(37)
  • 开源PACS系统Orthanc(DICOM服务器)配置

    每日鸡汤:不是有所成就才算活着,梦想也不是什么了不起的东西,只喜欢走路、看天、吃披萨的人生也很好。 因为最近开发需要从PACS系统中获取医学影相图片才有了这篇安装BLOG,希望能对同样需要的伙伴一点帮助。 1. PACS和DICOM介绍 PACS(Picture Archiving and Communication System)

    2024年02月03日
    浏览(35)
  • C#使用Matrix类对Dicom图像的旋转、平移、翻转

    使用Matrix对图像的旋转、平移、翻转,代码如下: Matrix类的操作内容可参考: C# Drawing.Drawing2D.Matrix类,二维矩阵几何变换的3x3仿射矩阵类_wangnaisheng的博客-CSDN博客

    2024年02月11日
    浏览(42)
  • u盘就能用:RadiAnt DICOM Viewer CD/DVD 2023.1

    RadiAnt DICOM Viewer CD/DVD 2023.1 built on March 29, 2023 DownloadCD/DVD Autorun Package New features: Length ratio calculation. Ellipsoid / bullet volume calculation. Improvements and bug fixes: Added support for certain DICOM files not fully compliant with the standard. Added support for some uncommon DICOM images with JPEG 2000 encoding. This version is

    2024年02月06日
    浏览(40)
  • Java将JPG/PNG图片转换为WEBP格式,以及WEBP转换成JPG/PNG格式

    越来越多的网站采用了webp格式的图片,webp占用空间小,传送更快,画质不降低。经常会遇到图片格式转换的需求,我们可以借助第三方的包,通过Java实现来PG/PNG图片转换为WEBP格式,以及WEBP转换成JPG/PNG格式。 1.maven项目依赖 在pom.xml加入下面的内容 2.代码分享

    2024年02月08日
    浏览(47)
  • 医院影像图像科室工作站PACS系统 DICOM 三维图像后处理与重建

    PACS报告系统的主要任务是通过运用不断积累诊断常用语,减轻出报告的劳动强度,并且将报告保存成电子文档以便日后查阅。在PACS的报告系统中,有三种不同层次的方法输入文字—“高级模板”、“分类词条”和“短语词典”。这三种方法的内容都可以在运行时创建并加以

    2023年04月21日
    浏览(50)
  • SQL Server函数CONVERT–日期时间格式转换

    语法: 1.值描述 data_type(length) 规定目标数据类型(带有可选的长度)。 expression 规定需要转换的值。 style 规定日期/时间的输出格式。 2.cast()和convert()函数比较 cast一般更容易使用,convert的优点是可以格式化日期和数值; convert一般用于日期和时间类型以及小数之间转换,而

    2024年02月03日
    浏览(62)
  • 图片转换成png格式上传

    参数为图片地址(在浏览器可以直接访问的)

    2024年01月17日
    浏览(40)
  • 【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示)

    Cornerstone3D官网:https://www.cornerstonejs.org/ 在线查看显示效果(加载需时间,可先点击运行),欢迎fork 了解了Cornerstone是什么,有什么作用后,我们先看一下如何去渲染两种比较重要的影像,栈影像和Volume影像,感受一下代码的逻辑及运行顺序,先有个初始的了解。 1. 渲染一个

    2024年01月22日
    浏览(38)
  • DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点

    DICOM 文件的结构,在网上有很多的学习资料,这里只介绍些容易混淆的概念,作为回看笔记。 DICOM Implicit VR Little Endian: 1.2.840.10008.1.2 DICOM Explicit VR Little Endian: 1.2.840.10008.1.2.1 DICOM Explicit VR Big Endian: 1.2.840.10008.1.2.2 JPEG_LOSSLESS_TRANSFER_SYNTAX: “1.2.840.10008.1.2.4.70”; 在dcmtk中,dcmda

    2024年02月03日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包