一,使用傅里叶变换处理模糊图片
傅里叶变换是将表示值的值转换为表示变化的值(大概应该是吧)
原图
观察图片发现白色像素块较多。可利用傅里叶变换转换后将变化较大的值置为0
导入使用模块
import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft2,ifft2
使用plt读取图片
moon = plt.imread(’./img/moonlanding.png’)
查看图片
plt.imshow(moon,cmap=‘gray’)
查看图片数据
moon
进行傅里叶变换
moon_fft2 = fft2(moon)
moon_fft2
找出变换较大的值将其置为0
cond = np.abs(moon_fft2) > 1e3
moon_fft2[cond] = 0
反傅里叶变换。重新变回表示值的值
moon_ifft2 = ifft2(moon_fft2)
moon_ifft2
因为是经过傅里叶变化后复数。取实数部分作为结果值
moon_clear = np.real(moon_ifft2)
moon_clear
展示图片
plt.figure(figsize=(12,8))
plt.imshow(moon_clear,cmap=‘gray’)
保存
plt.imsave(’./img/moon_fft2.png’,moon_clear,cmap=‘gray’)
moon_fft2 = fft2(moon)
cond = (np.abs(moon_fft2)>1e3)
moon_fft2[cond] = 0
moon_ifft2 = ifft2(moon_fft2)
moon_clear = moon_ifft2.real
plt.imshow(moon_clear,cmap='gray')
plt.imsave('./img/moon_fft2.png',moon_clear,cmap='gray')
二、使用图片降噪方法过滤噪声
高斯滤波
中值滤波
维纳滤波
导入模块
import matplotlib.pyplot as plt
import scipy.ndimage as ndimage
import scipy.signal as signal
导入图片
moon = plt.imread('./img/moonlanding.png')
高斯滤波
moon_gaosi = ndimage.gaussian_filter(moon,2)
plt.imshow(moon_gaosi,cmap='gray')
保存图片
plt.imsave('./img/moon_gaosi.png',moon_gaosi,cmap='gray')
moon_gaosi = ndimage.gaussian_filter(moon,sigma)中sigma值可以根据效果调试设置
高斯滤波处理后图片
中值滤波同高斯滤波
moon_median = ndimage.median_filter(moon,6)
plt.imshow(moon_median,cmap='gray')
保存图片
plt.imsave('./img/moon_median.png',moon_median,cmap='gray')
不同于高斯滤波与中值滤波。维纳滤波所依赖库不是scipy.ndimage而是scipy.signal
使用方面相似
moon_wiener = signal.wiener(moon,5)
plt.imshow(moon_wiener,cmap='gray')
保存图片
plt.imsave('./img/moon_wiener.png',moon_wiener,cmap='gray')