【问题标题】:SimpleITK cannot show imageSimpleITK 无法显示图像
【发布时间】:2021-10-20 21:17:43
【问题描述】:

我有以下代码。 print(image.GetDimension()) 工作并打印输出 (512, 512, 17)。但是sitk.Show(image) 不起作用。

我的代码

import SimpleITK as sitk

path = "C:/Users/myUserName/Desktop/0001.DCM"
image = sitk.ReadImage(path)

print(image.GetDimension())
sitk.Show(image)

我的错误信息是:

RuntimeError: Exception thrown in SimpleITK Show: D:\a\1\sitk\Code\IO\src\sitkImageViewer.cxx:562:
sitk::ERROR: Error in administrating child process: [Access is denied].
Command line: 'C:\Users\myUserName\Fiji.app' 'C:\\Users\\myUserName\\AppData\\Local\\Temp\\TempFile-21536-2.mha' 

我该如何解决这个问题?我已解压缩 ImageJ 并将 Fiji.app 文件夹放在 C:\Users\myUserName\Fiji.app。 DICOM 图像0001.DCM 没有问题,因为我可以通过一些在线 DICOM 查看器查看它。我正在使用 Windows 10,并在 Spyder 中运行我的 Python 代码。提前致谢!

【问题讨论】:

  • 将命令行粘贴到 shell 提示符以尝试手动运行时会发生什么?
  • 感谢您的回复。在windows的cmd中,我尝试运行> python进入python环境,然后运行第一行import SimpleITK as sitk,然后得到错误信息C:\Users\myUserName\anaconda3\lib\site-packages\numpy\__init__.py:143: UserWarning: mkl-service package failed to import, therefore Intel(R) MKL initialization ensuring its correct out-of-the box operation under condition when Gnu OpenMP had already been loaded by Python process is not assured. Please install mkl-service package, see http://github.com/IntelPython/mkl-service。然后我输入exit() 退出。
  • 我也试过直接在cmd中运行> python myPythonCode.py,然后我有同样的错误信息C:\Users\myUserName\anaconda3\lib\site-packages\numpy\__init__.py:143...blahblahblah。有什么想法吗?
  • 你的 anaconda 环境中没有安装 mkl-service 包。你可以像这样安装它: conda install -c conda-forge mkl-service
  • @DaveChen 感谢您的回复。我只是尝试在 cmd 中执行此操作,并按照您的建议安装了 mkl-service。但是报错信息还是一样。

标签: python image medical simpleitk medical-imaging


【解决方案1】:

尝试将 SITK_SHOW_COMMAND 设置为直接指向 ImageJ 可执行文件。对于您的 Fiji 安装,环境变量应设置为 C:\Users\myUserName\Fiji.app\ImageJ-win64.exe。

好的,这是我对您的脚本稍作修改的版本:

import SimpleITK as sitk

#path = "C:/Users/myUserName/Desktop/0001.DCM"
path = "C:\SimpleITK-build\SimpleITK-build\ExternalData\Testing\Data\Input\DicomSeries\Image0075.dcm"
image = sitk.ReadImage(path)

print(image.GetDimension())
sitk.Show(image, debugOn=True)

唯一的区别是我在 Show 调用中添加了 debugOn 标志。

这是我的输出:

Debug: In D:\bld\libsimpleitk_1627514864077\work\Code\IO\src\sitkImageViewer.cxx, line 495: ExecuteCommand: 'C:/Users/dchen/Fiji.app/ImageJ-win64.exe' '-eval' 'open("C:\\Users\\dchen\\AppData\\Local\\Temp\\TempFile-10808-0.mha"); rename("C:\\Users\\dchen\\AppData\\Local\\Temp\\TempFile-10808-0.mha");'


Debug: In D:\bld\libsimpleitk_1627514864077\work\Code\IO\src\sitkImageViewer.cxx, line 576: Done.  Deleting process.

您可以准确地看到 SimpleITK 正在执行以调用 Fiji 的命令。特别是,正在启动的程序是'C:/Users/dchen/Fiji.app/ImageJ-win64.exe'。

如果打开 debugOn 标志,SimpleITK 会输出什么?

【讨论】:

  • 感谢您的回复。我尝试在我的 PowerShell 中执行 $SITK_SHOW_COMMAND = "C:\Users\myUserName\Fiji.app\ImageJ-win64.exe",并确认该变量是使用 Get-Variable -Name SITK_SHOW_COMMAND 设置的。我还可以确认文件C:\Users\myUserName\Fiji.app\ImageJ-win64.exe 存在。但是我在运行 Python 代码时仍然遇到同样的错误。
  • 我在 cmd 中尝试了setx SITK_SHOW_COMMAND "C:\Users\myUserName\Fiji.app\ImageJ-win64.exe",它确实有效!现在 ImageJ 弹出并解决了问题。我不知道为什么 PowerShell 中的 $SITK_SHOW_COMMAND = 不起作用,但 cmd 中的 setx 起作用。但问题现在无论如何都解决了。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 2015-11-06
相关资源
最近更新 更多