使用 Bokeh 查看 dicom 图像

2023-12-26

我正在尝试将图形背景设置为 dicom 图像。我跟着这个例子 http://bokeh.pydata.org/en/0.11.1/docs/gallery/image_rgba.html,但是图像数据由dicom.pixel_array不是RGBA。我也不知道如何转换它。我也不确定散景到底期望什么。我尝试在文档中查找细节,但运气不佳。

from bokeh.plotting import figure, show, output_file
import dicom
import numpy as np


path = "/pathToDicomImage.dcm"
data = dicom.read_file(path)
img = data.pixel_array

p = figure(x_range=(0,10), y_range=(0,10))

# must give a vector of images
p.image_rgba(image=[img], x=0, y=0, dw=10, dh=10)

output_file("image_rgba.html", title="image_rgba.py example")

show(p) 

这段代码没有给我任何错误,但它不显示任何内容。也许像素阵列没有 alpha 数据,所以alpha默认为0?我不知道。另外,我不太清楚如何测试它。

SOLVED

正如所指出的,我只需要将像素数据映射到 rgba 空间。对于本例,这意味着将数据复制到每个通道,并一路设置 alpha。

def dicom_image_to_RGBA(image_data):
    rows = len(image_data)
    cols = rows
    img = np.empty((rows,cols), dtype=np.uint32)
    view = img.view(dtype=np.uint8).reshape((rows, cols, 4))
    for i in range(0,rows):
        for j in range(0,cols):
            view[i][j][0] = image_data[i][j]
            view[i][j][1] = image_data[i][j]
            view[i][j][2] = image_data[i][j]
            view[i][j][3] = 255
    return img

我不是 python 专家,但我已经了解了 pydicom 处理像素数据的功能。我发现pixel_array是DICOM数据集的像素数据属性的值as is并且 pydicom 不提供任何功能将其转换为某种可以统一处理的标准格式。这意味着在大多数情况下您必须将其转换为 RGB,这是一项相当复杂且容易出错的任务。

在此需要考虑的事项:

  • 编码(Big/Little Endian、各种压缩方法,如 JPEG、JPEG-LS、RLE、ZIP) - DICOM 属性 (0002,0010) TransferSyntaxUID
  • 像素数据的类型(灰度、RGB、...) - DICOM 属性 (0028,0004) PhotometricInterpretation、(0028,0103) PixelRepresentation
  • 对于彩色图像:是按平面编码颜色的值 (RRRR,.....GGGG,.....BBBB) 还是按您期望的像素颜色编码 (RGB RGB...)
  • 位深度以及哪些位用于实际像素数据值 (0028,0100) BitsAllocation、(0028,0101) BitsStored、(0028,0102) Highbit。
  • 像素数据值是否确实是要显示的值,或者它们是颜色/灰度查找表的索引 (0028,3000) ModalityLUTSequence、(0028,3002) LUTDescriptor、(0028,3003) LUTExplanation、(0028,3004) ModalityLUTType、 (0028,3006)LUT数据。

很可怕,不是吗?对于一些现代图像类(例如增强型 MR),功能还不止这些。

但是,如果您限制为特定类型的图像(例如计算机放射线摄影)。上述限制适用,使您的生活更轻松一些。

如果您想发布图像标题的 DICOM 转储,我可以给您一些如何显示该特定图像的提示。

HTH

kritzel

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

使用 Bokeh 查看 dicom 图像 的相关文章

随机推荐

  • 使用 ASP.NET (C#) 在页面之间传递变量,而不使用 QueryString

    寻求有关在不使用 QueryString 的情况下在页面之间传递变量的建议 诸如 Google 之类的网络爬虫会捕获 URL 中的查询字符串 我正试图摆脱使用它 是否有另一种建议的方法来传递变量 我考虑过使用会话变量 但这只是为了简单地将变
  • VS2010 和 VS2012 之间的二进制 C++ 库兼容性?

    我对 VS2010 和 VS2012 之间编译库的二进制兼容性感到困惑 我想迁移到 VS2012 但是许多闭源二进制 SDK 仅适用于 VS2010 例如用于连接硬件设备的 SDK 传统上 据我所知 Visual Studio 对编译器版本
  • 根据 python pandas 中的行值合并两个数据框

    我在 pandas 中有两个数据框 如下所示 df1 df2 Column1 Column2 Column3 ColumnA ColumnB ColumnC 0 a x x 0 c y y 1 c x x 1 e z z 2 e x x 2
  • BigInteger.valueOf() 对于非常大的数字?

    在 Java 中将 50 位字符串转换为 BigInteger 的最佳方法是什么 它没有 valueOf String 方法 而且我无法转换为 Long 因为它太小了 它确实有一个BigInteger String http java su
  • 调暗/模糊父布局背景

    这里有与上面主题相同的问题 但没有得到答案 我这里有一个布局 我需要在顶部布局中使用与底部布局相同的图像 但具有模糊样式 设置 alpha 没有帮助 文本视图也会影响 如何模糊向下布局的背景 此处为 XML
  • Windows 任务调度程序用于调度代码重复运行的可靠性如何?

    我有一些代码需要驻留在 Windows Server 2003 计算机上并每分钟运行一次 建议的处理方法是什么 是否可以将其设计为控制台服务并让任务调度程序每分钟都执行它 这可能吗 我应该把它吸收并把它写成一个 Windows 服务吗 由于
  • 有没有办法测量重复代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种与语言无关的代码复制工具 找到特定于语言的代码重复工具 适用于 Java C PHP 很
  • dFdxFine 和 dFdxCoarse 之间的区别

    来自 OpenGL 文档 dFdxFine 和 dFdyFine 使用基于当前片段及其直接邻居的 p 值的局部差分来计算导数 dFdxCoarse 和 dFdyCoarse 使用基于当前片段邻居的 p 值的局部差分来计算导数 并且可能但不一
  • EF6:使用数据库优先方法进行全文搜索

    我找到了这个link http www entityframework info Home FullTextSearch使full text search解决linq 然而 该代码似乎是针对database first approach 如
  • 正则表达式抓取表单标签内容不起作用

    我正在尝试使用 preg match all 获取表单标签内的内容 标签 这是正则表达式
  • 确定 xsl-fo 中的最后一页位置

    我们能否以某种方式确定 XSL FO 中最后一页的位置 如果我只想将页脚放在最后一页 那么该怎么做呢 由于输入数据会变化并且不是静态的 因此 根据数据的不同 可以出现任意数量的页面 希望 还不算太晚 但无论如何 对于所有感兴趣的人 创建页面
  • 为什么 -didselectRowAtIndexPath 没有被调用?

    我创建了一个新项目 Xcode 4 Master Detail 应用程序 只是为了看看我是否做错了什么 但我仍然遇到同样的问题 我想打电话 reloadData当用户取消选择一个单元格 所以这是我的代码 void tableView UIT
  • 企业分发签名 - 谁做的以及为什么?

    作为我们 ISV 公司的一部分 我正在开发一款 iOS 应用程序 我们正在使用 Xamarin iOS 但我希望这对于这个问题来说并不重要 我们的一些将获得该应用程序的客户正在使用 MDM AirWatch 来管理设备并在其设备上安装该应用
  • Ruby:使用字符串插值进行评估

    我不明白 为什么eval工作原理如下 123 456 to s 789 gt 123 456 789 eval 123 456 to s 789 gt 123 我怎样才能插入到一个字符串里面eval Update 谢谢你们 朋友们 有效 所
  • Go语言是否对字符串使用写时复制[重复]

    这个问题在这里已经有答案了 Go语言是否像Java一样对字符串使用写时复制 IE 如果我按值将字符串传递给方法并且从不更改它 则会分配内存并复制字符串 这将是时间效率低下的 或者它只会引用单个副本 它不是写入时复制 因为字符串是不可变的 但
  • Github Gists 语法高亮不起作用

    我正在尝试使用 Markdown 语法突出显示创建一个要点 不幸的是无法在这里发布屏幕截图 然后我按 保存 但没有应用语法突出显示 Python 代码也存在同样的问题 您需要将文件扩展名更改为 md 这是我的叉子gist https gis
  • 使用 Visual Studio 2010 Web Config 转换删除 XML 注释

    我们正在使用 Team Build 来处理对开发服务器的部署 并且需要在转换时从 Web 配置中删除注释 有谁知道如何删除使用转换从 Web 配置文件中注释行 我找到了答案 这似乎是 Visual Studio Team Build 中 X
  • 使用两个校准相机进行 3D 重建 - 该管道中的错误在哪里?

    有很多关于从已知内部校准的立体视图进行 3D 重建的帖子 其中一些是出色的 https stackoverflow com questions 16639106 camera motion from corresponding images
  • 构造正则表达式模式来匹配句子

    我正在尝试编写一种正则表达式模式 该模式将匹配以多个或一个制表符和 或空格开头的任何句子 例如 我希望我的正则表达式模式能够匹配 你好 我喜欢正则表达式 但我正在摸索如何匹配 hello 之后的单词 到目前为止我有这个 String REG
  • 使用 Bokeh 查看 dicom 图像

    我正在尝试将图形背景设置为 dicom 图像 我跟着这个例子 http bokeh pydata org en 0 11 1 docs gallery image rgba html 但是图像数据由dicom pixel array不是RG