上面了解了整个二维卷积的计算过程,那么接着下来,需要看看在代码里怎么样实现这样的计算,方法当然有很多,比如自己编写代码把整个算法实现,也可以采用python的科学计算库Scipy里的功能,还可以使用OpenCV的功能。在这里主要学习后面两种卷积的编程方法。
先来学习使用scipy的方式,如果你的环境里没有安装这个库,可以使用下面的命令行来安装:
C:\Users\arm>pip install scipy
当安装成功之后,就可以使用这个库的功能了。我们目前主要使用下面这个函数来实现卷积功能:
scipy.signal.convolve2d(in1, in2, mode='full', boundary='fill', fillvalue=0)
其中参数in1是输入的二维数组;in2是输入的二维数组,代表卷积核;mode是卷积计算的三种方式:full、valid、same;boundary是边界填充方式:fill、wrap、symm;fillvalue是当边界在fill模式时填充的值,默认填充0。
在这三种卷积计算模式里,先来学习full模式,就是上面学习过在输入矩阵周围补0的计算方式,其计算图示如下:
full模式的意思是,从卷积核和图像刚相交开始做卷积,白色部分为填0,下面的例子演示这种计算方式:
#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
#计算卷积
image = np.array([[1,2],[3,4]])
k = np.array([[-1,-2],[2,1]])
c_full = signal.convolve2d(image,k,mode='full')
print(c_full)
结果输出如下:
[[-1 -4 -4]
[-1 -5 -6]
[ 6 11 4]]
https://blog.csdn.net/caimouse/article/details/51749579
转载:https://blog.csdn.net/caimouse/article/details/100652461
查看评论