matlab 进行频率域滤波
时间: 2023-06-16 13:06:35 浏览: 59
在 MATLAB 中进行频率域滤波,可以通过以下步骤实现:
1. 读取图像并进行灰度化处理:
```matlab
img = imread('example.jpg');
img_gray = rgb2gray(img);
```
2. 对图像进行二维傅里叶变换:
```matlab
img_fft = fft2(double(img_gray));
```
3. 对图像进行中心化处理:
```matlab
img_fft_shift = fftshift(img_fft);
```
4. 构造滤波器,并将其应用于图像的频率域:
```matlab
[M, N] = size(img_gray);
radius = 30;
H = fspecial('disk', radius);
H = padarray(H, [M-radius N-radius], 'post');
H = circshift(H, [-radius/2 -radius/2]);
H = fft2(H);
H = fftshift(H);
img_fft_filtered = img_fft_shift .* H;
```
在上述代码中,我们构造了一个半径为30像素的圆形滤波器,然后将其应用于图像的频率域中。
5. 对滤波后的图像进行逆傅里叶变换:
```matlab
img_filtered = real(ifft2(ifftshift(img_fft_filtered)));
```
6. 显示原图和滤波后的图像:
```matlab
subplot(1,2,1); imshow(img_gray); title('Original Image');
subplot(1,2,2); imshow(uint8(img_filtered)); title('Filtered Image');
```
上述代码中,我们使用 subplot 函数将原图和滤波后的图像显示在同一张图上,方便对比。
完整代码如下:
```matlab
img = imread('example.jpg');
img_gray = rgb2gray(img);
img_fft = fft2(double(img_gray));
img_fft_shift = fftshift(img_fft);
[M, N] = size(img_gray);
radius = 30;
H = fspecial('disk', radius);
H = padarray(H, [M-radius N-radius], 'post');
H = circshift(H, [-radius/2 -radius/2]);
H = fft2(H);
H = fftshift(H);
img_fft_filtered = img_fft_shift .* H;
img_filtered = real(ifft2(ifftshift(img_fft_filtered)));
subplot(1,2,1); imshow(img_gray); title('Original Image');
subplot(1,2,2); imshow(uint8(img_filtered)); title('Filtered Image');
```
注意,上述代码中使用了 fspecial 函数生成圆形滤波器,如果需要使用其他类型的滤波器,可以参考 MATLAB 的官方文档进行修改。