- 原理
- 卷积操作是对图像处理时,经常用到的一种操作。它具有增强原信号特征,并且能降低噪音的作用。 那么具体是如何计算的呢?
- 运算步骤:
-
将算子围绕中心旋转180度
-
滑动算子,使其中心位于输入图像g的(i,j)像素上
-
利用公式求和,得到输出图像的(i,j)像素值
(2,4)元素值= 1* 2+ 8* 9+15* 4
+ 7* 7+14* 5+16* 3
+13* 6+20* 1+22* 8=575 -
重复2),3),直到求出输出图像的所有像素值
- 卷积操作是对图像处理时,经常用到的一种操作。它具有增强原信号特征,并且能降低噪音的作用。 那么具体是如何计算的呢?
- 一维卷积代码实现
# scipy的signal模块经常用于信号处理,卷积、傅里叶变换、各种滤波、差值算法等。
# 二维的卷积需要用signal.convolve2d()
import scipy as sp
print(sp.convolve([1,2,3,4],[4,5,6])) # [ 4 13 28 43 38 24]
# 自己实现一维卷积
def convDemo(list1,list2):
len1=len(list1)
len2=len(list2)
list1.reverse()
result=[]
for i in range(1,len1+1):
t=list1[len1-i:] # str1=[1,2,3] str2=[4,5,6,7]
# len(str1)=3 i=1, 3-1=2下标,str1=[1,2,(3)]
# i=2, 3-2=1下标, str1=[1,(2,3)]
res_tmp=sum([item1*item2 for item1,item2 in zip(t,list2)])
result.append(res_tmp)
for i in range(1,len2):
t=list2[i:]
re2=sum(item1*item2 for item1,item2 in zip(list1,t))
result.append(re2)
return result
result=convDemo([1,2,3,4],[4,5,6])
print(result) # [4, 13, 28, 43, 38, 24]
# print(list(zip([2,3],[4,5,6,7]))) # [(2, 4), (3, 5)]