图像运算和图像增强七

图像运算和图像增强七

图像平滑之均值滤波、方框滤波、高斯滤波

(1)图形平滑

图像平滑是一项简单且使用频率很高的图像处理方法,可以用来压制、弱化或消除图像中的细节、突变、边缘和噪声,最常见的是用来减少图像上的噪声。
噪声滤除算法多种多样,可以从设计方法上分为线性滤波算法和非线性滤波算法两大类。

线性滤波

在图像处理中,对邻域中的像素的计算为线性运算时,如利用窗口函数进行平滑加权求和的运算,或者某种卷积运算,都可以称为线性滤波。

非线性滤波

非线性滤波利用原始图像跟模版之间的一种逻辑关系得到结果,如中值滤波、双边滤波等。非线性滤波技术从某种程度上弥补了线性滤波方法的不足,由于它能够在滤除噪声的同时较好地保持图像信号的高频细节,从而得到广泛的应用。
常见的图像平滑算法
在这里插入图片描述
在这里插入图片描述
(2)均值滤波
均值滤波是最简单的一种线性滤波算法,均值滤波输出图像的每一个像素值是其周围MxM个像素值的加权平均值(不包括目标像素点),调用OpenCV中的cv2.blur()函数实现均值滤波处理。
在这里插入图片描述

import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图片
img=cv2.imread('lena-zs.png')
source=cv2.cvtColor(img,cv2,COLOR_BGR2RGB)
#均值滤波
result=cv2.blur(source,(3,3))
#用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#显示图形
title=['原始图像’,'均值滤波']
images=[source,result]
for i in range(2):
	plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
	plt.title(titles[i])
	plt.xticks([]),plt,yticks([])
plt.show()

在这里插入图片描述

如果图像中的噪声仍然存在,可以增加模糊内核的大小,比如使用5x5,10x10的,但是处理后的图像会逐渐变得更加模糊。(下图为10x10的图像)

在这里插入图片描述
图像均值滤波是通过模糊内核对图像进行平滑处理,由于模糊内核中的每个权重值都相同,故称为均值。该方法在一定程度上消除了原始图像中的噪声,降低了原始图像的对比度,但也存在一定缺陷,它在降低噪声的同时使图像变得模糊,尤其是边缘和细节处,而且模糊内核越大,模糊程度越严重。
(3)方框滤波
方框滤波又称为盒式滤波,它利用卷积运算对图像邻域的像素值进行平均处理,从而实现消除图像中的噪声。方框滤波和和均值滤波的模糊内核基本一样,区别为是否需要进行均一化处理(归一化就是把要处理的像素值都缩放到一个范围内,以便统一处理和直观量化)。调用OpenCV中的cv2.boxFilter()函数实现方框滤波处理。

import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图片
img=cv2.imread('lena-zs.png')
source=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#方框滤波
result=cv2.boxFilter(sourcr,-1,(3,3),normalize=1)
#用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#显示图形
titles=['原始图像','方框滤波']
images=[source,result]
for i in range(2):
	plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
	plt.title(titles[i])
	plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述
(4)高斯滤波
为了克服局部平均法造成图像模糊的弊端,又提出了一些保持边缘细节的局部平滑算法,图像高斯滤波(高斯平滑)就是这样一种算法。它是应用邻域平均思想对图像进行平滑的一种线性平滑滤波,对于抑制服从正态分布的噪声非常有效,适用于消除高斯噪声,被广泛应用于图像处理的减噪过程。
通俗地讲,高斯滤波就是
对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(权重不同)经过加权平均后得到。中 OpenCV 主要调用 GaussianBlur()函数实现高斯平滑处理。
在这里插入图片描述

import cv2 
import numpy as np 
import matplotlib.pyplot as plt
#读取图片
img = cv2.imread('lena-zs.png')
source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#高斯滤波
result = cv2.GaussianBlur(source, (7,7), 0)
#用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#显示图形
titles = ['原始图像', '高斯滤波'] 
images = [source, result]
for i in range(2):
	plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
	plt.title(title[i])
	plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述
高斯滤波作为最有效的滤波器之一,它对于抑制服从正态分布的噪声非常有效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值