scipy 图像分析高斯滤波器的优化与加速

w1jd8yoj  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(160)

我正在寻找一种方法来加速下面的代码。这个代码块是我开发的一个图像分析管道的简化版本,但主要结构在那里。我确实需要高斯滤波器。因为它是一个我无法控制的源代码,我决定在示例中保留它。
stack的定义中,我已经包含了我使用的图像的大小,它们大约是200帧,分辨率是1024, 512
有没有办法用Python来加速这个过程?

import numpy as np
import time
from scipy import ndimage as ndi
 
def gauss(stack):
    for i in range(stack.shape[0]):
        stack[i,:,:] -= ndi.gaussian_filter(stack[i, :, :], 10)
    return stack

stack = np.random.randint(0, 20, size=(200,1024,512))
t = time.time()
gs = gauss(stack)
print(f"{time.time() - t:0.3f} seconds")
rxztt3cl

rxztt3cl1#

如果你不介意失去一点"精度"(你可能不会注意到差异),你可以使用高斯滤波器的truncate参数(默认值是4.0),例如截断到2个sigma(至少到3)。

import numpy as np
import time
from scipy import ndimage as ndi

def gauss(stack, truncate):
    for i in range(stack.shape[0]):
        stack[i, :, :] -= ndi.gaussian_filter(stack[i, :, :], 10, truncate=truncate)
    return stack

for truncate in [4, 3, 2]:
    stack = np.random.randint(0, 20, size=(200, 1024, 512))
    t = time.time()
    gs = gauss(stack, truncate=truncate)
    print(f"truncate {truncate}: {time.time() - t:0.3f} seconds")
truncate 4: 8.462 seconds
truncate 3: 6.021 seconds
truncate 2: 4.257 seconds

相关问题