数字图像处理的python实践(7)——图像平滑和高斯平滑

       滤波是信号处理中的概念,指的是将信号中特定波段频率滤除的操作。在图像处理中,和通过傅里叶变化实现的频域下的滤波是等效的,所以也称为滤波。首先要学习的是空间域滤波,主要是基于邻域(空间域)对图像中的像素执行计算,这个术语用来区分之后会学习的频率域滤波。

       所谓平滑,主要目的是为了减少和抑制图像中的噪声,在空间域中使用邻域平均的方法来实现。最最简单的就是平滑模板,是下方公式中描述的一个矩阵,我们通常称之为模板、滤波器或者过滤器。

w=\frac{1}{k^2}\begin{pmatrix} 1 & 1 & ... & 1\\ 1 & 1 & ... & 1\\ . & & & .\\ . & & & .\\ . & & & .\\ 1 & 1 & ... & 1 \end{pmatrix}_{k\times k}

       简单来说,当k=3时,w是一个3x3的矩阵,输出图像中的某个像素点的数值,是输入图像中对应位置上也是一个3x3的空间与这个平滑模板的点乘的结果。由于我们加上了\frac{1}{k^{2}},所以确保结果不至于超过灰度值上限的255。为了计算的直观,通常k都是取奇数而不是偶数。那么最小的奇数是1,1实际上就是表示不进行平滑处理。

       另外在事先的过程中还有一个问题,就是在图像的边界处如何处理。如果要求图像处理前后尺寸不变,那么最简单的方法就是填充,根据我们平滑模板的大小,如果平滑模板的边长为3,那么就在图像的上下左右各添加一层灰度值为0的区域,以实现尺寸不变;如果平滑模板的边长为5,那么上下左右就需要各添加两层,这种简称为“全0填充”。这种“全0填充”在平滑处理时影响不是那么明显,但是在图像锐化时就会产生原本不存在的边缘突出,所以有其他几种常用的效果好一些的边界填充方法,例如镜像填充或者重复填充。我们暂时考虑重复填充,实现的代码如下:

from PIL import Image
import numpy as np

def AverageFilter(src, dst, k = 3, method = "replicate"):

	imarray = np.array(Image.open(src))
	
	height, width = imarray.shape
	new_arr = np.zeros((heigh
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值