图像卷积函数的矢量化实现

2024-09-30 20:39:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道numpy包含一个卷积函数。在

问题是我需要自己写,我可以用这种形式简单地写出来(类似这样):

for i in range(-1, 2):
    for j in range(-1, 2):
         pixel[position1] += pixel[position2]*kernel[position3]

但我需要写一个矢量化的实现,有什么帮助吗?在

谢谢。在

注意:我已经在使用numpy和scipy,但是为了练习,我需要编写自己的函数。在


Tags: 函数innumpyforrangescipykernel卷积
1条回答
网友
1楼 · 发布于 2024-09-30 20:39:04

编写自己的卷积可以提供更快的计算速度,尤其是当你有一个包含大量1和0的小内核时

kernel = array([[0, 1, 0],
                [1,-4, 1],
                [0, 1, 0]])

可以写成

^{pr2}$

这里的优点是只有一次乘法和四次加法运算,而做完整的普通卷积就等于九次乘法和加法。另外,尽管scipy有一个2d卷积,但是numpy本身没有。在

这只是一种基本的方法,有一些方法可以加快速度(例如,使用临时数组或就地计算),而且还必须决定在边界上做什么;尽管通常上面的方法是正确的。在

相关问题 更多 >