与 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 函数相同的结果
我想在 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 函数相同的结果