与 cupy 的自相关

Autocorrelation with cupy

我想在 GPU 上计算图像的自相关。 但是,当我使用 cupy correlate 函数时,我得到的结果与 CPU 计算的结果不同。是因为cupyx.scipy.ndimage.correlate通过统一图像的自相关自动归一化结果吗?

import numpy as np
import scipy.signal as sc
import cupy as cp
import cupyx.scipy.ndimage as cnd
from matplotlib import pyplot as plt

ones = np.ones((128,128))

corr_cpu = sc.correlate2d(ones,ones)
corr_gpu = cnd.correlate(cp.array(ones),cp.array(ones))

plt.figure()
plt.imshow(corr_cpu)
plt.colorbar()
plt.title('Correlation CPU')

plt.figure()
plt.imshow(cp.asnumpy(corr_gpu))
plt.colorbar()
plt.title('Correlation GPU')
plt.show()

CPU result

GPU result

好的找到答案了: cupyx.scipy.ndimage.correlate 默认使用 mode='reflect',而 scipy.correlate 使用 'constant'.

所以 'constant' for cupy 现在给出与 scipy 函数相同的结果