Python图像处理笔记——傅里叶变换

这篇具有很好参考价值的文章主要介绍了Python图像处理笔记——傅里叶变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、前言

图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。(灰度变化得快频率就高,灰度变化得慢频率就低)。傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。
傅立叶变换的物理意义:
将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数。

傅立叶变换以前,图像(未压缩的位图)是由对在连续空间(现实空间)上的采样得到一系列点的集合,我们习惯用一个二维矩阵表示空间上各点,则图像可由z=f(x,y)来表示。由于空间是三维的,图像是二维的,因此空间中物体在另一个维度上的关系就由梯度来表示,这样我们可以通过观察图像得知物体在三维空间中的对应关系。为什么要提梯度?因为实际上对图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图,当然频谱图上的各点与图像上各点并不存在一一对应的关系,即使在不移频的情况下也是没有。

关于傅里叶变换的详细解读推荐阅读大佬的知乎专栏:链接


二、傅里叶变换在图像中的应用

空域的卷积相当于频域的乘法。

在空间域,图像与高斯核卷积可以实现高斯模糊的效果。相当于,高斯核和图像在频域的乘积

0. 本文用到的库

import timeit
import matplotlib.pylab as plt
import numpy as np
import pylab
from skimage.io import imread
from scipy import signal
import scipy.fftpack as fp
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter

1. 图像的傅里叶变换和逆变换

将图像转换到频域,然后逆变换重建图像,信噪比不变。基于scipy.fftpack的傅里叶变换函数实现。

def calc_snr(img, axis=0, ddof=0): # 计算信噪比
    a = np.asanyarray(img)
    m = a.mean(axis)
    sd = a.std(axis=axis, ddof=ddof)
    return np.where(sd == 0, 0, m / sd)

im = np.array(Image.open('images.jpg').convert('L'))
snr = calc_snr(img, axis=None)
print('SNR for the original image is ' + str(snr))
freq = fp.fft2(img)
im1 = fp.ifft2(freq).real  # 取实部重建图像
freq2 = fp.fftshift(freq)  # 移位变换系数,使得直流分量在中间
img_mag = 20 * np.log10(0.1 + np.abs(freq2))
img_phase = np.angle(freq2)
snr = calc_snr(im1, axis=None)
print('SNR for the image obtained after fft reconstruction is ' + str(snr))
# Make sure the forward and backward transforms work!
assert(np.allclose(im, im1))

输出

SNR for the original image is 3.3597120699464553
SNR for the image obtained after fft reconstruction is 3.3597120699464553

Python图像处理笔记——傅里叶变换

2. 高斯模糊

在空域中,图像与高斯核卷积可以实现高斯模糊。利于傅里叶变换的方法可以大幅减少计算量。以下是Python代码:

im = np.mean(imread('image.jpg'), axis=2)
gauss_kernel = np.outer(signal.gaussian(im.shape[0], 2), signal.gaussian(im.shape[1], 2))
freq = fp.fft2(im) # 原图像的傅里叶变换
assert (freq.shape == gauss_kernel.shape) # 检查大小是否相等
freq_kernel = fp.fft2(fp.fftshift(gauss_kernel)) # 高斯核的傅里叶变换
freq_convolved = freq_kernel * freq # 频域相乘,即空域卷积结果
im1 = fp.ifft2(freq_convolved).real # 逆傅里叶变换
# 调整频域图
freq = 20 * np.log10(0.1 + fp.fftshift(freq)).astype(int)
freq_kernel = 20 * np.log10(0.1 + fp.fftshift(freq_kernel)).astype(int)
freq_convolved = 20 * np.log10(0.1 + fp.fftshift(freq_convolved)).astype(int)

示例
Python图像处理笔记——傅里叶变换
Python图像处理笔记——傅里叶变换

3. 傅里叶变换频域滤波

不同的频率分量对应图像中的不同部分。简单来说,低频对应细节,高频对应边缘。

(1)低通滤波

Python图像处理笔记——傅里叶变换

im = np.array(Image.open('../images/rhino.jpg').convert('L')) #
freq = fp.fft2(im)
(w, h) = freq.shape
half_w, half_h = int(w/2), int(h/2)

snrs_lp = []
ubs = list(range(1,17))
plt.figure(figsize=(10,10))
for u in ubs:
    freq1 = np.copy(freq)
    freq2 = fp.fftshift(freq1)
    freq2_low = np.copy(freq2)
    freq2_low[half_w-u:half_w+u+1,half_h-u:half_h+u+1] = 0
    freq2 -= freq2_low 
    im1 = np.clip(fp.ifft2(fp.ifftshift(freq2)).real,0,255)
    snrs_lp.append(calc_snr(im1, axis=None))

Python图像处理笔记——傅里叶变换
Python图像处理笔记——傅里叶变换

(2)高通滤波

snrs_hp = []
# snrs_hp.append(calc_snr(im, axis=None)) # 原图的SNR
lbs = list(range(1,17,1)) # 截止频率
for l in lbs:
    freq1 = np.copy(freq)
    freq2 = fp.fftshift(freq1)
    # high pass
    freq2[half_w-l:half_w+l+1,half_h-l:half_h+l+1] = 0 
    # 逆变换
    im1 = np.clip(fp.ifft2(fp.ifftshift(freq2)).real,0,255) 
    # 计算SNR
    snrs_hp.append(calc_snr(im1, axis=None))

以下是运行结果,可以看到截止频率对滤波效果的影响。
Python图像处理笔记——傅里叶变换
Python图像处理笔记——傅里叶变换

(3)带通滤波

Python图像处理笔记——傅里叶变换

freq1 = np.copy(freq)
freq2 = fp.fftshift(freq1)
freq2[:half_w+10,:half_h+10] = freq2[half_w+30:,half_h+30:] = 0 
im1 = np.clip(fp.ifft2(fp.ifftshift(freq2)).real,0,255)

Python图像处理笔记——傅里叶变换文章来源地址https://www.toymoban.com/news/detail-472385.html

到了这里,关于Python图像处理笔记——傅里叶变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 图像处理之傅里叶变换

    图像处理之傅里叶变换

    1、傅里叶变换的定义 傅里叶变换是在以时间为自变量的“信号”与频率为自变量的“频谱”函数之间的某域研究中较复杂的问题在频域中变得简单起来,从而简化其分析过程;另一方面使信号与系统的物理本质在频域中能更好地被揭示出来。当自变量“时间”或“频率”为

    2024年02月15日
    浏览(11)
  • 跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波

    跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波

    摘要: 本文讲解基于傅里叶变换的高通滤波和低通滤波。 本文分享自华为云社区《[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波》,作者:eastmount 。 傅里叶变换的目的并不是为了观察图像的频率分布(至少不是最终目的),更多情况下是为了对频率进行过滤,

    2024年02月04日
    浏览(6)
  • OpenCV图像处理之傅里叶变换

    OpenCV图像处理之傅里叶变换

    傅里叶变换: 目的就是得到图像的低频和高频,然后针对低频和高频进行不同的处理。处理完之后,在通过逆变换恢复到图像,这时候对低频和高频的处理就会反映到图像上。 频率 高频:变化剧烈的灰度分量,例如边界。 低频:变化缓慢的灰度分量,例如一天蓝天(相似的

    2024年02月06日
    浏览(13)
  • 【MATLAB图像处理】傅里叶变换--幅度谱、相位谱、逆变换

    【MATLAB图像处理】傅里叶变换--幅度谱、相位谱、逆变换

    fft2()  傅里叶正变换 fftshift()  频谱搬移-直流量(f=0)搬移至频谱中心 幅度谱只包含亮度信息(f),逆变换后由于没有位置信息(x,y)导致无法重构图像;相位谱只包含位置信息(x,y),逆变换后由于没有亮度信息(f)导致重构图像只有轮廓没有亮度。而同时利用幅度谱

    2024年02月11日
    浏览(14)
  • Matlab|数字图像处理02|图像的傅里叶变换(平移/旋转性质)及图像的离散余弦变换

    Matlab|数字图像处理02|图像的傅里叶变换(平移/旋转性质)及图像的离散余弦变换

    问题1:x,y方向同时平移后频谱有何变化? 答:经过平移后的傅里叶变换幅值图与原图像得到的傅里叶变换幅值图基本相同,平移不改变频谱的幅值。 代码运行结果: 代码: 问题2:编程验证一幅图旋转45度后,其傅里叶谱图也旋转了45度。 代码: 问题3:第8行10的数字大小对

    2024年02月08日
    浏览(14)
  • 数字图像处理Malab/C++(三)傅里叶变换及频谱图、频域滤波

    数字图像处理Malab/C++(三)傅里叶变换及频谱图、频域滤波

    1、选择任意灰度图像。计算和显示原始图像的频谱振幅和任意因子缩放的同一图像的频谱振幅。 2、选择任意灰度图像。计算和显示原始图像的频谱振幅和任意角度旋转的同一图像的频谱振幅。 3、 使用标准Lena灰度图片,添加高斯噪声imnoise(I,‘gaussian’, 0.05) 。请用合适的频

    2024年02月06日
    浏览(14)
  • 数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)

    数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)

    1了解图像变换的原理; 2理解图像变换系数的特点; 3掌握图像变换的方法及应用; 4掌握图像的频谱分析方法; 5了解图像变换在图像数据压缩、图像滤波等方面的应用。 安装了MATLAB软件的台式或笔记本电脑 1.离散傅里叶变换 对于二维离散信号,Fourier正变换定义为: 二维离

    2024年02月06日
    浏览(11)
  • 四元数傅里叶变换(Quaternion Fourier Transforms) 在信号和图像处理中的应用

    引言: 信号和图像处理是现代科学和工程领域中非常重要的一个方向,它涉及到对信号和图像进行分析、压缩、增强和恢复等操作。传统的信号和图像处理方法主要依赖于傅里叶变换和滤波器等工具,但这些方法在处理复杂系统时存在一定的局限性。近年来,四元数傅里叶变

    2024年02月02日
    浏览(17)
  • 图像的傅里叶变换

    图像的傅里叶变换

    先向大家道歉啊   作为基础知识这内容肯定有人写过   但作为屌丝没时间搜这个出处   也没什么商用价值 就是为了自己好看  收藏不好用 麻烦选别的   真的对不起就是为自己   烦请勿扰   看不惯你了 忍着 傅里叶基础 法国数学家吉恩·巴普提斯特·约瑟夫·傅里叶被

    2023年04月27日
    浏览(14)
  • 图像Radon变换与傅里叶变换(matlab)

    图像Radon变换与傅里叶变换(matlab)

    图像变化的介绍 图像变换是将图像从空间域变换到变换域。图像变换的目的是根据图像在变换域的某些性质对其处理。通常这些性质在空间域内很难获取。在变换域内处理结束后,将处理的结果进行反转变换到空间域。 我们所看到的图像是在空域上的,其信息具有很强的相

    2024年02月05日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包