本篇博客讲述对图像进行均值滤波,中值滤波,高斯滤波,高斯边缘检测
滤波的意义在于:刚获得的图像有很多噪音。这主要由于平时的工作和环境引起的,图像增强是减弱噪音,增强对比度。想得到比较干净清晰的图像并不是容易的事情。为这个目标而为处理图像所涉及的操作是设计一个适合、匹配的滤波器和恰当的阈值。
(1) 均值滤波器:最简单均值滤波器是局部均值运算,即每一个像素只用其局部邻域内所有值的平均值来置换.
(2) 高斯平滑滤波器是一类根据高斯函数的形状来选择权值的线性滤波器。 高斯平滑滤波器对去除服从正态分布的噪声是很有效的。
非线性滤波器:
(1) 中值滤波器:均值滤波和高斯滤波运算主要问题是有可能模糊图像中尖锐不连续的部分。
中值滤波器的基本思想使用像素点邻域灰度值的中值来代替该像素点的灰度值,它可以去除脉冲噪声、椒盐噪声同时保留图像边缘细节。
中值滤波不依赖于邻域内与典型值差别很大的值,处理过程不进行加权运算。
中值滤波在一定条件下可以克服线性滤波器所造成的图像细节模糊,而对滤除脉冲干扰很有效。
代码展示:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('../img/test14.bmp')
print(img.shape)
#对图像进行均值滤波
img_mean = cv2.blur(img, (5, 5))
cv2.putText(img_mean,"img_mean",(50,50),cv2.FONT_HERSHEY_SIMPLEX,1.5,(255,0,0),4)
#对图像进行中值滤波
img_median = cv2.medianBlur(img, 5)
cv2.putText(img_median,"img_median",(50,50),cv2.FONT_HERSHEY_SIMPLEX,1.5,(255,0,0),4)
#对图像进行高斯滤波
img_Guassian = cv2.GaussianBlur(img,(5,5),0)
cv2.putText(img_Guassian,"img_Guassian",(50,50),cv2.FONT_HERSHEY_SIMPLEX,1.5,(255,0,0),4)
#对图像进行高斯边缘检测 下面的三行是我自己乱写的,我实际上用的是拉普拉斯算子
laplacian = cv2.Laplacian(img_Guassian, cv2.CV_16S, ksize=5)
dst = cv2.convertScaleAbs(laplacian)
cv2.putText(dst,"img_bilater",(50,50),cv2.FONT_HERSHEY_SIMPLEX,1.5,(255,0,0),4)
#图像显示
cv2.imshow("img_bilater",dst)
cv2.imshow("gussianEdgeDetection",gas)
cv2.imshow("img",img)
cv2.imshow("img_mean",img_mean)
cv2.imshow("img_median",img_median)
cv2.imshow("img_Guassian",img_Guassian)
cv2.waitKey(0)
cv2.destroyAllWindows()
查看某些资料,高斯滤波被某些大佬这样写,仅借鉴!!
gau_matrix = np.asarray([[-2/28,-5/28,-2/28],[-5/28,28/28,-5/28],[-2/28,-5/28,-2/28]])
img1 = np.zeros(img.shape)
hight,width,v = img.shape
for i in range(1,hight-1):
for j in range(1,width-1):
img1[i-1,j-1] = np.sum(img[i-1:i+2,j-1:j+2]*gau_matrix)
gas = img1.astype(np.uint8)
cv2.putText(gas,"gussianEdgeDetection",(50,50),cv2.FONT_HERSHEY_SIMPLEX,1.5,(255,0,0),4)
运行效果图: