1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 使用matlab对图像进行二维傅里叶变换

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

时间:2022-07-13 08:29:16

相关推荐

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

这学期选了《图像工程基础》这门课,课上老师留了一个作业:对图像进行二维傅里叶变换。

现在我使用matlab解决这个问题

1.实验基本指令

首先我试了一下matlab图像处理的基本指令

原图:

经过以下指令后

将图片导入matlab后,命名为ini,经过以下指令后,图片变为

ini(:,:,1)=0;ini(:,:,2)=0;imshow(ini);

2.进行二维傅里叶变换

仍然以上文的图片为例(在我的文件夹中这张图片名为'千反田2.jpg')

前置代码:

ini=imread('千反田2.jpg');iniGray=rgb2gray(ini);iniDouble=im2double(iniGray);

ini矩阵是720*1280*3的矩阵,其中720*1280是图片的尺寸(像素点),3是RGB数值(一共有三层)iniGray是将原图像灰度化后的矩阵,720*1280iniDouble则是将iniGray归一化后的矩阵,720*1280

如图是iniGray矩阵的值(一部分)

以下是iniDouble(部分)

注:

在实验过程后,我将iniDouble整个矩阵乘以255后,可以发现iniGray与iniDouble矩阵是完全相同的

iniDouble=iniDouble*255;

这说明,im2Double()这个过程的算法,不过是把灰度矩阵的数据全部除以255;

实际上,如果不使用im2Double这个命令,后面的步骤仍然可以继续进行。

进行fftshift后:

整体代码:

ini=imread('千反田2.jpg');iniGray=rgb2gray(ini);iniDouble=im2double(iniGray);iniFFT=fft2(iniDouble);iniShift=fftshift(iniFFT);iniAbs=abs(iniShift);iniT=log(iniAbs+1);imshow(iniT,[]);

取对数原因:

iniAbs矩阵中,数的范围大致在0~500000之间,靠近500000的值实际上非常少,大部分<10,这样,如果进行绘图imshow(iniAbs,[]),会导致整个图像基本是黑的,因为imshow(iniT,[])命令把最大的那个值(接近500000)当作白色,而矩阵中的其他部分全部被划为灰度值十分接近0的黑色。

而在取对数后,iniT的值大致局限在了[0,13]。因为对数的增长十分缓慢,所以对数化后的矩阵的矩阵各个值之间的差变小了

imshow(iniT,[])命令把13当作白色,而接近13的数比较多,所以导致图像不会几乎全黑,能够直观显示

画图命令使用imshow(iniT,[])而不是imshow(iniT)的原因:

imshow(iniT)只使用iniT矩阵中值在[0,1]之间的部分,而iniT实际上大致在[0,13]之间,所以不能正确显示图像。如果使用imshow(iniT/13)或者imshow(iniT,[]),那么均可以正确显示图像

结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。