如何从array直接生成dicom图像

搬运参考:https://stackoverflow.com/questions/14350675/create-pydicom-file-from-numpy-array

代码实现功能:调用电脑内置摄像头拍照,转为灰度图,加入必要的头文件信息,并保存为dicom文件。

import pydicom
from pydicom.dataset import Dataset, FileDataset
from pydicom.uid import ExplicitVRLittleEndian
import pydicom._storage_sopclass_uids
import cv2
import numpy as np

if __name__ == '__main__':
    cap = cv2.VideoCapture(0)  # 开启摄像头
    f, image = cap.read()  # 将摄像头中的一帧图片数据保存
    cap.release()

    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 转为灰度图
    image = cv2.flip(image, -1)  # 上下左右翻转
    image = image.astype(np.uint16)

    print("Setting file meta information...")
    # Populate required values for file meta information

    meta = pydicom.Dataset()
    meta.MediaStorageSOPClassUID = pydicom._storage_sopclass_uids.MRImageStorage
    meta.MediaStorageSOPInstanceUID = pydicom.uid.generate_uid()
    meta.TransferSyntaxUID = pydicom.uid.ExplicitVRLittleEndian

    ds = Dataset()
    ds.file_meta = meta

    ds.is_little_endian = True
    ds.is_implicit_VR = False

    ds.SOPClassUID = pydicom._storage_sopclass_uids.MRImageStorage
    ds.PatientName = "Test^Firstname"
    ds.PatientID = "123456"

    ds.Modality = "MR"
    ds.SeriesInstanceUID = pydicom.uid.generate_uid()
    ds.StudyInstanceUID = pydicom.uid.generate_uid()
    ds.FrameOfReferenceUID = pydicom.uid.generate_uid()

    ds.BitsStored = 16
    ds.BitsAllocated = 16
    ds.SamplesPerPixel = 1
    ds.HighBit = 15

    ds.ImagesInAcquisition = "1"

    ds.Rows = image.shape[0]
    ds.Columns = image.shape[1]
    ds.InstanceNumber = 1

    ds.ImagePositionPatient = r"0\0\1"
    ds.ImageOrientationPatient = r"1\0\0\0\-1\0"
    ds.ImageType = r"ORIGINAL\PRIMARY\AXIAL"

    ds.RescaleIntercept = "0"
    ds.RescaleSlope = "1"
    ds.PixelSpacing = r"1\1"
    ds.PhotometricInterpretation = "MONOCHROME2"
    ds.PixelRepresentation = 1

    pydicom.dataset.validate_file_meta(ds.file_meta, enforce_standard=True)

    print("Setting pixel data...")
    ds.PixelData = image.tobytes()

    ds.save_as("./out.dcm")


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python有一些库可以用来处理DICOM(数字图像和通信医学)图像。其中最常用的是pydicom库,它是一个功能强大的库,可以读取、处理和存储DICOM图像。 首先,我们应该安装pydicom库。可以使用pip命令在终端中运行以下语句进行安装: ```python pip install pydicom ``` 一旦安装完成,我们可以使用pydicom库来读取DICOM图像。通过传递DICOM图像的文件路径作为参数,我们可以使用`pydicom.dcmread()`函数来读取图像。下面是一个示例代码: ```python import pydicom # 读取DICOM图像 ds = pydicom.dcmread('path/to/dicom/image.dcm') # 获取图像的像素数据 image_array = ds.pixel_array # 进行图像处理... ``` 在读取DICOM图像后,我们可以将其保存为DICOM格式的文件。使用`pydicom.filewriter.dcmwrite()`函数可以将pydicom dataset保存为DICOM图像文件。下面是一个示例代码: ```python import pydicom # 创建一个空的数据集 ds = pydicom.Dataset() # 设置数据集的相关属性 ds.PatientName = "John Doe" ds.PatientID = "12345" # 将像素数据赋值给数据集 ds.PixelData = image_array.tobytes() # 将数据集保存为DICOM图像文件 pydicom.filewriter.dcmwrite('path/to/save/image.dcm', ds) ``` 通过设置数据集的相关属性和将像素数据赋值给数据集,并使用`dcmwrite()`函数保存数据集,我们可以将图像保存为DICOM格式的文件。 总而言之,使用pydicom库,我们可以轻松地读取、处理和存储DICOM图像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值