数字图像处理的python实践(12)——频域低通滤波器和高斯低通滤波器

       上一章中学习了一维离散傅里叶变换的概念和实现。但在具体的图像中实现还是有点不足,首先我们需要输入图像的尺寸都是2的整数次幂,这个条件太过苛刻了,如果使用Resize又会损失信息。目前还是以熟悉为主,所以选择用numpy自带的方法来进行频域的转换。

       那么很简单的,首要就是试一下把一张图片从空间域转换到频域上,然后在频域上分解成幅度谱和相位谱,然后再反过来利用幅度谱和相位谱合成一张图片。实现的代码如下,主要是使用numpy自带的函数,numpy.abs计算复数的绝对值,numpy.angle计算相位值。

from PIL import Image
import numpy as np

girl = "C:/Users/60214/Desktop/python_work/DigitalExecution/gray_girl.jpg"
newgirl = "C:/Users/60214/Desktop/python_work/DigitalExecution/newgirl.jpg"

im = Image.open(girl)
im_arr = np.array(im)

fft = np.fft.fft2(im_arr)
phase = np.angle(fft)
amplitude = np.abs(fft)

new_fft = np.zeros(amplitude.shape, dtype = "complex64")

for i in range(new_fft.shape[0]):
	for j in range(new_fft.shape[1]):
		new_fft[i, j] = amplitude[i, j] * np.exp(complex(0, phase[i, j]))

new_fft = np.fft.ifft2(new_fft)

new_fft = np.abs(new_fft)

new_arr = np.zeros(new_fft.shape, dtype = "uint8")

for i in range(new_fft.shape[0]):
	for j in range(new_fft.shape[1]):
		new_arr[i, j] = new_fft[i, j]

new_im = Image.fromarray(new_arr)
new_im.save(newgirl)

       然后可以做一个有趣的实验,即把两张图片转换后的幅度谱和相位谱交换,看生成的新图片是什么样子的,可以帮助我们更好的理解幅度谱和相位谱到底代表了图片在时域上的什么内容。

from PIL import Image
import numpy as np

man = "C:/Users/60214/Desktop/python_work/DigitalExecution/gray_man.jpg"
woman = "C:/Users/60214/Desktop/python_work/DigitalExecution/gray_woman.jpg"

a = Image.open(man)
a = a.resize((800, 800))
a = np.array(a)
a = np.fft.fft2(a
  • 14
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值