小言_互联网的博客

在OpenCV里实现二维离散卷积2

441人阅读  评论(0)

上面了解了整个二维卷积的计算过程,那么接着下来,需要看看在代码里怎么样实现这样的计算,方法当然有很多,比如自己编写代码把整个算法实现,也可以采用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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场