将图片转换到频域在进行低通滤波操作 matlab实现
时间: 2024-03-19 10:45:26 浏览: 29
在 MATLAB 中,将图像转换到频域并进行低通滤波操作的步骤如下:
1. 读入图像并转换为灰度图像:
```
img = imread('image.jpg');
img_gray = rgb2gray(img);
```
2. 对图像进行填充:
```
[M, N] = size(img_gray);
P = 2^nextpow2(M); % 行数取2的整数次幂
Q = 2^nextpow2(N); % 列数取2的整数次幂
F = fft2(double(img_gray), P, Q);
```
3. 对填充后的图像进行中心化:
```
F_shift = fftshift(F);
```
4. 建立一个低通滤波器,这里使用一个半径为r的圆形低通滤波器:
```
r = 50; % 滤波器半径
H = ones(P, Q);
cx = P/2+1; % 中心点x坐标
cy = Q/2+1; % 中心点y坐标
for i = 1:P
for j = 1:Q
if (i-cx)^2 + (j-cy)^2 > r^2
H(i, j) = 0;
end
end
end
```
5. 将滤波器应用于频域图像:
```
G = F_shift .* H;
```
6. 对滤波后的频域图像进行逆变换:
```
g = real(ifft2(ifftshift(G)));
```
7. 去掉填充的部分:
```
g = g(1:M, 1:N);
```
完整代码如下:
```
img = imread('image.jpg');
img_gray = rgb2gray(img);
[M, N] = size(img_gray);
P = 2^nextpow2(M);
Q = 2^nextpow2(N);
F = fft2(double(img_gray), P, Q);
F_shift = fftshift(F);
r = 50; % 滤波器半径
H = ones(P, Q);
cx = P/2+1;
cy = Q/2+1;
for i = 1:P
for j = 1:Q
if (i-cx)^2 + (j-cy)^2 > r^2
H(i, j) = 0;
end
end
end
G = F_shift .* H;
g = real(ifft2(ifftshift(G)));
g = g(1:M, 1:N);
imshow(g, []);
```
以上代码中,imshow(g, [])用于显示滤波后的图像。