一.定义图像与kernel进行卷机
#convolve
def imgConvolve(img,kernel):
rows,cols=img.shape
kernel_rows,kernel_cols=kernel.shape
padding_rows,padding_cols=int((kernel_rows-1)/2),int((kernel_cols-1)/2)
convolve_rows=rows+2*padding_rows
convolve_cols=cols+2*padding_cols
img_padding=np.zeros((convolve_rows,convolve_cols))
img_padding[padding_rows:padding_rows+rows,padding_cols:padding_cols+cols]=img[:,:]
img_convolve=np.zeros((rows,cols))
for i in range(padding_rows,padding_rows+rows):
for j in range(padding_cols,padding_cols+cols):
img_convolve[i-padding_rows][j-padding_cols]=int(np.sum(img_padding
[i-padding_rows:i+padding_rows+1,
j-padding_cols:j+padding_cols+1]*kernel))
return img_convolve
本次采用的原图像
二.均值滤波
线性滤波算法,用模板中的全体像素的平均值来代替原来像素值,对噪声图像特别是有大的孤立点的图像非常敏感,即使有极少数量点存在较大差异也会导致平均值的明显波动
def imgAverageFilter(img,kernel):
return imgConvolve(img,kernel)*(1.0/kernel.size)
filter 3x3
kernel=np.random.randint(3,size=(3,3))
img=cv2.imread('IMG_4470.JPG',0)
new_img=imgAverageFilter(img,kernel)
cv2.imwrite('IMG_4470_Average_33.JPG',new_img)
得到图像为: