使用matlab对图像进行傅里叶变换

原图:

(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]显示。

时间: 2024-10-04 20:07:56

使用matlab对图像进行傅里叶变换的相关文章

图像的傅里叶变换

图像的傅里叶变换 备份自:http://blog.rainy.im/2015/11/03/fourier-transform-in-image-processing/ Fourier 傅里叶变换(Fourier Transform)是非常重要的数学分析工具,同时也是一种非常重要的信号处理方法.我记得本科课程电路原理中有提到过,但由于计算过于复杂,好像是超出考试范围了,所以并没有深入学习.最近实验中需要对图像进行滤波处理,文献中提到的方法通常是经过傅里叶变换之后对频域进行过滤,将图像中的低频信息与

DAY13 Matlab实现图像错切源代码

Matlab实现图像错切源代码 %错切im=(imread('robot.jpg'));im1=rgb2gray(im);figure,imshow(im1);[row,col]=size(im1); %获取行数 和 列数 %图像的水平错切G=zeros(row,col);a=pi/6; %水平错切30度b=tan(a);for m=1:row for n=1:col G(round(m+b*n),n)=im1(m,n); endendfigure,imshow(uint8(G)); %图像的垂

利用matlab给图像加高斯噪声

I = imread('DSC_0034.JPG'); J = imnoise(I,'gaussian',0.20); figure, imshow(I), figure, imshow(J) 利用matlab给图像加高斯噪声

Matlab绘制图像及图像的处理

一 绘制函数图像 matlab平面绘制函数图像有多个函数,plot,ezplot等. 1.1 plot函数 查看matlab的帮助文件可知plot函数的调用格式有 PLOT Linear plot. PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix,    then the vector is plotted versus the rows or columns of the matrix,    whichever

MATLAB中图像的基本操作

MATLAB中图像的基本操作 1.读取.显示图片 MATLAB中提供了immread()与imshow()函数读取和显示图片.其中读取函数imread()原型: imread: A = imread(filename, fmt) A是结构体名,用来存储读入的图像数据.filename是读取的文件名,文件名要用”括起来.fmt是读取文件的类型如:jpg.png等等,这个参数可以不输入,由MATLAB自动判断. 显示函数imshow()原型: imshow: imshow(I) I为读取后保存在MA

图像处理——图像的傅里叶变换

首先给大家推荐傅里叶变换的资料(转自微信): http://mp.weixin.qq.com/s?__biz=MjM5MTIwMjY1Mg==&mid=206922366&idx=5&sn=9d1a1f32fdfd46c64a5f9276f7366e9d&scene=2#rd http://mp.weixin.qq.com/s?__biz=MjM5MTIwMjY1Mg==&mid=207362239&idx=1&sn=0a74b905aac6fb61

Matlab实现图像切割

以下使用极小值点阈值选取方法,编写MATLAB程序实现图像切割的功能. 极小值点阈值选取法即从原图像的直方图的包络线中选取出极小值点, 并以极小值点为阈值将图像转为二值图像 clear all; close all ; G=imread('rabbit.png'); figure(); subplot(2,2,1); imshow(G); subplot(2,2,2); imhist(G); subplot(2,2,3); imhist(G); [h,x]=imhist(G); h=smooth

[图像]用Matlab在图像上画矩形框

原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:http://blog.csdn.net/humanking7/article/details/46819527 在毕业设计的时候写论文画图,要在一个图像上精确的标记出要处理的区域,用Photoshop或是其他绘图软件难免不精确,而且也不符合懒人思维(以后怎么办,要一劳永逸,嘿嘿),所以就自己写软件吧. 编程思想和注意事项 其实程序的思路很简单,就是在局域外面像素的值(颜色)覆盖掉就行了,但是要注意几点内容. 原图像通道问题(边框颜色问

Converting Between Image Classes (matlab 中图像类之间的转换)

首先类似于C中的类型转换,matlab中也有其对应的类型转换. For example, a=2;double(a)   ---> 2.0 or 更多位数 a=2.1;uint8(a)   ---> 2,反正是去掉了小数部分. 因为uint8是八个bit即一个byte存储的,因此其范围是0-255,超出255的double数据被强制转换为255,低于0的double数据被强制转换为0,中间的double数据则直接被去除小数部分. a=[0,1;2,0];logical(a) ---> a