在某一点应用过滤器

时间:2019-06-18 09:55:55

标签: python numpy scipy

我有一组非常大的滤镜(总计9015,每个910 x 910),我想将它们应用于图像中的某些特定点(<10000)。基本上,这些滤镜非常大的原因是每个滤镜只能应用于一个点,但仍要考虑整个图像。我想做的事(应用滤镜/卷积)背后的数学运算非常简单(即,将滤镜的元素逐个乘以图像,然后在每个维度上逐个元素求和。)以下是一个实现我用python和numpy(其中...表示内存中用于存储结果的区域)编写的内容:

for q in range(3): # A variable to iterate through the color channels, given that the filters are only 2 dimensional
    for i in range (len(filters)):
            ... = np.floor(np.sum(np.sum(filters[:,:,i] * img[:,:,q], axis = 1), axis = 0) + 0.5)
# Note that filters[:,:,i] selects the correct filter for the current given point

但是,这在我功能强大的机器上花费了非常长的时间(大约280秒)。在这种情况下,我尝试使用库函数来希望加快速度(因为我认为它们已经过高度优化) ),但类似(在此处重新应用与上面相同的注释)

for q in range(3):
        for i in range (len(filters)):
            ... = scipy.ndimage.convolve(img[:,:,q], filters[:,:,i]))

没有太大帮助。 (我什至无法计时。这几乎可以肯定是因为这里要执行的计算数量要高得多,因为它使用极大的过滤器来计算图像中每个点的像元值。)在这一点上,我正在寻找加快速度的方法,但我仍然相信库函数是正确的选择。如果有一个函数在一点上进行卷积,或者正如我在标题中所提到的那样,在某个点上应用了过滤器,那么我可以遍历较少的兴趣点(而不是整个图像),将其称为这些点上的库函数。还是有一些函数需要一组索引来进行卷积运算?或者也许有一种方法可以重塑数据,使库卷积函数仅在某些点运行?

python,numpy,scipy等中是否有任何具有此功能的函数?

0 个答案:

没有答案