本文介绍卷积3种计算方式
卷积:
我们先认为图片是由不同的波形组成。在时域空间下,图片就是我们看到的图片,由很多不同频率波形混杂在一起。频域空间下,图片波型变的离散化,可以清楚看到每一个波形的å频率(这块解释非常的粗糙,如果看不明白,搜一下时域图和频域图)。在时域空间下,我们很难把一张图片上噪音完全过滤掉,一种做法,我认为是遍历整张图片,然后修改噪音部分,类似PS过程。另一种办法是将图片转换到频域空间下,开启上帝视角,直接滤掉某一固定频率的波,之后在转回时域空间。
对于后一个操作是:傅里叶变化->滤波->反傅里叶变化
再来看一下卷积算法:
F(f*g) = F(f)F(g)
也就是两个函数的卷积等于两个函数傅里叶变化后乘积的反傅里叶变化。
那么,可以将卷积运算对应于上述操作,个人觉得可以作为为什么CNN用卷积操作可以提取图像特种的解释。同时,这也提供了一种计算卷积的方法。
1.概念计算
这是我们最容易想明白并且可以很快自己实现的一种算法。
1)从左上到右下,对位相乘相加,然后移位。
def convolve2d(img, kernel):
k_w = kernel.shape[0]
def calc(pos_x, pos_y):
sum = 0
for i in range(k_w):
for j in range(k_w):
sum += img[pos_x+i][pos_y+j] * kernel[i][j]
return sum
rtval = np.array(np.zeros([img.shape[0], img.shape[