第五章 opencv python图像平滑 滤波器

总结

  1. 图像噪声
    • 椒盐噪声:图像中随机出现的白点或者黑点
    • 高斯噪声:噪声的概率密度分布是正态分布
  2. 图像平滑
    • 均值滤波:算法简单,计算速度快,在去噪的同时去除了很多细节部分,将图像变得模糊
    cv.blur()
    • 高斯滤波: 去除高斯噪声
    cv.GaussianBlur()
    • 中值滤波: 去除椒盐噪声
    cv.medianBlur()

显示图像总结
subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,
subplot_kw=None, gridspec_kw=None, **fig_kw)

fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
行数 列数 每个图的大小 分辨率

axes[0].imshow(img3[:,:,::-1])
axes[0].set_title(“cv中的加法”)
axes[1].imshow(img4[:,:,::-1])
axes[1].set_title(“直接相加”)

1.1 椒盐噪声 / 脉冲噪声
随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。

1.2 高斯噪声 / 正态噪声
高斯随机变量z的概率密度函数由下式给出:
		
		

2 图像平滑简介
	图像平滑从信号处理的角度看就是去除其中的高频信息,保留低频信息。因此我们可以对图像实施低通滤波。低通滤波可以去除图像中的噪声,对图像进行平滑。
	根据滤波器的不同可分为均值滤波,高斯滤波,中值滤波, 双边滤波。
	
	2.1 均值滤波
		
		
		cv.blur(src, ksize, anchor, borderType)
		
		参数:
				® src:输入图像
				® ksize:卷积核的大小
				® anchor:默认值 (-1,-1) ,表示核中心
				® borderType:边界类型
		
	2.2 高斯滤波
		高斯滤波函数如下
			
		函数对应的图---固定长这样子的
			
		
		特点:
			
			正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。计算平滑结果时,只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。
			高斯平滑在从图像中去除高斯噪声方面非常有效。
		
		高斯核  ↑
			离中心点越近的值应该发挥效果应当越强(关系越大), 中心点远的效果弱
		…
		通过高斯平滑可以去除高斯噪声
		API:
		cv2.GaussianBlur(src,ksize,sigmaX,sigmay,borderType)
		参数:
				® src: 输入图像
				® ksize:高斯卷积核的大小,注意 : 卷积核的宽度和高度都应为奇数,且可以不同
				® sigmaX: 水平方向的标准差
				® sigmaY: 垂直方向的标准差,默认值为0,表示与sigmaX相同
				® borderType:填充边界类型
		
		
2.3 中值滤波
API:
cv.medianBlur(src, ksize )
参数:
		§ src:输入图像
		§ ksize:卷积核的大小
	import cv2 as cv
	import numpy as np
	from matplotlib import pyplot as plt
	# 1 图像读取
	img = cv.imread('opencv_learn/middle.png')
	print(img)
	# 2 高斯滤波
	blur = cv.GaussianBlur(img,(5,5),1)
	# 中值滤波
	cv.medianBlur(img,5)
	# 3 图像显示
	plt.figure(figsize=(10,8),dpi=100)
	plt.subplot(121),plt.imshow(img[:,:,::-1]),plt.title('原图')
	plt.xticks([]), plt.yticks([])
	plt.subplot(122),plt.imshow(blur[:,:,::-1]),plt.title('高斯滤波后结果')
	plt.xticks([]), plt.yticks([])
	plt.show()

添加椒盐噪声
def noise(img,snr):
h=img.shape[0]
w=img.shape[1]
img1=img.copy()
sp=hw # 计算图像像素点个数
NP=int(sp
(1-snr)) # 计算图像椒盐噪声点个数
for i in range (NP):
randx=np.random.randint(1,h-1) # 生成一个 1 至 h-1 之间的随机整数
randy=np.random.randint(1,w-1) # 生成一个 1 至 w-1 之间的随机整数
if np.random.random()<=0.5: # np.random.random()生成一个 0 至 1 之间的浮点数
img1[randx,randy]=0
else:
img1[randx,randy]=255
return img1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值