图像频域变换

目录

实验目的

我的分析

实验内容+代码+运行结果

总结


实验目的

1、理解离散傅立叶变换的基本原理;

2、掌握应用MATLAB语言进行FFT及逆变换的方法;

3、熟悉图像在频域中的滤波处理方法,应用MATLAB语言实现简单的滤波处理。

我的分析

图像频域变换是一种将图像从空域转换到频域的方法,常用的频域变换包括傅里叶变换(Fourier Transform)和小波变换(Wavelet Transform)等。通过频域变换,我们可以对图像进行频谱分析、滤波和压缩等操作。

在进行图像频域变换实验分析时,可以按照以下步骤进行:

  1. 载入图像:选择一张待处理的图像,可以是灰度图像或彩色图像。

  2. 图像预处理:对图像进行必要的预处理操作,如灰度化、尺寸调整等。

  3. 频域变换:选择适当的频域变换方法,如傅里叶变换或小波变换,将图像从空域转换到频域。

  4. 频谱分析:分析频域图像的频谱特征,可以通过绘制频谱图或直方图等方式进行观察和分析。

  5. 滤波操作:在频域进行滤波操作,可以实现图像的去噪、增强等目的。常见的滤波器包括低通滤波器、高通滤波器等。

  6. 逆变换:将经过频域处理的图像进行逆变换,将其恢复到空域。

  7. 结果分析:观察和比较经过频域变换后的图像与原图像的差异,评估处理效果。

在实验分析中,可以通过对比不同频域变换方法、滤波器参数的选择,以及对比处理前后的图像质量等指标,来评估不同算法或方法的优劣。同时,也可以从应用角度出发,探索图像频域变换在图像处理中的具体应用,如图像压缩、图像增强等。

需要注意的是,在进行实验分析时,应遵守相关的研究规范和实验室安全操作规程,确保实验的准确性和安全性。

实验内容+代码+运行结果

1.读取一幅灰度图像,显示这幅图像,对图像作傅立叶变换,显示频域振幅图像。作傅立叶逆变换,显示图像,看是否与原图像相同.

代码如下:

% 读取灰度图像
img = imread('F:/imge/lenna.jpg');
gray_img = rgb2gray(img);

% 进行傅里叶变换并将零频率分量移到中心位置
f = fftshift(fft2(gray_img));

% 求取振幅谱,进行对数变换,并显示成图像
magnitude_spectrum = log(abs(f) + 1);
imshow(magnitude_spectrum, []);
title('Magnitude Spectrum');

% 对振幅谱进行逆变换,显示出恢复的图像
reconstructed_image = ifft2(ifftshift(f));
imshow(abs(reconstructed_image), []);
title('Reconstructed Image');

% 将原始图像、频域振幅图像和逆变换得到的图像分别显示出来
subplot(1, 3, 1);
imshow(gray_img);
title('Original Image');

subplot(1, 3, 2);
imshow(magnitude_spectrum, []);
title('Magnitude Spectrum');

subplot(1, 3, 3);
imshow(abs(reconstructed_image), []);
title('Reconstructed Image');

运行结果:

2.设计一个简单的理想低通滤波器(截止频率自选),对图像作频域低通滤波,再作反变换,观察滤波后的图像与原图像的区别。选取不同的截止频率,比较结果。

代码如下:

% 读取图像并转换为灰度图像
image = imread('F:/imge/camema.jpg');
if size(image,3) > 1
    image = rgb2gray(image);
end

% 对图像进行傅里叶变换
fftImage = fftshift(fft2(image));

% 获取图像尺寸
[M, N] = size(fftImage);
centerX = round(M/2);
centerY = round(N/2);

% 设计理想低通滤波器
cutoffFrequency = 30; % 自选截止频率
filter = zeros(M, N);
for i = 1:M
    for j = 1:N
        distance = sqrt((i-centerX)^2 + (j-centerY)^2);
        if distance <= cutoffFrequency
            filter(i, j) = 1;
        end
    end
end

% 滤波
filteredImage = fftImage .* filter;

% 傅里叶反变换
result = ifft2(ifftshift(filteredImage));

% 显示原始图像和滤波后的图像
figure;
subplot(1, 2, 1); imshow(image); title('原始图像');
subplot(1, 2, 2); imshow(uint8(real(result))); title('滤波后的图像');

运行结果:

当cutoffFrequency = 10时: 

当cutoffFrequency = 30时:

当cutoffFrequency = 50时:

3.设计一个简单的理想高通滤波器(截止频率自选),对图像作频域高通滤波,再作反变换,观察滤波后的图像与原图像的区别。选取不同的截止频率,比较结果。

代码如下:

% 读取图像并转换为灰度图像
image = imread('F:/imge/camema.jpg');
if size(image, 3) > 1
    image = rgb2gray(image);
end

% 对图像进行傅里叶变换
fftImage = fftshift(fft2(image));

% 获取图像尺寸
[M, N] = size(fftImage);
centerX = round(M/2);
centerY = round(N/2);

% 设计理想高通滤波器
cutoffFrequency = 30; % 自选截止频率
filter = ones(M, N);
for i = 1:M
    for j = 1:N
        distance = sqrt((i - centerX)^2 + (j - centerY)^2);
        if distance <= cutoffFrequency
            filter(i, j) = 0;
        end
    end
end

% 滤波
filteredImage = fftImage .* filter;

% 傅里叶反变换
result = ifft2(ifftshift(filteredImage));

% 显示原始图像和滤波后的图像
figure;
subplot(1, 2, 1); imshow(image); title('原始图像');
subplot(1, 2, 2); imshow(uint8(real(result))); title('滤波后的图像');

运行结果:

当cutoffFrequency = 10:

当cutoffFrequency = 30:

当cutoffFrequency = 50:

4.对一幅图像作傅立叶变换,显示一幅频域图像的振幅分布图和相位分布图,分别对振幅分布和相位分布作傅立叶逆变换,观察两幅逆变换后的图像,体会频域图像中振幅与位相的作用。

代码如下:

% 读取图像并转换为灰度图像
image = imread('F:/imge/lenna.jpg');
if size(image, 3) > 1
    image = rgb2gray(image);
end

% 对图像进行傅立叶变换
fftImage = fftshift(fft2(image));

% 计算振幅和相位信息
amplitude = abs(fftImage);
phase = angle(fftImage);

% 傅立叶逆变换(振幅分布)
reconstructedAmplitude = ifft2(ifftshift(amplitude));

% 傅立叶逆变换(相位分布)
reconstructedPhase = ifft2(ifftshift(exp(1i*phase)));

% 显示原始图像
figure;
subplot(2, 3, 1); imshow(image); title('原始图像');

% 显示频域图像的振幅分布图
subplot(2, 3, 4); imshow(log(1 + amplitude), []); title('频域图像的振幅分布图');

% 显示频域图像的相位分布图
subplot(2, 3, 5); imshow(phase, []); title('频域图像的相位分布图');

% 显示振幅逆变换后的图像
subplot(2, 3, 2); imshow(uint8(real(reconstructedAmplitude))); title('振幅逆变换后的图像');

% 显示相位逆变换后的图像
subplot(2, 3, 3); imshow(uint8(real(reconstructedPhase))); title('相位逆变换后的图像');

运行结果:

5.设计一个其它类型(如巴特沃思、指数、梯形等)的低通滤波器,对图像作频域低通滤波,比较这一滤波器与理想滤波器对图像滤波结果的差异。

代码如下:


% 读取图像并转换为灰度图像
image = imread('F:/imge/lenna.jpg');
if size(image, 3) > 1
    image = rgb2gray(image);
end

% 对图像进行傅立叶变换
fftImage = fftshift(fft2(image));

% 定义截止频率和指数参数
cutoffFreq = 30;        % 截止频率
exponent = 4;          % 指数参数

% 创建指数低通滤波器
[m, n] = size(image);
[X, Y] = meshgrid(1:n, 1:m);
distance = sqrt((X-n/2).^2 + (Y-m/2).^2);
frequencyResponse = exp(-distance / cutoffFreq).^exponent;

% 对频域图像进行滤波
filteredImageExp = real(ifft2(ifftshift(frequencyResponse .* fftImage)));

% 创建理想低通滤波器
cutoffFreqPixel = floor(cutoffFreq * sqrt(m^2 + n^2));
frequencyResponseIdeal = zeros(m, n);
mask = distance <= cutoffFreqPixel;
frequencyResponseIdeal(mask) = 1;

% 对频域图像进行滤波
filteredImageIdeal = real(ifft2(ifftshift(frequencyResponseIdeal .* fftImage)));

% 显示原始图像和滤波结果
figure;
subplot(1, 3, 1); imshow(image); title('原始图像');
subplot(1, 3, 2); imshow(filteredImageExp, []); title('指数低通滤波结果');
subplot(1, 3, 3); imshow(filteredImageIdeal, []); title('理想低通滤波结果');

% 计算滤波结果与原始图像的差异
filteredImageExp = uint8(filteredImageExp); % 转换为 uint8 类型
filteredImageIdeal = uint8(filteredImageIdeal); % 转换为 uint8 类型
mseExp = immse(image, filteredImageExp);
mseIdeal = immse(image, filteredImageIdeal);
fprintf('指数低通滤波器MSE误差:%f\n', mseExp);
fprintf('理想低通滤波器MSE误差:%f\n', mseIdeal);

运行结果:

由此不难看出,指数低通滤波器的MSE误差是很大的。

总结

通过本次实验,我理解了频域滤波的基本原理:频域滤波是一种基于图像在频率域上的变换和处理的方法。它通过对图像进行傅立叶变换,将图像转换为频率域表示,然后根据需要设计和应用不同类型的滤波器,最后再进行傅立叶逆变换,得到滤波后的图像。

掌握了傅立叶变换及其逆变换的操作:傅立叶变换是将一个函数从时域转换到频域的过程,傅立叶逆变换则是将一个函数从频域转换回时域。在实验中,我学会了使用MATLAB函数进行傅立叶变换及逆变换,并且观察了频域图像的幅度和相位分布。

熟悉了理想低通滤波器和理想高通滤波器的设计与应用:理想低通滤波器通过在频率域上保留低于截止频率的部分,抑制高频成分,从而实现平滑图像的效果。理想高通滤波器则是在频率域上保留高于截止频率的部分,去除低频信息,从而实现强调边缘和细节的效果。我了解了这两种滤波器的原理,并在实验中应用到图像处理中。

学会了分析滤波结果并比较滤波效果:在实验中,我对滤波前后的图像进行了对比观察,并计算了滤波结果与原始图像之间的均方误差。通过这些分析和比较,我能够评估不同滤波器的效果,并选择最适合需求的滤波器来处理图像。

总的来说,本次实验使我更加深入地了解了图像频域滤波的原理和方法,掌握了傅立叶变换及其逆变换的操作,学会了设计和应用理想低通滤波器和理想高通滤波器,同时也提高了对滤波结果的分析和比较能力。这些知识和技能对于图像处理和相关领域的研究和应用具有重要意义。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值