python高通滤波_图像处理之高通滤波及低通滤波

本文介绍了图像处理中的高通滤波和低通滤波原理,通过傅里叶变换在频域中进行滤波操作。高通滤波用于突出图像边缘,低通滤波则用于平滑图像并消除噪声。文章提供了不同类型的滤波器实现,包括理想滤波器、梯形滤波器、布特沃斯滤波器和指数滤波器,并展示了滤波效果。
摘要由CSDN通过智能技术生成

本文需要用到傅里叶变换的知识,如果还不了解,请点击这里

频域滤波的基本过程

如果想对图像进行滤波的话,基本的步骤如下:

使用(−1)x+y(−1)x+y(-1)^{x+y}(−1)x+y乘以原来的图像,其中x、yx、yx、yx、y是原图像的像素点的坐标。

对第一步得到的数据的进行离散傅里叶变换F(u,v)F(u,v)F(u,v)F(u,v)

使用某个滤波器H(u,v)乘以第三步得到的F(u,v)F(u,v)F(u,v)F(u,v)

对第三步得到的结果进行傅里叶反变换,再用(−1)x+y(−1)x+y(-1)^{x+y}(−1)x+y乘以反变换后的数据

下面对上面各个步骤进行解释

在第一步操作中,我们对图像乘以(−1)x+y(−1)x+y(-1)^{x+y}(−1)x+y是为了将频谱中心化,在中心化前,高频信号位于四个角,中心化后,高频信号都位于中心,所以这方便我们观察频谱图

第二步操作就是通过离散傅里叶变换将图像转换到频率中去,其实对于滤波操作来说的化,在时域里我们也是可以进行的,只是在时域中我们要进行的是卷积操作,是非常耗时的。如果转化到频率中去,我们只需进行乘积操作就行。

第三步就是用滤波器乘以图像就行了,至于为什么是乘法。点击上方链接,可以看到对傅里叶比较清晰的解释。

第四步对处理后的频谱进行反变换之后就会得到第一步乘以(−1)x+y(−1)x+y(-1)^{x+y}(−1)x+y以后的图像,所以我们还需要再对其乘以(−1)x+y(−1)x+y(-1)^{x+y}(−1)x+y将其变换回来。

H(u,v)H(u,v)H(u,v)H(u,v)我们称其为滤波器,在变换中可以抑制或者增强某些频率而其他频率保持不变。输出图像如下:

G(u,v)=H(u,v)F(u,v)G(u,v)=H(u,v)F(u,v)G(u,v)=H(u,v)F(u,v)G(u,v)=H(u,v)F(u,v)

图像在频域里面,频率低的地方说明它是比较平滑的,因为平滑的地方灰度值变化比较小,而频率高的地方通常是边缘或者噪声,因为这些地方往往是灰度值突变的

所谓高通滤波就是保留频率比较高的部分,即突出边缘;低通滤波就是保留频率比较低的地方,即平滑图像,弱化边缘,消除噪声。

在时域中的滤波器和在频域中的滤波器组成了傅里叶变换对。如果我们有时域中使用的模板等,可以通过傅里叶变换得到频域中对应的模板

下面为,对图像进行滤波处理的代码

def PassFilter(self,H,showing=False):

assert len(H)==self.f_height,'滤波高度不一致'

assert len(H[0])==self.f_width,'滤波宽度不一致'

unit=self.Img[:,:,0]

unit_fft2=np.fft.fft2(unit)

unit_fftshift=np.fft.fftshift(unit_fft2)

if showing:

img_fft_abs=10*np.log(np.abs(unit_fftshift))

img=np.empty(shape=[self.f_height,self.f_width,3],dtype=int)

for i in range(0, 3):

img[:, :, i] = img_fft_abs

plt.imshow(img)

plt.show()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值