失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 图像处理:理想低通滤波器 butterworth滤波器(巴特沃斯) 高斯滤波器实现(python)

图像处理:理想低通滤波器 butterworth滤波器(巴特沃斯) 高斯滤波器实现(python)

时间:2021-12-27 23:15:56

相关推荐

图像处理:理想低通滤波器 butterworth滤波器(巴特沃斯) 高斯滤波器实现(python)

对图像进行频域滤波的几种常用低通滤波器,python-opencv实现:

低通滤波器(Low-pass filter)容许低频信号通过,但减弱频率高于截止频率的信号的通过。对于不同滤波器而言,每个频率的信号的减弱程度不同。当使用在音频应用时,它有时被称为高频剪切滤波器,或高音消除滤波器。

设H(u,v)H(u, v)H(u,v)为滤波器,D(u,v)D(u, v)D(u,v)为像素点到参考点的距离,D0D_0D0​为滤波器半径。

理想低通滤波器

H(u,v)={1D(u,v)≤D00D(u,v)>D0H(u, v) = \left\{ \begin{array}{ccc} 1 & D(u, v) \le D_0\\ 0 & D(u, v) > D_0\end{array} \right. H(u,v)={10​D(u,v)≤D0​D(u,v)>D0​​

import cv2 as cvimport numpy as npdef ILPF(shape, radius):mask = np.zeros(shape[:2], dtype=np.uint8)cv.circle(mask, (int(w / 2), int(h / 2)), radius, (255, 255, 255), -1)return mask# 示意图cv.imshow('ilpf', ILPF((900, 900), 30))

示意图:

butterworth巴特沃斯滤波器

巴特沃斯滤波器的特点是通频带(passband)内的频率响应曲线最大限度平坦,没有涟波,而在阻频带则逐渐下降为零。

一阶巴特沃斯滤波器的衰减率为每倍频6 dB,每十倍频20 dB(所有一阶低通滤波器具有相同的归一化频率响应)。二阶巴特沃斯滤波器的衰减率为每倍频12 dB、 三阶巴特沃斯滤波器的衰减率为每倍频18 dB、如此类推。巴特沃斯滤波器的振幅是 ω 的一个单调函数,并且也是唯一的无论阶数,振幅对角频率曲线都保持同样的形状的滤波器。只不过滤波器阶数越高,在阻频带振幅衰减速度越快。其他滤波器高阶的振幅对角频率图和低级数的振幅对角频率有不同的形状。

H(u,v)=11+(D(u,v)D0)2nH(u, v) = \frac{1}{1 + (\frac{D(u, v)}{D_0})^{2n}} H(u,v)=1+(D0​D(u,v)​)2n1​

def butterworth_filter(shape, rank, radius):""" butterworth filter genreatorH(u, v) = 1 / (1 + (D(u, v) / radius)^(2 * rank))Args:shape: 滤波器的形状rank: 滤波器阶数radius: 滤波器半径"""# 中心位置h, w = shape[:2]cx, cy = int(w / 2), int(h / 2)# 计算以中心为原点坐标分量u = np.array([[x - cx for x in range(w)] for i in range(h)], dtype=np.float32)v = np.array([[y - cy for y in range(h)] for i in range(w)], dtype=np.float32).T# 每个点到中心的距离dis = np.sqrt(u * u + v * v)filt = 1 / (1 + np.power(dis / radius, 2 * rank))return filt

一、二阶滤波器

高斯滤波器

高斯滤波器的过度特性非常平坦,不会产生振铃现象(二维高斯分布)

H(u,v)=e−12⋅(D(u,v)D0)2H(u, v) = e^{-\frac{1}{2}\cdot (\frac{D(u, v)}{D_0})^2} H(u,v)=e−21​⋅(D0​D(u,v)​)2

def gaussian_filter(shape, sigma):""" Gaussian Low Pass filterArgs:shape: 滤波器形状sigma: sigma值(半径)H(u, v) = e^(-(u^2 + v^2) / (2 * sigma^2))"""h, w = shape[: 2]cx, cy = int(w / 2), int(h / 2)u = np.array([[x - cx for x in range(w)] for i in range(h)], dtype=np.float32)v = np.array([[y - cy for y in range(h)] for i in range(w)], dtype=np.float32).Tdis2 = u * u + v * vp = -dis2 / (2 * sigma**2)#filt = 1 / (2 * pi * sigma**2) * np.exp(p)filt = np.exp(p)return filt

如果觉得《图像处理:理想低通滤波器 butterworth滤波器(巴特沃斯) 高斯滤波器实现(python)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。