图像处理是指对图像进行分析、加工、和处理,使其满足视觉、心理或其他要求的技术。图像处理是信号处理在图像领域上的一个应用。目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。此外, 基于光学理论的处理方法依然占有重要的地位。 图像处理是信号处理的子类,另外与计算机科学、人工智能等领域也有密切的关系。傅立叶变换是图像处理的核心步骤,通过本门课程中对傅立叶变换的讲授,可以通过 MATLAB 工具对图像进行简单的处理。 数字图像中的频谱,频率对于图像来说就是指图像颜色值的梯度,即灰度 级的变化速度;幅度可以简单的理解为是频率的权,即该频率所占的比例。对 图像而言,图像的边缘部分是突变部分,变化较快,因此反应在频域上是高频分量;图像的噪声大部分情况下是高频部分;图像平缓变化部分则为低频分量。也就是说,傅立叶变换提供另外一个角度来观察图像,可以将图像从灰度分布转化到频率分布上来观察图像的特征。
今天我们就用 MATLAB 来进行仿真,看看如何得到原始图片的频谱图?傅立叶变换在其中起到了什么作用?图片在频域有什么特征?
1、如何得到原始图片的频谱图?
首先,使用imread()函数来读取一幅图像,并以image变量存储。
image=imread('image.png');
读出后紧接着用subplot和imshow联合建立一张坐标域并显示原图。
subplot(2,3,1);imshow(image);title('原图');
在计算频谱时,彩色图像中的每个像素颜色由R、G、B三个分量来决定,而每个分量的取值范围都在0-255之间,这样对计算机来说,彩色图像的一个像素点就会有256*256*256=16777216种颜色的变化范围。而灰度图像是R、G、B分量相同的一种特殊彩色图像,对计算机来说,一个像素点的变化范围只有0-255这256种。彩色图片的信息含量过大,如果此时直接进行傅里叶变换,则频谱图会显示为一片空白或者是密密麻麻的。进行图片识别时,为了提高运算速度,在对RGB图像进行傅里叶变换前要进行类型转换,可以使用im2double将其转换为双精度型,或者使用rgb2gray将其转换为灰度图像。使用不同的函数其变换效果也是不一样的。如使用im2double,进行傅里叶变换后其频谱图呈白色基调,使用rgb2gray其频谱图呈灰色基调,具体情况对比如图1-1、1-2所示。
image_gray=rgb2gray(image);
接下来先对刚刚得到得灰度化的图像进行傅里叶变换。
image_fft=fft2(image_gray); %傅里叶变换
如果图像进行傅里叶转换后立即用imshow函数显示,则在命令行可能会显示:Warning: Displaying real part of complex input(警告: 显示复数输入项的实部)。这是因为经过傅里叶变换后的图像矩阵大多是复数矩阵,包含实部和虚部。此时如要显示图像则需要先用abs取复数矩阵的模,再进行显示。
取模后图像矩阵的数值一般会很大,直接用imshow函数是无法显示的,此时可以用log函数取其对数,如log(abs(image_fft)+1),这样就可以对频谱进行缩放。至于为什么用log(abs(image_fft)+1),是因为对于(0,1)之间的x值经过取对数后会变成负值,而log(x+1)则将所有的x值映射到正数范围内。
image_AM_1=log(abs(image_fft)+1); %取模并进行缩放
之后将image_AM_1图像用imshow显示出来。
subplot(2,3,2);imshow(image_AM_1,[]);title('傅里叶变换幅度谱');
但是以上得到的幅度谱我们会发现其幅度谱的中心是位于四角,而非最中央,解决办法非常简单,进行频域变换即可,我们就可以求得频谱中心在图中央的幅度谱了,后续操作与前面相同。
image_fft_shift=fftshift(image_fft);
image_fft_shift=fftshift(image_fft);
image_AM_2=log(abs(image_fft_shift)+1);
subplot(2,3,4);imshow(image_AM_2,[]);title('频移后的幅度谱');
对于相位谱我们做同样的处理。
image_Phase_1=log(angle(image_fft)*180/pi); %取相位并进行缩放
subplot(2,3,3);imshow(image_Phase_1,[]);title('傅里叶变换相位谱');
image_Phase_2=log(angle(image_fft_shift)*180/pi);%取相位并进行缩放
subplot(2,3,5);imshow(image_Phase_2,[]);title('频移后的相位谱');
最后一个式子进行逆变换,如果开头调用rgb2gray,需将逆转换得到的矩阵先转换为灰度图像(mat2gray将矩阵转换为灰度图像),再将图像类型转换为uint8(im2uint8将图像转换为 8 位无符号整数)。
image_fft_ifft=ifft2(image_fft); %频率域反变换到空间域
image_restore=im2uint8(mat2gray(image_fft_ifft));%更改图像类型
subplot(2,3,6);imshow(image_restore);title('逆傅里叶变换');
图1-1 使用rgb2gray得到的频谱图
图1-2 使用im2double得到的频谱图
2、傅立叶变换在其中起到了什么作用?
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。灰度变化缓慢的区域,对应的频率值很低;灰度变化剧烈的区域,对应的频率值较高。傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数。
3、图片在频域的特征?
(1)图像经过二维傅立叶变换后,其变换系数矩阵表明:若变换矩阵Fn原点设在中心,其频谱能量集中分布在变换系数矩阵的中心附近(图中阴影区)。若所用的二维傅立叶变换矩阵Fn的原点设在左上角,那么图像信号能量将集中在系数矩阵的四个角上。这是由二维傅立叶变换本身性质决定的。同时也表明一股图像能量集中低频区域。
(2)变换之后的幅度谱图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大(幅角比较大)。
(3)通过观察傅立叶变换后的频谱图,我们可以看出图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。文章来源:https://www.toymoban.com/news/detail-444370.html
很高兴您能看到这里,文中提到的一些函数如果有不懂可以留言也可以在matlab支持(支持 - MATLAB & Simulink (mathworks.cn))里去查询。希望本文对您学习有所帮助!文章来源地址https://www.toymoban.com/news/detail-444370.html
到了这里,关于【信号与系统】如何得到原始图片的频谱图?(Matlab)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!