4

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

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

任何人都可以建议在 R 或 Python 中使用 gamma 索引库吗?(如果没有现成的 Python 或 R 语言,其他语言也可以。)

4

3 回答 3

4

也许有点晚了,但我的贡献:

https://gist.github.com/janpipek/334c2533b87cd75c3f59

它是用 Python 编写的。与solvingPuzzles 的答案相比,这些方法接受任何维度的矩阵(只要它们相同)。包括两种方法:一种为每个点计算 gamma 指数(有点长),另一种是自动排除不满足 dta 标准的点的优化版本。

希望对后来者有所帮助。

于 2014-09-25T17:45:00.440 回答
1

编辑[2019]:

pymedphys中现在提供改进的 1D、2D 和 3D Gamma 测定。它基于https://doi.org/10.1118/1.2721657中描述的实现。要使用它,请执行以下操作:

pip install numpy scipy pymedphys==0.16.3 pydicom==1.3.0

那么示例用法可以是这样的:

import pydicom
import pymedphys

reference_filepath = pymedphys.data_path("original_dose_beam_4.dcm")
evaluation_filepath = pymedphys.data_path("logfile_dose_beam_4.dcm")

reference = pydicom.read_file(str(reference_filepath), force=True)
evaluation = pydicom.read_file(str(evaluation_filepath), force=True)

axes_reference, dose_reference = pymedphys.dicom.zyx_and_dose_from_dataset(reference)
axes_evaluation, dose_evaluation = pymedphys.dicom.zyx_and_dose_from_dataset(evaluation)

gamma_options = {
    'dose_percent_threshold': 1,  # This is a bit overkill here at 1%/1mm
    'distance_mm_threshold': 1,
    'lower_percent_dose_cutoff': 20,
    'interp_fraction': 10,  # Should be 10 or more, see the paper referenced above
    'max_gamma': 2,
    'random_subset': None,  # Can be used to get quick pass rates
    'local_gamma': True,  # Change to false for global gamma
    'ram_available': 2**29  # 1/2 GB
}

gamma = pymedphys.gamma(
    axes_reference, dose_reference, 
    axes_evaluation, dose_evaluation, 
    **gamma_options)

旧答案:

有一个图书馆npgamma。可以使用 .pypi 从 pypi 下载pip install npgamma

有关示例,请参阅自述文件。

基本用法是:

from npgamma import calc_gamma

...

gamma = calc_gamma(
    coords_reference, dose_reference,
    coords_evaluation, dose_evaluation,
    distance_threshold, dose_threshold)

其中coords_referencecoords_evalution定义为 3D 的 (y, x, z),2D 的 (y, x)。

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

于 2015-10-06T20:17:17.413 回答
0

我在本论文的附录 A 中找到了 2D 伽马索引的基本 MATLAB 实现。

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

输入A1A2是二维数组(实际上是剂量图或通量图)。我们让A1作为参考数据,并且A2是正在评估的数据。如果我们使用典型的 2%、2mm 接受标准,那么我们将距离一致性设置为DTA=2mm,我们将剂量阈值 设置dosed=0.02为 2%。

在这个简单的实现中,我们假设数组索引以 1mm 为增量间隔。如果您的数据不使用 1 毫米增量,则dosed相应地缩放您的值(例如,如果您的A1A2以 0.5 毫米为增量,则用于DTA=4获得 2 毫米标准)。

输出G是一个 2D 伽马值数组。

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

要查看数学符号中 gamma 索引的解释,我建议查看此博客文章

于 2012-07-24T20:42:54.670 回答