软件版本: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。
- 在 Slicer 中,进入 Edit > Application Settings > Modules,找到 Temporary Directory 设置,将其更改为一个英文路径(例如
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。
综合建议
- 尝试将 Slicer 的临时文件目录更改为不包含中文或特殊字符的路径。
- 检查 DICOM 图像的间距,并根据提示进行校准。
- 在 Slicer 中重新安装 Radiomics 扩展模块,并确认 SimpleITK 能正常工作。
- 确保 Slicer 运行在管理员权限下,避免权限限制。
- 检查 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.")
希望这些方法可以帮助您解决问题。如果问题仍然存在,可以进一步排查日志中的细节。