python - 在某一点应用过滤器
问题描述
我有一组非常大的过滤器(总共 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 等中是否有任何具有此功能的函数?
解决方案
推荐阅读
- tensorflow - Keras:改变步幅似乎并没有改变 conv2d/conv3d 中的参数数量
- if-statement - 在 SASS 中的 if 语句中使用“每个循环变量”
- r - 电源点损坏使用官员
- c# - 如何在uwp中的ListView的选定项目上显示选中的复选框
- sat - 我正在使用 Sugar(基于 SAT 的约束求解器)进行实验
- python - 使用 Asana api 在 Asana 中创建带有附件的任务
- javascript - 动态添加输入字段值jQuery
- ios - 如何防止iOS应用被暂停
- c++ - std::initializer 列表全局/静态对象的生命周期
- python - 将flask应用程序部署到nginx web服务器后,swagger记录未加载