OpenCV图像处理之傅里叶变换

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

OpenCV图像处理之傅里叶变换

傅里叶变换:目的就是得到图像的低频和高频,然后针对低频和高频进行不同的处理。处理完之后,在通过逆变换恢复到图像,这时候对低频和高频的处理就会反映到图像上。

  • 频率

高频:变化剧烈的灰度分量,例如边界。
低频:变化缓慢的灰度分量,例如一天蓝天(相似的多)。

  • 滤波

低通滤波器:只保留低频,会使图像模糊。
高通滤波器:只保留高频,会使图像细节增强。

图像处理之傅里叶变换流程图

OpenCV图像处理之傅里叶变换

OpenCV主要就是cv.dft()和cv.idft(),输入图像需要先转换成np.float32格式,得到的结果中频率为0,的部分会在左上角,通常要转换到中心位置,可以通过shift变换来实现, cv.dft()返回的结果是双通道的(实部、虚部),通常需要转换成图像格式才能展示(0,255)

OpenCv图像处理之傅里叶变换

# 读取一张灰度图像
img = cv.imread('img/tree.jpg',0)
# 将图像转换成np.float32格式
img_float32 = np.float32(img)
# cv.dft()函数进行傅里叶变换,返回的结果是双通道的(实部、虚部),通常需要转换成图像格式才能展示(0,255)
dft = cv.dft(img_float32, flags = cv.DFT_COMPLEX_OUTPUT)
# 再调用 np.fft.fftshift() 函数将中心位置转移至中间。
dft_shift = np.fft.fftshift(dft)
# cv.magnitude()是OpenCV中的一个函数,用于计算两个数组的逐元素欧几里得距离。
# 具体来说,该函数可以计算两个数组(可以是实数或复数数组)的逐元素欧几里得距离,返回一个与输入数组形状相同的数组。
# 得到灰度图能表示的形式(转换成图像格式才能展示(0,255)),映射公式,需要将像素值映射之0-255
magnitude_spectrum = 20*np.log(cv.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
# 傅里叶变换后图像进行展示
plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('OpenCV Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()

OpenCV图像处理之傅里叶变换

  • 获取图像的中心位置
rows, cols = img.shape
crow, ccol = int(rows/2) , int(cols/2) # 中心位置

OpenCv傅里叶变换之低通滤波

# 设置遮掩的形状(一般为矩形、圆形),大小(自定义)
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow-50:crow+50, ccol-50:ccol+50] = 1

# IDFT
fshift = dft_shift*mask
f_ishift = np.fft.ifftshift(fshift)
img_back = cv.idft(f_ishift)
img_back = cv.magnitude(img_back[:,:,0],img_back[:,:,1])

plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img_back, cmap = 'gray')
plt.title('Result'), plt.xticks([]), plt.yticks([])
plt.show()

OpenCV图像处理之傅里叶变换

OpenCv傅里叶变换之高通滤波

# 设置遮掩的形状(一般为矩形、圆形),大小(自定义)
mask = np.ones((rows, cols, 2), np.uint8)
mask[crow-5:crow+5, ccol-5:ccol+5] = 0

# IDFT
fshift = dft_shift*mask
f_ishift = np.fft.ifftshift(fshift)
img_back = cv.idft(f_ishift)
img_back = cv.magnitude(img_back[:,:,0],img_back[:,:,1])

plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img_back, cmap = 'gray')
plt.title('Result'), plt.xticks([]), plt.yticks([])

plt.show()

OpenCV图像处理之傅里叶变换

大家可以更改mask的大小或形状对图像进行处理,对比着学习起来更容易理解。

# 设置遮掩的形状(一般为矩形、圆形),大小(自定义)
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

在这里给大家推荐几个关于傅里叶变换的学习网页以及视频。
哔站:B站首发!草履虫都能看懂的【傅里叶变换】讲解,清华大学李永乐老师教你如何理解傅里叶变换,辨清美颜和变声原理,!!
傅里叶变换这样学,何愁不会呢?直观理解傅里叶变换
图像傅里叶变换实验文章来源地址https://www.toymoban.com/news/detail-461228.html

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

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

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

相关文章

  • 【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)
  • (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

    (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

    一维离散傅里叶变换(Discrete Fourier Transform,DFT) :是一种数学技术,用于将代表离散时间信号的N个复数序列从 时域转换到频域 。DFT被广泛用于许多应用,如音频和图像处理、通信和控制系统。DFT是傅里叶变换的离散版本,傅里叶变换是一种用于分析频域信号的连续数学技

    2023年04月13日
    浏览(17)
  • python数字图像处理基础(七)——直方图均衡化、傅里叶变换

    python数字图像处理基础(七)——直方图均衡化、傅里叶变换

    均衡化原理 图像均衡化是一种基本的图像处理技术,通过更新图像直方图的像素强度分布来调整图像的全局对比度。这样做可以使低对比度的区域在输出图像中获得更高的对比度。 简单理解:改变图像对比度,让色彩更丰富,灰度值直方图:瘦高 - 均衡 本质上,直方图均衡

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

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

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

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

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

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

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

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

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

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

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

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

    图像的傅里叶变换

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

    2023年04月27日
    浏览(15)
  • opencv4 傅里叶变换

    opencv4 傅里叶变换

    ① 高频:变化剧烈的灰度分量,例如边界礁石。 ② 低频:变化缓慢的灰度分量,例如一片大海。 ③ 高通滤波器:只保留高频,会使得图像细节增强。高频边界锐化了,增强了,细节更明显了。 ④ 低通滤波器:只保留低频,会使得图像模糊。低频信息保留下来了,高频信息

    2024年02月08日
    浏览(10)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包