matlab实现图像频域的平滑滤波,显示全部代码
时间: 2024-11-05 15:25:14 浏览: 50
在MATLAB中,图像频域平滑滤波通常通过傅立叶变换(FFT)将图像从空间域转换到频率域,应用低通滤波器(如卷积核),然后逆傅立叶变换(IFFT)返回到空间域。下面是一个简单的示例,演示如何使用MATLAB的基本功能来实现高斯滤波:
```matlab
% 加载图像
img = imread('example_image.jpg'); % 替换为你的图片文件名
% 确保图像为双精度浮点数
img = double(img);
% 计算图像尺寸
[M, N] = size(img);
% 定义高斯滤波器的大小和标准差
filter_size = 5; % 可调整滤波器大小
sigma = filter_size / sqrt(8*log(2)); % 高斯函数的标准偏差
% 创建高斯滤波核
h = fspecial('gaussian', [filter_size, filter_size], sigma);
% 对图像进行离散傅立叶变换
F = fft2(img);
% 应用滤波器在频域
F_filtered = F .* abs(h); % 使用点乘操作(.|.)在频域进行滤波
% 计算倒谱
filtered_img = ifft2(F_filtered);
% 将结果转换回实际像素值范围 (0-1)
filtered_img = abs(filtered_img) ./ max(abs(filtered_img(:)));
% 显示原图和处理后的图像
subplot(1,2,1), imshow(img, 'InitialMagnification', 'fit');
title('Original Image');
subplot(1,2,2), imshow(uint8(filtered_img), 'InitialMagnification', 'fit');
title('Filtered Image (Gaussian Blur)');
```
注意:这个例子假设你已经安装了`imread`函数用于读取图像,并且`fspecial`、`fft2`和`ifft2`等函数都内置在MATLAB的Image Processing Toolbox中。
阅读全文