用于计算伽玛指数的库? (最好用R或Python,但任何语言都可以)

时间:2012-07-18 01:17:47

标签: python r matlab physics scientific-computing

在物理学 - 特别是医学物理学 - 伽马指数是比较来自两个粒子探测器的数据的标准。更抽象的是,伽玛索引采用两个2D数组(比如array1和array2),并将array1的每个元素与array2的空间附近元素进行比较。

有数百篇学术论文在他们的分析部分使用伽玛指数。这些论文似乎没有提到他们用来计算伽玛指数的工具/库。作者可能会实施自己的伽马指数计算(并不难)。但是,我猜测有用于计算伽玛指数的库/扩展/工具。

有人可以建议在R或Python中使用gamma索引库吗? (如果Python或R没有现成的东西,其他语言就没问题。)

3 个答案:

答案 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_referencecoords_evalution定义为(y,x,z)代表3D,(y,x)代表2D。

重要的是,此方法在参考点之间插入到用户定义的步长(默认为距离阈值的1/10)。

答案 2 :(得分:0)

我在this thesis的附录A中找到了2D伽马指数的基本MATLAB实现。

我从论文中复制/粘贴了以下代码,为了便于阅读,我进行了一些简化。我与作者交谈并确认我的代码版本(如下)是正确的。最近,我一直在医学物理研究的分析部分使用这个代码,我将很快发布。

输入A1A2是2D阵列(实际上,它们是剂量图或注量图)。我们让A1作为参考数据,A2是正在评估的数据。如果我们使用典型的2%,2mm接受标准,那么我们将距离设置为DTA=2mm,并设置剂量阈值dosed=0.02,即2%。

在这个简单的实现中,我们假设数组索引以1mm的增量间隔。如果您的数据不使用1毫米增量,则相应地缩放dosed值(例如,如果A1A2增量为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