Pyradiomics: 稳定小波变换输出的动态合并

创建于 2016-04-26  ·  14评论  ·  资料来源: AIM-Harvard/pyradiomics

重新计算面元边缘和面元宽度,以保持所有归一化平稳小波变换输出的面元计数一致。

enhancement help wanted

所有14条评论

可能的解决方案是应用imageoperations._scaleToOriginalRange ,以确保已过滤图像的最大值等于原始图像的最大值。 目前,这已应用于平方,平方根,对数和指数过滤器。

现在考虑一下,当最小值更改时,此功能尚未解决。
这可以通过移动已过滤的图像来完成,以便最小值在应用缩放后匹配(应该以这样的方式定义,即在移动/缩放后,已过滤的图像最大值与原始最大值匹配)。 换句话说,重新缩放/移动过滤后的图像以使其与原始图像的范围匹配。

我想知道我们是否真的需要保持垃圾箱计数不变。 经过小波运算后,这真的有意义吗?

我认为不将小波滤波的灰度范围缩放到原始图像是可以的(假设分解的一阶统计量在数据集的图像之间是可比较的)。

而是,计算原始图像的bincount(“ Ng”)类似于glcm。 初始化
https://github.com/Radiomics/pyradiomics/blob/master/radiomics/glcm.py#L86

然后,确定产生上述bincount的binwidth(针对每个分解),并将该binwidth传递给glcm,glrlm,glszm(再次针对每个分解)。

我认为这最好地将原始图像容器映射到它们相应的“小波变换”容器,而无需重新缩放/压缩从变换获得的数据。

好久不见了@ vnarayan13 ! 谢谢你的评论

另外,我认为这里检索数据= LLL.copy()的循环是多余的,因为它发生在主dec循环中:
https://github.com/Radiomics/pyradiomics/blob/master/radiomics/imageoperations.py#L217

另外,“数据”应该重命名为“ approximation_data”,也许应该只包含在“ dec”字典中,因为它与其他分解方法一样被对待吗? 返回“近似,ret”只是为了模拟pywavelets中2D函数的返回结构。

当前,已经可以为单独的过滤器设置自定义kwargs ,这使得可以为单独的过滤器使用不同的固定binwidth(例如,原始过滤器为25,日志记录为5)

另外,我认为这里检索数据= LLL.copy()的循环是多余的,因为它发生在主dec循环中:
https://github.com/Radiomics/pyradiomics/blob/master/radiomics/imageoperations.py#L217

第一个循环是将数据获取到start_level指定的正确级别。 因此,此循环不是多余的。 但是,我希望它很少被使用,因为通常也会考虑第一级小波。

@ Radiomics / developers遵循@ vnarayan13的想法,是否对所有过滤的图像都使用固定的bincount是通过在原始图像上应用固定的binWidth来设置的解决方案?
我们是否要将此设置为可选(即提供一个称为“ dynamicBinning”的设置)?

因此,总的来说,我认为我们有以下选择:

  • 什么都不做,保持一个固定的binWidth
  • 允许用户基于每个过滤器指定binWidths(当前状态)
  • 将图像(线性,Z分数)归一化到固定范围或基于原始图像的范围
  • 动态合并:在每个过滤器的基础上重新计算binWidth
  • 动态装箱:在原始图像上使用binWidth,在过滤后的图像上使用结果binCount
  • [对所有分级使用固定的binCount(在上次会议中讨论,不建议)]

我建议我们决定采用一种单一的方式来处理此问题,或者至少仅提供数量非常有限的选项。

在这种情况下,使用上述选项的带有标签的训练数据上的analytics / ml管道的结果可能会确定哪个发出更强的信号,应将其作为默认选择。

是否有计划在将来的版本中将动态装箱作为功能包括在内?

我正在尝试从原始MR图像及其小波变换中提取三维像素特征,但是我在启用“ dynamicBinning”方面遇到了困难。

在我的.yaml文件中,我尝试了以下操作:

图像类型:
原来的: {}
小波:{}
FeatureClass:
glcm:
-“自相关”
-'JointAverage'
环境:
归一化:真
normalizeScale:100
插值器:'sitkBSpline'
resampledPixelSpacing:[2,2,2]
binWidth:60
dynamicBinning:正确

voxelArrayShift:300
标签:1
force2D:错误

体素设置:
kernelRadius:1
maskedKernel:正确
initValue:nan
体素批次:10000

(我应该像在这里一样为原始图像提供“ binWidth”参数吗?)但是,这给了我以下错误代码:

---所有发现的错误---
[“未定义键'dynamicBinning'。路径:'/ setting'”]]
追溯(最近一次通话):
文件 ” “,第152行,在
__init__中的第59行中的文件“/Users/…/radiomics/featureextractor.py”
self._applyParams(paramsFile = args [0])
_applyParams中的文件“/Users/…/featureextractor.py”,第158行
参数= c.validate()
验证中的文件“/Users/…/core.py”,第167行
error_msg = u'。\ n-'.join(self.validation_errors)))
pykwalify.errors.SchemaError:

  • 未定义键“ dynamicBinning”。 路径:“ / setting” 。:路径:“ /”>

我在参数文件中弄错了吗? 我正在使用2.1.2.post61 + g3efae04版本。

@ sha168 ,没有您的参数文件看起来不错。 错误的原因是PyRadiomics版本。 您正在使用当前的母版,但尚未实现动态装箱功能。 如果要使用此功能,则需要检出implement-dynamic-binning分支,该分支位于的PyRadiomics
如果您随后从该分支进行安装,则它应该可以工作。

好的,谢谢您的快速回复! 此分支中已解决此问题的错误https://github.com/Radiomics/pyradiomics/issues/456吗?

@ sha168 ,我只是在当前master上重新建立了分支,因此,如果您使用commit af7f32b检出了分支,则可以。

此页面是否有帮助?
0 / 5 - 0 等级