在物理学 - 特别是医学物理学 - 伽马指数是比较来自两个粒子探测器的数据的标准。更抽象的是,伽玛索引采用两个2D数组(比如array1和array2),并将array1的每个元素与array2的空间附近元素进行比较。
有数百篇学术论文在他们的分析部分使用伽玛指数。这些论文似乎没有提到他们用来计算伽玛指数的工具/库。作者可能会实施自己的伽马指数计算(并不难)。但是,我猜测有用于计算伽玛指数的库/扩展/工具。
有人可以建议在R或Python中使用gamma索引库吗? (如果Python或R没有现成的东西,其他语言就没问题。)
答案 0 :(得分:4)
可能有点迟了但是我的贡献:
https://gist.github.com/janpipek/334c2533b87cd75c3f59
它是用Python编写的。与solvePuzzles的答案相比,这些方法接受任何维度的矩阵(前提是它们相同)。包括两种方法:一种计算每个点的伽马指数(有点长)和一个优化版本 自动排除不符合dta标准的点。
希望它对后来者有所帮助。
答案 1 :(得分:1)
有一个图书馆npgamma
。可以使用pip install npgamma
从pypi下载。
有关示例,请参阅readme。
基本用法是:
from npgamma import calc_gamma
...
gamma = calc_gamma(
coords_reference, dose_reference,
coords_evaluation, dose_evaluation,
distance_threshold, dose_threshold)
其中coords_reference
和coords_evalution
定义为(y,x,z)代表3D,(y,x)代表2D。
重要的是,此方法在参考点之间插入到用户定义的步长(默认为距离阈值的1/10)。
答案 2 :(得分:0)
我在this thesis的附录A中找到了2D伽马指数的基本MATLAB实现。
我从论文中复制/粘贴了以下代码,为了便于阅读,我进行了一些简化。我与作者交谈并确认我的代码版本(如下)是正确的。最近,我一直在医学物理研究的分析部分使用这个代码,我将很快发布。
输入A1
和A2
是2D阵列(实际上,它们是剂量图或注量图)。我们让A1
作为参考数据,A2
是正在评估的数据。如果我们使用典型的2%,2mm接受标准,那么我们将距离设置为DTA=2mm
,并设置剂量阈值dosed=0.02
,即2%。
在这个简单的实现中,我们假设数组索引以1mm的增量间隔。如果您的数据不使用1毫米增量,则相应地缩放dosed
值(例如,如果A1
和A2
增量为0.5毫米,则使用DTA=4
获取2mm标准)。
输出G
是伽马值的二维数组。
function G = gamma2d (A1, A2, DTA, dosed)
size1=size (A1) ;
size2=size (A2) ;
dosed = dosed * max(A1 ( : ) ) ; %scale dosed as a percent of the maximum dose
G=zeros ( size1 ) ; %this will be the output
Ga=zeros ( size1 ) ;
if size1 == size2
for i = 1 : size1( 1 )
for j = 1 : size1( 2 )
for k = 1 : size1( 1 )
for l = 1 : size1( 2 )
r2 = ( i - k )^2 + (j - l) ^2 ; %distance (radius) squared
d2 = ( A1( i , j ) - A2( k , l ) )^2 ; %difference squared
Ga( k , l ) = sqrt(r2 / (DTA^2) + d2/ dosed ^ 2);
end
end
G( i , j )=min(min(Ga)) ;
end
end
else
fprintf=('matrices A1 and A2 are do not share the same dimensions! \n')
end
end
要在数学符号中查看伽玛指数的解释,我建议您查看this blog post。