Radiomios Apply后只输出标题行, 下面没有数据

软件版本:5.6.1
问题描述:初次使用,Segment Editor勾画完靶区后,用Radiomios输出,结果只有标题行,没有数据,用师兄的电脑就没问题。网上查了很多办法都行不通。

提示代码

Python 3.9.10 (main, Dec 12 2023, 02:25:18) [MSC v.1935 64 bit (AMD64)] on win32

日志文件

[Python] 在检查可加载的 1: ES [1] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [10] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [11] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [12] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [13] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [14] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [15] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [16] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [17] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [18] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [19] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [2] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [20] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [21] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [22] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [23] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [24] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [25] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [3] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [4] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [5] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [6] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [7] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [8] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

[Python] 在检查可加载的 1: ES [9] 时,DICOM插件 图片序列 告警:为了准确测量尺寸,可能需要校准图像间距。

…[VTK] ReadImageInformation: Error reading C:/Users/ͮ��/AppData/Local/Temp/Slicer/CAGFG_vtkMRMLScalarVolumeNodeB.nrrd:

[VTK] [nrrd] nrrdLoad: fopen(“C:/Users//AppData/Local/Temp/Slicer/CAGFG_vtkMRMLScalarVolumeNodeB.nrrd”,“rb”) failed: No such file or directory

[VTK]

[VTK] [2024-11-11 15:39:25] I: radiomics.script: Processing results…

[VTK] [2024-11-11 15:39:25] I: radiomics.script: Finished segment-based extraction successfully…

[Qt] DirectWrite: CreateFontFaceFromHDC() failed (指示输入文件 (例如字体文件) 中的错误。) for QFontDef(Family=“ADMUI3Lg”, pointsize=9.75, pixelsize=13, styleHint=2, weight=50, stretch=100, hintingPreference=0) LOGFONT(“ADMUI3Lg”, lfWidth=0, lfHeight=-13) dpi=144

[Qt] DirectWrite: CreateFontFaceFromHDC() failed (指示输入文件 (例如字体文件) 中的错误。) for QFontDef(Family=“ADMUI3Sm”, pointsize=9.75, pixelsize=12, styleHint=2, weight=50, stretch=100, hintingPreference=0) LOGFONT(“ADMUI3Sm”, lfWidth=0, lfHeight=-12) dpi=144

.Done

b’[2024-11-11 15:39:25] I: radiomics.script: Starting PyRadiomics (version: v3.1.0.post2+g146e3bd)\r\n[2024-11-11 15:39:25] I: radiomics.script: Processing input…\r\n[2024-11-11 15:39:25] I: radiomics.featureextractor: Loading parameter file C:/Users/\xcd\xae\xd3\xee/AppData/Local/Temp/Slicer\RadiomicsLogicParams.json\r\n[2024-11-11 15:39:25] I: radiomics.featureextractor: Applying custom setting overrides: {'label': 1, 'correctMask': True}\r\n[2024-11-11 15:39:25] I: radiomics.script: Input valid, starting sequential extraction from 1 case(s)…\r\n[2024-11-11 15:39:25] I: radiomics.script: Processing case 1\r\n[2024-11-11 15:39:25] I: radiomics.featureextractor: Calculating features with label: 1\r\n[2024-11-11 15:39:25] I: radiomics.featureextractor: Loading image and mask\r\n[2024-11-11 15:39:25] E: radiomics.script: Feature extraction failed!\r\nTraceback (most recent call last):\r\n File “D:\3Dslicer\Slicer 5.6.1\slicer.org\Extensions-32438\SlicerRadiomics\Lib\site-packages\radiomics\scripts\segment.py”, line 70, in _extractFeatures\r\n feature_vector.update(extractor.execute(imageFilepath, maskFilepath, label, label_channel))\r\n File “D:\3Dslicer\Slicer 5.6.1\slicer.org\Extensions-32438\SlicerRadiomics\Lib\site-packages\radiomics\featureextractor.py”, line 272, in execute\r\n image, mask = self.loadImage(imageFilepath, maskFilepath, generalInfo, **_settings)\r\n File “D:\3Dslicer\Slicer 5.6.1\slicer.org\Extensions-32438\SlicerRadiomics\Lib\site-packages\radiomics\featureextractor.py”, line 371, in loadImage\r\n image = sitk.ReadImage(ImageFilePath)\r\n File “D:\3Dslicer\Slicer 5.6.1\lib\Python\Lib\site-packages\SimpleITK\extra.py”, line 355, in ReadImage\r\n return reader.Execute()\r\n File “D:\3Dslicer\Slicer 5.6.1\lib\Python\Lib\site-packages\SimpleITK\SimpleITK.py”, line 6249, in Execute\r\n return _SimpleITK.ImageFileReader_Execute(self)\r\nRuntimeError: Exception thrown in SimpleITK ImageFileReader_Execute: D:\D\S\S-0-build\ITK\Modules\IO\NRRD\src\itkNrrdImageIO.cxx:292:\r\nitk::ERROR: NrrdImageIO(0000027B41286620): ReadImageInformation: Error reading C:/Users/\xcd\xae\xd3\xee/AppData/Local/Temp/Slicer/CAGFG_vtkMRMLScalarVolumeNodeB.nrrd:\r\n[nrrd] nrrdLoad: fopen(“C:/Users//AppData/Local/Temp/Slicer/CAGFG_vtkMRMLScalarVolumeNodeB.nrrd”,“rb”) failed: No such file or directory\r\n\r\n[2024-11-11 15:39:25] I: radiomics.script: Processing results…\r\n[2024-11-11 15:39:25] I: radiomics.script: Finished segment-based extraction successfully…\r\n’

[Qt] DirectWrite: CreateFontFaceFromHDC() failed (指示输入文件 (例如字体文件) 中的错误。) for QFontDef(Family=“Fixedsys”, pointsize=9.75, pixelsize=16, styleHint=2, weight=50, stretch=100, hintingPreference=0) LOGFONT(“Fixedsys”, lfWidth=0, lfHeight=-16) dpi=144

[Qt] QWindowsWindow::setGeometry: Unable to set geometry 2618x1346+0+34 (frame: 2640x1402-11-11) on QWidgetWindow/“qSlicerMainWindowWindow” on “\.\DISPLAY1”. Resulting geometry: 2160x1346+0+34 (frame: 2182x1402-11-11) margins: 11, 45, 11, 11 minimum size: 1309x410 MINMAXINFO maxSize=0,0 maxpos=0,0 mintrack=2640,876 maxtrack=0,0)

从您提供的调试信息和错误日志来看,主要问题似乎在于 Radiomics 扩展在提取特征时无法正确加载生成的 NRRD 图像文件。这可能是由于以下原因之一导致的:

1. 临时文件路径问题

  • 日志中显示 C:/Users//AppData/Local/Temp/Slicer/CAGFG_vtkMRMLScalarVolumeNodeB.nrrd 文件路径存在问题(文件路径不完整或乱码),导致 Radiomics 扩展无法找到所需的 NRRD 文件。
  • 解决方法:您可以尝试更改 Slicer 的临时文件夹路径,确保路径没有中文或特殊字符。
    • 在 Slicer 中,进入 Edit > Application Settings > Modules,找到 Temporary Directory 设置,将其更改为一个英文路径(例如 C:/Temp),然后重启 Slicer。

2. DICOM 图像间距校准

  • 日志中的多条警告提示您的 DICOM 图片序列可能需要校准图像间距。图像间距不准确会影响 Radiomics 的计算结果,甚至导致空输出。
  • 解决方法:在 Slicer 中使用 Volumes 模块,检查并手动设置图像的间距。如果不确定间距,可以与师兄的设备上加载的相同图像进行对比。

3. SimpleITK 读取错误

  • 错误日志显示 SimpleITK 在读取 NRRD 文件时出现异常。这可能与 SimpleITK 的安装或 Slicer 环境配置有关。
  • 解决方法:尝试重新安装 Slicer 的 Radiomics 扩展模块。您可以从 Extensions Manager 中卸载 Radiomics,然后重新安装。确保安装后重启 Slicer。

4. 字体与显示问题

  • 从错误信息 [Qt] DirectWrite: CreateFontFaceFromHDC() failed... 可以看出,Slicer 在渲染字体时出现了一些问题。这可能与系统字体设置或 Slicer 的渲染设置有关,尽管它不直接影响 Radiomics 输出,但可能会导致界面异常。
  • 解决方法:检查系统字体设置,确保没有缺失或损坏的字体文件,或尝试更新显卡驱动,确保 Slicer 界面渲染正常。

5. 权限问题

  • 如果 Slicer 没有权限写入或访问临时目录,可能会导致 NRRD 文件无法生成。
  • 解决方法:确保 Slicer 以管理员权限运行,或将临时目录更改为具有完全访问权限的位置。

6. Slicer 版本兼容性问题

  • 您的 Slicer 版本为 5.6.1,如果师兄的版本不同,可能是版本兼容性问题。
  • 解决方法:确认师兄使用的 Slicer 版本。如果 Radiomics 模块在该版本上运行良好,您可以尝试安装相同版本的 Slicer。

综合建议

  1. 尝试将 Slicer 的临时文件目录更改为不包含中文或特殊字符的路径。
  2. 检查 DICOM 图像的间距,并根据提示进行校准。
  3. 在 Slicer 中重新安装 Radiomics 扩展模块,并确认 SimpleITK 能正常工作。
  4. 确保 Slicer 运行在管理员权限下,避免权限限制。
  5. 检查 Slicer 版本是否与师兄一致,以排除版本兼容性问题。

示例代码检查 NRRD 文件路径(可选)

如果您想在脚本中检查临时 NRRD 文件是否生成,可以使用以下示例代码:

import os
nrrd_path = slicer.util.tempDirectory() + "/CAGFG_vtkMRMLScalarVolumeNodeB.nrrd"
if os.path.exists(nrrd_path):
    print("NRRD file exists.")
else:
    print("NRRD file not found. Check temporary directory path and permissions.")

希望这些方法可以帮助您解决问题。如果问题仍然存在,可以进一步排查日志中的细节。