报错处理 ITK only supports orthonormal direction cosines. No orthonormal definition found
在使用SimpleITK
处理MRI医学图像数据的时候遇到了以下问题:
File "d:\PythonProgramme\GenerateDatasetTxt\xx.py", line 12, in <module>img = sitk.ReadImage("0000264276/T2.nii.gz")File "D:\Program Files\Anaconda3\envs\simpleitk\lib\site-packages\SimpleITK\extra.py", line 346, in ReadImagereturn reader.Execute()File "D:\Program Files\Anaconda3\envs\simpleitk\lib\site-packages\SimpleITK\SimpleITK.py", line 8015, in Executereturn _SimpleITK.ImageFileReader_Execute(self)
RuntimeError: Exception thrown in SimpleITK ImageFileReader_Execute: C:\Miniconda\envs\bld\conda-bld\work\b\ITK\Modules\IO\NIFTI\src\itkNiftiImageIO.cxx:1980:
ITK ERROR: ITK only supports orthonormal direction cosines. No orthonormal definition found!
简单翻译过来是 “ITK只支持标准正交方向。没有找到标准正交定义!”,这是一个发生在读取数据的错误,直接第一步扼杀你想处理数据的欲望。
这里先说一下解决方案,
方案一:
将SimpleITK
的版本转换至2.0.2
但如果你使用ANTsPy
这种内置ITK
的库对数据进行处理,就没办法通过切换版本解决了。
方案二:
使用nibabel
库,读取nii
数据的qform
信息和sform
信息,然后再将这些信息写回数据,并保存一份新的数据,然后就可以对新保存的数据进行SimpleITK
或ANTsPy
的读取了。
以下是处理代码,非常简单,甚至有点傻。
import nibabel as nib
img = nib.load("xxxxx.nii.gz")
qform = img.get_qform()
img.set_qform(qform)
sfrom = img.get_sform()
img.set_sform(sfrom)
nib.save(img, "xxxxx.nii.gz")
方案一是网上给出的一个解决方案,而方案二由本人自己摸索,这里简单的描述一下方案二的摸索过程,并不高深。
首先
首先一个最直接想法就是:找到源码的报错位置C:\Miniconda\envs\bld\conda-bld\work\b\ITK\Modules\IO\NIFTI\src\itkNiftiImageIO.cxx
,直接把这个相关报错的代码删了。
可惜我的电脑不存在这个路劲,而且是cxx
文件,大概是c语言的代码,经过cython还是什么其他的过程编译成了无法修改代码的形式。
然后
那就只好去网上的官方github上看看源码,看看触发错误的条件,将数据处理成不会触发错误的形式。
这是源码网址,相关报错代码在第1980
行
往上看,从1789
行到1981
行的代码都与报错代码处于同一个函数NiftiImageIO::SetImageIOOrientationFromNIfTI
下
妄想看懂这么多代码不现实,本人水平有限,但可以确定的是函数内有大量关于qform
和sform
的判断语句,我截选了一些,如下所示(觉得不适可以忽视):
总的来说,如果这些判断一个都不符合,就无法跳出该函数从而“触碰”到最后的报错代码。
再者
那么qform
和sform
是啥,这里出于经验上判断,去使用ITK-SNAP
直接查看数据的metadata
可以发现qform
的信息有点异常,NIFTI_XFORM_UNKNOWN
正好出现在源码的判断中。
依旧是直接想法,把这个信息改了。
最后
因为SimpleITK
无法读取,这里借助nibabel
库,去官方文档查阅一下是否有修改的函数。
这是官方文档:https://nipy.org/nibabel/reference/nibabel.nifti1.html
好耶,有修改的函数,可以直接设置参数code
将qform_code
或sform_code
替换成了非0值,也就是非NIFTI_XFORM_UNKNOWN
。不过红色方框的自适应设置貌似更好,但需要接收一个affine
参数。
那很好办,那原本affine
是什么,就设置成什么就行了,毕竟目的只是修改qform_code
或sform_code
。
import nibabel as nib
img = nib.load("xxxxx.nii.gz")
qform = img.get_qform()
img.set_qform(qform)
sfrom = img.get_sform()
img.set_sform(sfrom)
nib.save(img, "xxxxx.nii.gz")
再新保存文件的metadata
,果然修改成了希望的效果,随后使用SimpleITK
或ANTsPy
就可以顺利读取了。
后续N4矫正,配准都没有报错,效果也ok,因此我认为算是解决。
报错处理 ITK only supports orthonormal direction cosines. No orthonormal definition found相关推荐
- IP核Map编译报错:Buffers of the same direction cannot beplaced in series.
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 FPGA的PLL锁相环功能 在编译时IBUFG报错 IBUFG错误分析 解决办法 总结 FPGA的PLL锁相环功能 提示:这 ...
- 报错:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
1.问题 写了一个简单的单层神经网络跑mnist手写数字集,结果每次fit都会出现dead kernel 很多dead kernel首先不要急着去网上搜dead kernel怎么解决,因为大家出现的原 ...
- Oracle数据库报错【ORA-12514 】TNS 监听程序当前无法识别连接描述符中请求服务
虚拟机中搭建的linux服务器,里面安装了oracle 数据库,在真机上进行链接报错: oracle ORA-12514:TNS:listener does not currently know of ...
- Spring Cloud Stream报错:Invalid bean definition with name:bean definition with this name already exist
当想使用 Spring Cloud Stream 让微服务自己生产的消息自己消费时,如果使用的@Input("xxx")与@Output("xxx")注解中的& ...
- 解决浏览器驱动和浏览器版本不匹配的报错:This version of ChromeDriver only supports Chrome version 97
报错信息 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This versi ...
- ReactNative报错null is not an object (evaluating '_rngesturehandlermodule.default.direction')
程序报错: null is not an object (evaluating 'rngesturehandlermodule.default.direction') 解决: react-native ...
- ITK Snap 报错信息为 xml 文件不匹配
写在前面的话: 研究方向是医学图像配准,才开始学,用到ITK Snap这个软件,第一次就遇到这问题了,记录下来,防止小白踩坑~ 打开ITK Snap 报错信息为 xml 文件不匹配 如图 复制报错信息 ...
- 逻辑回归 解决报错:ValueError: Solver lbfgs supports only ‘l2‘ or ‘none‘ penalties, got l1 penalty.
逻辑回归 解决报错:ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got l1 penalty. 问题描述: 在进行 ...
- Python报错ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is compil
运行openai模块时,报错 ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is ...
最新文章
- 连信的会话加密密钥协商过程
- mysql 密码清楚_mysql 密码清除
- 4 angular 重构 项目_vuejs angularjs 框架的一些比较(vue项目重构四)
- mysql 输出当前月所有日期与对应的星期
- leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer
- BXNA在调试显示新闻的JS?
- Android之屏幕旋转之后当前activity被finish了依然被拉起来
- DRBD+keepalived+LAMP+discuz
- nodejs,webpack安装以及初步运用
- 462计算机连接错误,金蝶K3始终462错误,怎么处理???????
- wps公式如何加序号_WPS满满干货教程分享:你就是下一个职场大神
- 域名含义解释查询_域名含义解释查询
- NPOI导出Excel2007-xlsx格式文件,用于web时需要注意的问题-XSSFWorkbook处理问题
- 2011年11月-2012年10月份 历时一年的 博客回顾
- git stage 暂存_git学习小计(二):常用命令、index暂存区
- “蔚来杯“2022牛客暑期多校训练营1 J Serval and Essay(启发式合并)
- 【python--爬虫】千图网高清背景图片爬虫
- P4417 [COCI2006-2007#2] STOL
- html 苹果 地图,为什么苹果手机自带的地图是高德而不是谷歌?
- 乐学习知选择--我的J2EE技术历程
热门文章
- updater-script
- IGES格式文件分析 / IGES File Format
- OWASP TOP10 移动安全漏洞(安卓)2017
- 性能优化:一个 Flink 参数节省了 50% 的 CPU 消耗
- 在 ionic 项目中使用(迁移) capacitor
- 【论文写作】学位毕业论文怎么写,简单九步清清楚楚帮你搞定!
- 树莓派Lite:安装discuz最新版
- 【资源分享】疫情居家一个月,精心整理了一个PPT资源社区(含模板-资源-高级技巧)
- /dev/sdb1: Not enough space to build proposed filesystem while setting up superblock
- Can‘t resolve symbol ‘Depart‘解决方法