从多个 jpg 图像创建 Dicom

2024-03-15

我已经成功地用一张图像构建了 dicom,但我找不到添加更多图像的方法...... 我认为问题可能出在我的像素阵列中,任何人都可以帮我纠正它吗?

# Populate required values for file meta information
meta = pydicom.Dataset()
meta.TransferSyntaxUID = pydicom.uid.ExplicitVRLittleEndian
meta.MediaStorageSOPClassUID = pydicom._storage_sopclass_uids.MRImageStorage
meta.MediaStorageSOPInstanceUID = pydicom.uid.generate_uid()

# build dataset
ds = Dataset()
ds.file_meta = meta
ds.fix_meta_info()

# unknown options
ds.is_little_endian = True
ds.is_implicit_VR = False
ds.SOPClassUID = pydicom._storage_sopclass_uids.MRImageStorage
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.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.PixelRepresentation = 1

# Case options
ds.PatientName = "Anonymous"
ds.PatientID = "123456"
ds.Modality = "MR"
ds.StudyDate = '20200225'
ds.ContentDate = '20200225'

def ensure_even(stream):
    # Very important for some viewers
    if len(stream) % 2:
        return stream + b"\x00"
    return stream

pixel_data_list = []
for root, dir, filenames in walk(folder):
    filenames.sort(key=natural_keys)
    for filename in filenames:
        filename = folder + filename
        # convert image to grayscale
        img = Image.open(filename).convert('L')
        img.save(filename)

        # open image, decode and ensure_even stream
        with open(filename, 'rb') as f:
            arr = decode(f)

        pixel_data_list.append(arr.tobytes())

# required for pixel handler
ds.BitsStored = 8
ds.BitsAllocated = 8
ds.HighBit = 7
ds.PixelRepresentation = 0

# grayscale without compression
ds.PhotometricInterpretation = "MONOCHROME2"
ds.SamplesPerPixel = 1  # 1 color = 1 sampleperpixel
ds.file_meta.TransferSyntaxUID = pydicom.uid.ExplicitVRLittleEndian
ds.PixelData = array(pixel_data_list)
ds.NumberOfFrames = len(pixel_data_list)

# Image shape
ds['PixelData'].is_undefined_length = False
ds.Columns = img.width
ds.Rows = img.height

# validate and save
pydicom.dataset.validate_file_meta(ds.file_meta, enforce_standard=True)
new_filename = filename.replace('.jpg', name + '.dcm')
ds.save_as(new_filename, write_like_original=False)

似乎也无法压缩图像,只能单色工作(请参阅此处的尝试https://stackoverflow.com/a/68939321/1827162 https://stackoverflow.com/a/68939321/1827162)... 但这并不是什么问题,最重要的是能够添加多个图像。感谢您的指点!


像素数据应该bytes。如果您的传输语法未压缩,那么您需要将数据连接在一起,如果连接数据的长度是奇数,那么您必须添加一个尾随填充字节:

# For uncompressed transfer syntaxes only!
pixel_data = b"".join(pixel_data_list)
ds.PixelData = pixel_data + b"\x00" if len(pixel_data) % 2 else pixel_data

对于压缩传输语法,您必须使用封装 https://stackoverflow.com/questions/58518357/how-to-create-jpeg-compressed-dicom-dataset-using-pydicom/59499693#59499693

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从多个 jpg 图像创建 Dicom 的相关文章

随机推荐

  • 识别并计算咒语(每组内的独特事件)

    我正在寻找一种有效的方法来识别时间序列中的咒语 运行 在下图中 前三列是我所拥有的 第四列 spell这就是我想要计算的 我尝试过使用dplyr s lead and lag 但这变得太复杂了 我试过了rle但一无所获 ReprEx df
  • 如何在android中检查3g是否活跃

    我正在尝试检查我的手机中的 3G 是否处于活动状态 之后我必须触发一个 Intent 所以请有人帮助我 提前致谢 我最近编写的应用程序的另一个片段 TelephonyManager telManager telManager Telepho
  • 如何在命令类之外获取命令参数?

    我向doctrine fixtures load 命令添加了自定义选项 现在我想知道如何在自定义装置类中获取此命令选项 class LoadUserData implements FixtureInterface ContainerAwar
  • Matlab 中多个字符串的日期

    我必须从两个字符串生成一个日期 字符串或数字 第一个是日期 第二个是时间 我一定在代码中犯了一些错误 因为结果与源数据的串联不同 DIR4 h datestr strcat DIR1 h DIR2 h dd mm yyyy HH MM SS
  • Django 403 CSRF 令牌丢失或不正确

    我遇到过这个问题 但不幸的是仍然不知道如何解决它 表单呈现完美 我输入信息并收到 CSRF 错误 给出的理由是token missing or incorrect View def eventSell request id c c upda
  • 循环 this.props.children 如何测试它们的类型?

    在自定义 React 组件中的以下代码片段中 React Children map this props children child gt if predicate child do stuff else do other stuff p
  • 简单的网络服务器或网络测试框架

    需要测试一个复杂的 Web 应用程序 该应用程序与基于远程第 3 方 CGI 的 Web 服务进行交互 我计划在虚拟网络服务器中实现一些第三方服务 以便我可以完全控制测试用例 寻找一个简单的 python http web 服务器或框架来模
  • C 结构中的填充量是编译器相关的还是明确定义的?

    是C中的填充量struct在标准或编译器和 或目标体系结构中明确定义 我在标准中找不到答案 它是实现定义的 来自 C99 标准第 6 7 2 1 节 结构体或联合对象的每个非位域成员都按照实现定义的方式对齐 适合其类型的方式 可能还有无名的
  • 使用VBA代码从tr获取所有td

    我有一个 tr 它是一个对象并且有 td 我想获取另一个对象变量 tblTD 中的所有 td 为此我用了Set tblTD tr getelementsbytagname td 但是当我检查 tblTD 的长度时 它显示为 0 有人可以建议
  • C# WPF Webbrowser msHTML - 探索 DOM - 查找元素

    我实际上正在使用 WPF 和 WPF WebBrowser 用 C 开发一个个人项目 我真的需要探索 html DOM 元素 就像我们过去在 javascript 或 php 中所做的那样 在我的主窗口中我有这个变量 private msh
  • 将 2D 箱中分散值的平均值绘制为直方图/十六进制图

    我有 3 维分散数据 x y z 我想将 x 和 y 的箱中 z 的平均值绘制为十六进制图或二维直方图 有没有 matplotlib 函数可以做到这一点 尽管这似乎是一个常见问题 但我只能提出一些非常麻烦的实现 例如 像这样的东西 除了颜色
  • #if canImport(CoreImage) 在 swift 包管理器中不起作用

    我制作使用 CoreImage 的库 库支持 Cocoapods Carthage 和 Swift 包管理器 当我在 Swift 包管理器中构建它时 我收到此错误 Undefined symbols for architecture x86
  • 空 ByteArrayOutputStream / ZipOutputStream 的长度 = 22?

    我有一个关于流大小的小问题 这是我的尝试 ByteArrayOutputStream outStream new ByteArrayOutputStream ZipOutputStream zipStream new ZipOutputSt
  • 从 SQL Server 导出到带有列标题的 Excel?

    我有一个大约有 20 列的查询 我想将其导出到带有列标题的 Excel 文件 我以为这很容易弄清楚 但运气不好 我在网上搜索并发现了一项建议 但最终没有奏效 所以我陷入了困境 工具 gt 选项 选择 查询结果 gt SQL Server g
  • Angular 2.0 和 ng 风格

    我正在构建一个 Angular 2 0 组件 我想动态控制它的样式 使用ng style 快速查看 Angular 2 的文档后 我尝试了以下操作 div class theme preview fontSize div 并看到尺寸实际上打
  • WPF 切角元素

    我正在尝试在 WPF 中创建类似于下图的内容 该控件被设计为我的应用程序中所有内容的基本视图 并将位于带有背景 可能是某种渐变 的 Window 控件内 要求如下 三边圆角 左上 左下 右下 剪掉右上角的选项卡查看角 剪切区域 后面的背景透
  • 将可变上下文传递到回调中

    我正在尝试用 Rust 构建一个简单的 UI 但部分可以在 Lua 中编写脚本 使用 rust lua53 并且在找到一种让 Lua 组件访问 Lua 状态的好方法时遇到问题 这个问题 示例比我想要的要长一点 抱歉 UI 的核心是Widge
  • Direct2D 仅在 C++ Builder 中部分链接

    我有一个 C Builder Rad Studio Berlin 项目设置来使用 Direct2d 画布绘图与 TDirect2DCanvas 配合得很好 这表明 Direct2D 链接正确 一切都渲染得很顺利 但是 我需要使用矩阵 当我尝
  • gitlab-ctl 重新配置:无法确定节点名称

    我确实在 Ubuntu 16 04 4 LTS 上设置了一个新的 GitLab 实例 安装包进展顺利 GitLab 似乎已启动并运行 然后我开始配置实例并设置 SMTP etc gitlab gitlab rb 后来我跑了sudo gitl
  • 从多个 jpg 图像创建 Dicom

    我已经成功地用一张图像构建了 dicom 但我找不到添加更多图像的方法 我认为问题可能出在我的像素阵列中 任何人都可以帮我纠正它吗 Populate required values for file meta information met