分别使用理想和巴特沃斯高低通滤波器对图像进行滤波matlab代码
时间: 2023-09-18 22:12:19 浏览: 83
理想高通滤波器:
```matlab
% 读取图像
img = imread('image.jpg');
% 获取图像大小
[M, N, ~] = size(img);
% 构造滤波器
D0 = 30;
H = zeros(M, N);
for u = 1:M
for v = 1:N
D = sqrt((u - M/2)^2 + (v - N/2)^2);
if D > D0
H(u, v) = 1;
end
end
end
% 快速傅里叶变换
F = fft2(double(img));
% 滤波
G = H .* F;
% 快速傅里叶逆变换
g = uint8(real(ifft2(G)));
% 显示图像
imshow(g);
```
理想低通滤波器:
```matlab
% 读取图像
img = imread('image.jpg');
% 获取图像大小
[M, N, ~] = size(img);
% 构造滤波器
D0 = 30;
H = zeros(M, N);
for u = 1:M
for v = 1:N
D = sqrt((u - M/2)^2 + (v - N/2)^2);
if D <= D0
H(u, v) = 1;
end
end
end
% 快速傅里叶变换
F = fft2(double(img));
% 滤波
G = H .* F;
% 快速傅里叶逆变换
g = uint8(real(ifft2(G)));
% 显示图像
imshow(g);
```
巴特沃斯高通滤波器:
```matlab
% 读取图像
img = imread('image.jpg');
% 获取图像大小
[M, N, ~] = size(img);
% 构造滤波器
D0 = 30;
n = 2;
H = zeros(M, N);
for u = 1:M
for v = 1:N
D = sqrt((u - M/2)^2 + (v - N/2)^2);
if D ~= 0
H(u, v) = 1 / (1 + (D0 / D)^(2*n));
end
end
end
% 快速傅里叶变换
F = fft2(double(img));
% 滤波
G = H .* F;
% 快速傅里叶逆变换
g = uint8(real(ifft2(G)));
% 显示图像
imshow(g);
```
巴特沃斯低通滤波器:
```matlab
% 读取图像
img = imread('image.jpg');
% 获取图像大小
[M, N, ~] = size(img);
% 构造滤波器
D0 = 30;
n = 2;
H = zeros(M, N);
for u = 1:M
for v = 1:N
D = sqrt((u - M/2)^2 + (v - N/2)^2);
if D ~= 0
H(u, v) = 1 / (1 + (D / D0)^(2*n));
end
end
end
% 快速傅里叶变换
F = fft2(double(img));
% 滤波
G = H .* F;
% 快速傅里叶逆变换
g = uint8(real(ifft2(G)));
% 显示图像
imshow(g);
```
阅读全文