本文转自:知乎
作者:djh理解二维数组的卷积
比如说如下两个数组进行卷积Mr Mc 为数组A的行列数
我们计算下
C(2,2) = 1*1+1*0+1*1+0*0+1*1+1*0+0*1+0*0+1*1 = 4;
其实就是下面的六个数和右边的六个数相乘。
红色部分我们称之为卷积核。它对原始数据进行一定的处理。通常使用图像来做比喻会让人更明白。
我对数学研究不深所以拿别人的几种卷积核进行对比下。
通用的几种卷积核。(3*3)为例子
原始图像:
数据不变的卷积核。
代码如下:
img = plot.imread("test.jpeg")
nuclearNothing = np.array([[0,0,0],
[0,1,0],
[0,0,0]])
nuclearNothingFilter = cv2.filter2D(img,-1,nuclearNothing)
plot.imshow(nuclearNothingFilter)
plot.show()
效果
边沿检测的卷积核
代码如下:
nuclearNothing = np.array([[0,-1,0],
[0,1,0],
[0,0,0]])
nuclearNothingFilter = cv2.filter2D(img,-1,nuclearNothing)
plot.imshow(nuclearNothingFilter)
plot.show()
当然上面的是竖直方向的,下面的是水平方向的
nuclearNothing = np.array([[0,0,0],
[-1,1,0],
[0,0,0]])
nuclearNothingFilter = cv2.filter2D(img,-1,nuclearNothing)
plot.imshow(nuclearNothingFilter)
plot.show()
图像锐化滤波器
我们拿一种举例
nuclearNothing = np.array([[0,-1,0],
[-1,5,-1],
[0,-1,0]])
nuclearNothingFilter = cv2.filter2D(img,-1,nuclearNothing)
plot.imshow(nuclearNothingFilter)
plot.show()
均值模糊
nuclearNothing = np.array([ [0,0.5,0],
[0.5,0,0.5],
[0,0.5,0]])
nuclearNothingFilter = cv2.filter2D(img,-1,nuclearNothing)
plot.imshow(nuclearNothingFilter)
plot.show()
其他
关注我不迷路,目前只是一些入门级的小文章,后面会有AI系列文章推送。
https://github.com/yazone/ai_learning_path
http://weixin.qq.com/r/5y-Ty4PEcd4Orceo93r1 (二维码自动识别)
推荐阅读
更多嵌入式AI技术干货请关注嵌入式AI专栏。
-END-