from PIL import Image import numpy as np import matplotlib.pyplot as plt def main(): im = Image.open("D:\temp\img\bw.jpg") res=conv2(im,kv).astype(dtype="uint8") print(res) img2=Image.fromarray(res) img2.show() #计算结果可能不在[0,255]之间 def Relu2(a): if a<0: return 0 if a>255: return 255 #被卷积的图片,卷积核 def conv2(im,kk): matrix = np.asarray(im) m1 = matrix[:, :, 0] m2 = matrix[:, :, 1] m3 = matrix[:, :, 2] matrix1=conv(m1,kk) matrix2=conv(m2,kk) matrix3=conv(m3,kk) return np.dstack((matrix1,matrix2,matrix3)) #整体边缘滤波器 ke=np.array([ [0,-4,0],[-4,16,-4],[0,-4,0] ]) #水平边缘滤波器 kh=np.array([ [1,2,1],[0,0,0],[-1,-2,-1] ]) #垂直边缘滤波器 kv=np.array([ [1,0,-1],[2,0,-2],[1,0,-1] ]) #被卷积一维矩阵,卷积核 def conv(mx,kmx): v1=mx.shape[0] v2=mx.shape[1] kv1=kmx.shape[0] kv2=kmx.shape[1] l1=v1-kv1 l2=v2-kv2 res=np.zeros((l1,l2)) for i in range(l1): for j in range(l2): res[i][j]=Relu2((mx[i:i+kv1,j:j+kv2]*kmx).sum()) return res main()
图像读出来是个三维矩阵,对每个通道使用不同卷积核卷积,观察效果
效果:
整体边缘滤波器:
水平边缘滤波器:
垂直边缘滤波器:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:卷积核—-图片边缘滤波器 - Python技术站