图像处理中的二维傅里叶变换

图像处理中的二维傅里叶变换

问题来源是对彩色图像进行压缩时得出的傅里叶系数的图像如何解释,导入图片,转化为灰度图片:
#彩色图片一般是由RGB组成,其实就是3个二维数组叠加而成,当R=G=B时,彩色图片就会变成一种灰度颜色,所以灰度颜色的图片其实就是一个二维数组 #灰度化处理总共有三种方法:最大值法、平均值法、加权平均法 A = imread(os.path.join('..','DATA','jelly.jpg')) Abw = np.mean(A, -1); # 转化为灰度图像也可以通过cv2库或者plt, #0:压缩行,对各列求均值,返回 1* n 矩阵,axis =1 :压缩列,对各行求均值,返回 m *1 矩阵
接下来利用快速傅里叶变换,求解二维矩阵(每个变量是灰度值)的傅里叶系数,将所得的绘制在对数坐标系中:At = np.fft.fft2(Abw)#计算二维的傅里叶变换 F = np.log(np.abs(np.fft.fftshift(At))+1) # 将图像中的低频部分移动到图像的中心;将 FFT 置于对数刻度上。得到的图像如下:
灰度图像与傅里叶系数下面介绍一下二维傅里叶变换:连续的傅里叶变换为: F ( u , v ) = ∫ − ∞ ∞ ∫ − ∞ ∞ f ( x , y ) e − 2 π i ( u x + v y ) , d x , d y F(u,v) = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x,y) e^{-2\pi i(ux+vy)} , dx , dy F(u,v)=f(x,y)e2πi(ux+vy),dx,dy离散的傅里叶变换为: F ( u , v ) = 1 M N ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y ) e − i 2 π ( u x / M + v y / N ) F(u,v)=\frac{1}{\sqrt{MN}}\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)\mathrm{e}^{-i2\pi(ux/M+vy/N)} F(u,v)=MN 1x=0M1y=0N1f(x,y)ei2π(ux/M+vy/N)各变量的具体意义如下:
f ( x , y ) f(x,y) f(x,y):输入图像的灰度矩阵,即空间域中的图像,也就是灰度值。
F ( u , v ) F(u,v) F(u,v):变换后的复矩阵,表示频率域中的图像。其实部和虚部分别代表频率分量的幅度和相位。
x , y x,y x,y:空间域中的坐标,代表图像中的像素位置,取值范围都是从 0 ∼ M − 1 0 \sim M-1 0M1 0 ∼ N − 1 0\sim N-1 0N1
u , v u,v u,v:频率域中的坐标,代表图像中的频率分量。
M , N M,N M,N:图像的尺寸,即灰度矩阵的宽度和高度。
i i i:虚数单位。
u u u v v v是频率域中的坐标变量,它们分别代表了图像在水平方向和垂直方向上的频率分量。这些频率分量是图像中不同空间频率的正弦波和余弦波的叠加结果, u u u v v v的取值范围和 x , y x,y x,y相同。
下面说一下具体意义:傅里叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数。图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈的区域,对应的频率值较高。
图像的频谱是图像灰度变化强度的指标,是灰度在平面空间中的梯度。 二维傅里叶变换算法的运行速度很慢的,算法的时间复杂度为O(n^ 4)。在实际应用中,由于直接计算二维离散傅里叶变换的计算量较大,通常会采用快速傅里叶变换(Fast Fourier Transform, FFT)算法来提高计算效率。FFT算法通过减少不必要的计算来加速DFT的计算过程,是图像处理中常用的傅里叶变换实现方法。此外,在图像处理中,还经常对DFT的结果进行中心化处理(即将频率域的原点移动到矩阵的中心),以便于观察和分析频谱的对称性。中心化后的频谱图通常能够更直观地展示图像的频率分布特征。
如上图右所示,利用快速傅里叶变换并且将低频部分移动到中心。

A: Matlab对彩色图片进行傅里叶变换和逆变换的过程可以分为以下几步: 1.读取彩色图片 使用Matlab的imread函数读取彩色图片: ``` img = imread('image.jpg'); ``` 这里的' image.jpg '是图片的文件名,需要根据实际情况进行修改。 2.将图片转换为灰度图片 Matlab进行傅里叶变换和逆变换的函数只能处理灰度图片,因此需要将彩色图片转换为灰度图片。可以使用Matlab的rgb2gray函数: ``` img_gray = rgb2gray(img); ``` 3.进行傅里叶变换 使用Matlab的fft2函数进行傅里叶变换: ``` img_fft = fft2(img_gray); ``` 4.进行逆变换 使用Matlab的ifft2函数进行逆变换: ``` img_ifft = ifft2(img_fft); ``` 5.显示结果 可以使用Matlab的imshow函数分别显示原始图片、傅里叶变换后的频谱图和逆变换后的图片: ``` subplot(1,3,1);imshow(img); subplot(1,3,2);imagesc(log(abs(fftshift(img_fft))));colormap(gray); subplot(1,3,3);imshow(abs(img_ifft),[]); ``` 这里使用subplot函数将三张图片显示在一个窗口。 完整代码如下: ``` %% 读取彩色图片 img = imread('image.jpg'); %% 将彩色图片转换为灰度图片 img_gray = rgb2gray(img); %% 进行傅里叶变换 img_fft = fft2(img_gray); %% 进行逆变换 img_ifft = ifft2(img_fft); %% 显示结果 subplot(1,3,1);imshow(img); subplot(1,3,2);imagesc(log(abs(fftshift(img_fft))));colormap(gray); subplot(1,3,3);imshow(abs(img_ifft),[]); ``` 注意:在显示频谱图时,可以使用log(abs(fftshift(img_fft)))函数将复数傅里叶变换结果的振幅谱取对数,以便更好地显示。此外,使用fftshift函数将频谱的低频部分移动到心位置,也能让频谱图更直观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小沈不会泛函

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值
>