对比Opencv使用图像滤波法处理噪音点

开局一张图,剩下全靠分析
在这里插入图片描述
首先导入数据

img = cv2.imread('lenaNoise.png')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

1、我们使用的是均值滤波

# 均值滤波
# 简单的平均卷积操作
blur = cv2.blur(img, (3, 3))
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

可能小伙伴会发现我在代码注释中写的是平均卷积操作,那是因为这个的操作和卷积的操作很相似。选择一个卷积核 f=(3,3)(卷积核大小一般为奇数)。然后和图像所对应的区间进行对应相乘再相加,当然既然是平均肯定需要除以总个数的。

# 方框滤波
# 基本和均值一样,可以选择归一化
box = cv2.boxFilter(img,-1,(3,3), normalize=True)  
cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

方框滤波其实和均值滤波很相似,当参数normalize=True时,和均值滤波是没有区别的。当参数normalize=Flase时,像素容易越界,此时和均值滤波有很大差别。

# 高斯滤波
# 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
aussian = cv2.GaussianBlur(img, (5, 5), 1)  
cv2.imshow('aussian', aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

高斯滤波是一种高斯函数所产生的一种滤波方法。其原理就是根据高斯函数原理,越靠近中心的数据占比越大。根据位置不同分配不同的数据权重。

# 中值滤波
# 相当于用中值代替
median = cv2.medianBlur(img, 5)  # 中值滤波
cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

中值滤波是指使用卷积核对应区域熟知的中值进行替代。

# 展示所有的
res = np.hstack((blur,aussian,median))
#print (res)
cv2.imshow('median vs average', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

对均值滤波、高斯滤波、中值滤波分别进行图像处理,看其对噪音点的消除效果
在这里插入图片描述
对比可以看出来,在这张图中,高斯滤波相对于均值滤波有一定的优势,但种植却具有更好的结果。

猜你喜欢

转载自blog.csdn.net/qq_33392383/article/details/109170456
今日推荐