如果您想将普通图像(如 JPG 或 PNG)转换为医学图像(谈论 Dicom 文件),您只需要安装一个名为“pydicom”的库来操作 Dicom 图像,然后您需要一个预先存在的 Dicom 图像。

因为我们都知道 Dicom 图像或者文件包含的不仅仅是普通图片,比如像素等,Dicom 图像包含我们称之为“像素阵列”的像素信息、患者信息等等。所以在我们的例子中,我们只需要转换像素数组的像素值。为此,我们需要获取现有的 Dicom 图像并获取其旧信息来创建新的。

所以第一步是安装 pydicom 库、pillow 和 numpy

pip install pydicom
pip install numpy
pip install pillow

完成后,我们就可以启动主程序了。为此,我们有 3 个步骤:

  • 打开图像、jpg 或 png 以及现有的 Dicom。
  • 如果 jpg 或 png 图像在灰度空间中。
  • 如果 jpg 或 png 图像在 RGB 空间中

1.打开图像

要打开图像,对于 jpg 或 png 图像,我们将使用Pillow,对于 Dicom,我们将使用 pydicom。以下是执行此操作的行:

ds = pydicom.dcmread(‘path’) # pre-existing dicom file
jpg_image = Image.open(‘path’) # the PNG or JPG file to be replace

2如果JPG图像是灰度图像

如果您不知道图像是灰度还是 RGB,您可以通过“模式函数”进行检查,如果返回“L”则表示图像是灰度图,如果返回“RGBA”则表示图像是RGB 图像。

所以我们需要初始化图像,或者我们可以说使用 NumPy 的数组,然后我们需要为数组提供与 JPG 图像相同的尺寸,这样我们就不会丢失信息,之后我们应该指定我们将创建的图像是灰度图像,当然我们需要添加更多参数来指定图像的正确类型。我们应该知道,这个数组将替换第一个 Dicom 图像上存在的数组。

if jpg_image.mode == 'L':np_image = np.array(jpg_image.getdata(),dtype=np.uint8)ds.Rows = jpg_image.heightds.Columns = jpg_image.widthds.PhotometricInterpretation = "MONOCHROME1"ds.SamplesPerPixel = 1ds.BitsStored = 8ds.BitsAllocated = 8ds.HighBit = 7ds.PixelRepresentation = 0ds.PixelData = np_image.tobytes()ds.save_as('result_gray.dcm')

3.如果 JPG 图像是 RGB

实际上,我们将执行与灰度图像相同的步骤,只是我们将创建的数组将有 3 个通道而不是 1,“PhotometricInterpretation”将是 RGB 而不是单色,每个像素的通道数是 3而不是 1。

if jpg_image.mode == 'RGBA':np_image = np.array(jpg_image.getdata(), dtype=np.uint8)[:,:3]ds.Rows = jpg_image.heightds.Columns = jpg_image.widthds.PhotometricInterpretation = "RGB"ds.SamplesPerPixel = 3ds.BitsStored = 8ds.BitsAllocated = 8ds.HighBit = 7ds.PixelRepresentation = 0ds.PixelData = np_image.tobytes()ds.save_as('result_rgb.dcm')

4.完整代码

import numpy as np
import pydicom
from PIL import Imageds = pydicom.dcmread('path') # pre-existing dicom file
jpg_image = Image.open('path') # the PNG or JPG file to be replaceif jpg_image.mode == 'L':np_image = np.array(jpg_image.getdata(),dtype=np.uint8)ds.Rows = jpg_image.heightds.Columns = jpg_image.widthds.PhotometricInterpretation = "MONOCHROME1"ds.SamplesPerPixel = 1ds.BitsStored = 8ds.BitsAllocated = 8ds.HighBit = 7ds.PixelRepresentation = 0ds.PixelData = np_image.tobytes()ds.save_as('result_gray.dcm')elif jpg_image.mode == 'RGBA':np_image = np.array(jpg_image.getdata(), dtype=np.uint8)[:,:3]ds.Rows = jpg_image.heightds.Columns = jpg_image.widthds.PhotometricInterpretation = "RGB"ds.SamplesPerPixel = 3ds.BitsStored = 8ds.BitsAllocated = 8ds.HighBit = 7ds.PixelRepresentation = 0ds.PixelData = np_image.tobytes()ds.save_as('result_rgb.dcm')

参考目录

https://pycad.co/convert-jpg-or-png-images-into-dicom/

将 JPG 或 PNG 图像转换为 Dicom相关推荐

  1. DCMTK:使用dcmimage 库将DICOM图像转换为PPM或PGM

    DCMTK:使用dcmimage库将DICOM图像转换为PPM或PGM 使用dcmimage库将DICOM图像转换为PPM或PGM 使用dcmimage库将DICOM图像转换为PPM或PGM #inc ...

  2. DCMTK:使用dcmimage库将DICOM图像转换为PPM或PGM

    DCMTK:使用dcmimage库将DICOM图像转换为PPM或PGM 使用dcmimage库将DICOM图像转换为PPM或PGM 使用dcmimage库将DICOM图像转换为PPM或PGM #inc ...

  3. 如何将 DICOM 图像转换为 JPG 或 PNG

    在计算机视觉中,我们经常使用医学图像,我们拥有的几乎所有数据库都包含 DICOM 图像.Dicom 图像不仅仅是一张图像,它包含像素信息.患者信息等. 在这种情况下,我们只需要将图像可视化或将其保存为 ...

  4. opencv java 灰度_如何使用Java将图像转换为灰度?

    在Java语言编程中,如何使用Java将图片转换为灰度? 注意:需要访问网址:http://book2s.com/java/jar/o/opencv/download-opencv-3.2.0-0.h ...

  5. python matplotlib模块画出的图像转换为.tiff格式

    利用python matplotlib模块(python3.7.1)画出的图表暂不支持直接导出.tiff格式的图片,但是可以导出eps, pdf, pgf, png, ps, raw, rgba, s ...

  6. opencv python 将RGB表示的图像转换为HSV(或Ycbcr)表示

    参考文章:在python中使用opencv将RGB图像转换为HSV及YCrCb图像(附代码)

  7. php灰度化,PHP Imagick – 将图像转换为灰度(非常糟糕的结果)

    我正在用 PHP进行一些图像编辑,因为GD提供的功能较少,我切换到了Imagick. 其中一个过程是灰度图像.一切顺利(在Windows 7本地,Imagick 2.2.1-dev 6.5.8-7 Q ...

  8. GDCM:将PDF文件转换为DICOM / PDF文件的测试程序

    GDCM:将PDF文件转换为DICOM / PDF文件 GDCM:将PDF文件转换为DICOM / PDF文件 GDCM:将PDF文件转换为DICOM / PDF文件 #include "g ...

  9. ITK:将RGB图像转换为灰度图像

    ITK:将RGB图像转换为灰度图像 内容提要 输出结果 C++实现代码 内容提要 将RGB图像转换为其亮度图像(灰度级一). 输出结果 C++实现代码 #include "itkImage. ...

最新文章

  1. centos系统下安装Nginx
  2. 微服务架构——不是免费的午餐
  3. 关于英伟达数字人文章的致歉和说明
  4. 用iptables自动封连接数较大的IP防止CC***的方法 zt
  5. 点击按钮出现图片_坪山电动车上牌丨部分手机点击拍摄按钮,页面没有反应,无法拍摄人脸图片或上传照片,为什么?...
  6. clover configurator_枯木逢春,用Clover让老电脑从NVME SSD启动 再用叁年没问题
  7. JavaScript中十个一步拷贝数组的方法
  8. 时钟周期及秒(s) 毫秒(ms) 微秒(μs) 纳秒(ns) 皮秒(ps)之间转换
  9. q7goodies事例_Java 8 Friday Goodies:轻松派本地缓存
  10. JSF 2,PrimeFaces 3,Spring 3和Hibernate 4集成项目
  11. python Unable to find vcvarsall.bat 错误
  12. 树莓派raspbian OS 64位系统下载和更换源
  13. 边缘计算的爆发为安防全产业带来了怎样的变化?
  14. Abp vnext Web应用程序开发教程 4 —— 集成测试
  15. java url拦截器框架_使用Spring Interceptor实现URL访问校验
  16. Linux下查看CPU信息、机器型号等硬件信息命令
  17. 这个严重漏洞可被滥用于破坏交通信号灯系统
  18. 2021江西高考成绩查询方式6,2021年江西高考成绩6月23日公布 多种查分方式
  19. php 百分比,小数2位
  20. 千万不要和女程序员做同事!

热门文章

  1. 国密算法(SM2,SM3,SM4)辅助工具升级版(OTP+PBOC3.0)
  2. java applet 打印_applet 打印常见问题与解决方法
  3. PHP时间戳与日期的相互转换
  4. ubuntu更新源修改更新源
  5. iphone手机视频和照片永久删除还能恢复吗?
  6. 查找替换之 换行符替换
  7. 生日快乐程序_「秒福」小程序:送祝福,2020我们不一样
  8. 每日一问 --什么是信道编码和交织?
  9. 实习生招聘--CVTE笔试【1】
  10. xlrd和xlwt操作Excel文件