原图:

(0)

代码:

I=imread('1.jpg');

I=rgb2gray(I);

I=im2double(I);

F=fft2(I);

F=fftshift(F);

F=abs(F);

T=log(F+1);

figure;

imshow(T,[]);

傅里叶变换:

(1)

分析代码:

1. I=imread('1.jpg');

读取图像,不多说了

2. I=rgb2gray(I);

将图像转换为灰度图,如果没有这一步的话,最终得到的傅里叶变换是这个样子的

(2)

3. I=im2double(I);

将图像的数据格式转换为double型的,此时图像的数值范围由原来的[0,255],变成了[0,1],其实不进行转换的话,也可以进行傅里叶变换,只是傅里叶变换后的图像会有所不同,如(3)所示,可以跟图(1)比较一下看看效果,有时候不同的人得出的傅里叶变换结果不相同,也许就是这个原因

(3)

4. F=fft2(I);

进行傅里叶变换

5. F=fftshift(F);

对傅里叶变换后的图像进行象限转换,没有这一步的话,最终输出的结果是这样的

(4)

6. F=abs(F);

求傅里叶变换的模,我们都知道傅里叶变换后的结果为复数,包含real实部和imag虚部,而abs就是求复数的模,经过这一步,F的类型由复数的double变成了实数的double,如果没有这一步, matlab会给出提示,Warning: Displaying real part of complex input.最终输出的结果如下。

(5)

7. T=log(F+1);

经过前几步之后,我们得到了傅里叶变换的幅值,但是傅里叶变换后的数值范围非常大,maxF = 2.04e+05,minF = 0.009,如果不进行转换的话在图中显示就是图(6)的样子,中间有个小白点

(6)

那为什么要用log(F+1)呢。如图7所示,对(0,1)之间的x值,经过log(X)变换后会变成负数,而log(X+1)则将所有的x值,映射成正数,数值范围也更小一些。

(7)

8. figure;imshow(T,[]);

显示图像,之所以用imshow(T,[]);而不是imshow(T)。是因为即使经过对数变换后T的取值范围仍然大于[0,1],maxT=12.23,minT=0.009。imshow(T)只会显示[0,1]的值,而imshow(T,[]) 会根据灰度图的数值范围来显示图像,相当于将[0.09,12.23]映射到[0,1]显示。

最新文章

  1. UVA 11520 填充正方形
  2. CodeForces 146A Lucky Ticket
  3. Linux tar指令
  4. 点滴积累【JS】---JS小功能(createElement和insertBefore添加div下面的节点)
  5. CodeForces Round #290 Fox And Dinner
  6. 跨进程发送消息数据(发送WM_COPYDATA消息,够简单的)
  7. Android在 Alertdialog对话框中点击消失?
  8. Thread 与 Runnable 混合使用测试
  9. JavaScript之Object拆解
  10. webpack2使用ch6-babel使用 处理es6 优化编译速度
  11. 【SSH系列】深入浅出SpringMvc+入门Demo
  12. python3+arcface2.0 离线人脸识别 demo
  13. JarvisOJ Basic Help!!
  14. 学习笔记--python中使用多进程、多线程加速文本预处理
  15. Thing in java 第5章,初始化和清理,练习题答案
  16. TableExport导出失败问题
  17. [c/c++] programming之路(22)、字符串(三)——字符串封装
  18. __getitem__ __setitem__ __delitem__ 使用
  19. Linux内核设计与实现 第三章
  20. Vue.js 教程

热门文章

  1. Jquery jqXHR对象的属性和方法
  2. Mysql远程连接配置
  3. addEventListener()和removeEventListener()
  4. [LNMP]——LNMP环境配置
  5. 2017年11月26日 C#流&&窗体对话框
  6. DataGridView初始化,加载数据
  7. 9、springboot之处理静态资源
  8. Redis学习笔记1 -- 单机环境时分布式锁的使用
  9. python anaconda 安装 环境变量 升级 以及特殊库安装
  10. 关于webuploader 在ie9上不能触发 input 的 change 事件