图像空域图和频谱图的对应关系

傅立叶变换的原理

关于傅立叶变换这里推荐一篇比较有名的博客:https://blog.csdn.net/wenzhilu/article/details/79079183

这个是课堂上的一个作业,在查找资料时发现有些地方很多人写的有点矛盾,不清楚,再加上我上课对教授的提问,就把我的演示PPT完善后整理出来了。这些不是太专业,就是一些基本的知识但是平时很少去思考到。
二维离散傅立叶变换公式
在这里插入图片描述
图像的离散二维傅立叶变换其实就是两个一维的离散傅立叶变换的叠加,

  1. 先对每一行的一维N点序列进行一维离散傅里叶变换得到F(x,v)
  2. 再对得到F(x,v)按列向对每一列做M点的一维离散傅里叶变换
    当然先对列变换再对行变换是一样的!

方向性体现

通过这三个简单图像可以看出,频谱中的白线方向与图像中的边界是垂直的关系,当然边界上下平移是不改变频谱的,但是边界旋转会改变频谱中白线的方向(图省略)
图二图三图一
通过上面三组简单图片可以看出,它的方向性体现为与空域中灰度变化的方向垂直,这个特性在很多的图片中也是可体现出来的。

频率的体现

图四
第一组纯色的图片,他的灰度没有变化,频谱图全黑
第二组图像是渐变图像,它的灰度变化比较平缓,可以看到频谱图上靠近中心点的部分较亮,边缘的地方没有亮点;
第三组图像是沟壑,它的变化就比较强烈,边界比较多,整个频谱图上都比较亮;
经过上面三组图像的比较可以看出:
图像的频率是表征图像中灰度变化剧烈程度的指标-就是灰度梯度;
可以得到结论:
空域图中空域边缘部分/细节 对应频域 高频分量
在这里插入图片描述
噪声 对应频域 高频分量
在这里插入图片描述
平缓变化部分/背景 低频分量
在这里插入图片描述
图六
这里是Roberts梯度算子,还有其他的梯度算子计算原图像素的灰度梯度值;

频谱图中的像素点的亮度

这个亮度我看了很多的帖子,有些说是梯度越大,亮度越亮。但是上一节可以看出梯度越大,频域也就越高,离频谱中心点也就越远(这里的频谱图经过中心话的,中心频率为0,直流分量),这两个结论就有点矛盾了;比如靠近中心点的亮点怎么解释?
上课的时候我提出来这个问题,得到的答案和我之前的猜想是一致的:
原图中和其邻域的灰度梯度为x的像素点的个数越多,它的亮度也就越亮;当然因为有方向性,所以这些相同梯度值的点对应到频域中也不会都分布在一点上;

空域图和频域图的对应

首先说:因为频谱图表示图像梯度的分布图,所以原图和频率图上的点不是一一对应的,,
频谱图上的点表示空域图某点的灰度梯度大小,梯度大其频率高
暗的点数多,就是说其原图像素梯度较小,频率低,图像就较柔和,
比如左图和右图

相反,右图的变化较尖锐,其频谱图像白点数分布广泛
最后关于频率图的亮度越高,他的频率特征也就越明显

综合(指纹图像)

因为指纹图像有局部方向性,那么它的灰度变化是有一定局部的规律,所以可以看出频率图有比较明显的白色轮廓
指纹图像就类似于刚才的沟壑图,它的边界信息较多,灰度变化大,所以频谱分布范围分布广;
在这里插入图片描述

Matlab代码


I=imread('6.jpg');
I=rgb2gray(I);				%将图像转换为灰度图
I=im2double(I);				%将图像的数据格式转换为double型的 
F=fft2(I);					%傅立叶变换
F=fftshift(F);				%对傅里叶变换后的图像进行象限转换
F=abs(F);					%傅里叶变换的模
T=log(F+1);					%数据范围压缩
figure;						%显示
subplot(2,1,1);imshow(I);
subplot(2,1,2);imshow(T,[]); 


  • 15
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是用Python实现BLPF和BHPF滤波器提取合成图像的低频和高频信息的程序,并绘制对应频谱空域图像。 ```python import cv2 import numpy as np from matplotlib import pyplot as plt # 读取合成图像 img = cv2.imread('composite_image.jpg', 0) # 计算傅里叶变换 f = np.fft.fft2(img) fshift = np.fft.fftshift(f) # 构造低通滤波器 rows, cols = img.shape crow, ccol = int(rows/2), int(cols/2) BLPF = np.zeros((rows, cols), np.uint8) r = 50 # 半径 for i in range(rows): for j in range(cols): if np.sqrt((i-crow)**2+(j-ccol)**2) < r: BLPF[i, j] = 1 # 构造高通滤波器 BHPF = 1 - BLPF # 进行滤波 BLPF_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*BLPF))) BHPF_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*BHPF))) # 绘制低频图像和高频图像对应频谱空域图像 plt.subplot(231),plt.imshow(img, cmap = 'gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(232),plt.imshow(np.log(1+np.abs(fshift)), cmap = 'gray') plt.title('Spectrum'), plt.xticks([]), plt.yticks([]) plt.subplot(233),plt.imshow(BLPF, cmap = 'gray') plt.title('BLPF'), plt.xticks([]), plt.yticks([]) plt.subplot(234),plt.imshow(BLPF_img, cmap = 'gray') plt.title('BLPF Image'), plt.xticks([]), plt.yticks([]) plt.subplot(235),plt.imshow(np.log(1+np.abs(fshift)), cmap = 'gray') plt.title('Spectrum'), plt.xticks([]), plt.yticks([]) plt.subplot(236),plt.imshow(BHPF_img, cmap = 'gray') plt.title('BHPF Image'), plt.xticks([]), plt.yticks([]) plt.show() ``` 程序中用到了OpenCV和Matplotlib库。首先读取合成图像,然后计算傅里叶变换并进行移频。接下来,构造低通滤波器和高通滤波器,这里采用了理想的圆形滤波器。然后,将滤波器应用到频域图像中,进行逆变换得到低频图像和高频图像。最后,绘制低频图像和高频图像对应频谱空域图像。 下面是程序运行结果的示意: ![image](https://user-images.githubusercontent.com/58097760/137601894-ba4c9a3e-8ed0-4d5d-8b0c-5e1a7d4a7f3f.png) 其中左侧的为原始图像,中间的为频谱,右侧上方的为低频图像,右侧下方的为高频图像。可以看到,低频图像主要包含图像的平滑区域,高频图像主要包含图像的边缘和细节部分。频谱上蓝色的区域为低频区域,红色的区域为高频区域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值