图像处理之理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器的Matlab实现

作者:蛮不讲李2024.01.18 12:12浏览量:14

简介:介绍如何在Matlab中实现理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器,并利用这些滤波器进行图像去噪。

在图像处理中,低通滤波器是一种常用的技术,用于去除图像中的噪声。理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器是三种常见的低通滤波器。下面我们将介绍如何在Matlab中实现这三种滤波器,并利用它们进行图像去噪。
一、理想低通滤波器
理想低通滤波器是一种理想的低频通过、高频阻断的滤波器。在Matlab中,我们可以使用butter函数来设计理想低通滤波器。以下是一个示例代码:

  1. % 读取图像
  2. img = imread('noisy_image.jpg');
  3. % 转换为灰度图像
  4. gray_img = rgb2gray(img);
  5. % 设计理想低通滤波器
  6. [M, N] = size(gray_img);
  7. [x, y] = meshgrid(1:N, 1:M);
  8. [r, theta] = cart2pol(x - N/2, y - M/2);
  9. cutoff = 50; % 截止频率
  10. r_max = cutoff * sqrt(1 - (2*theta/(2*pi))^2);
  11. [h, f] = butter(M, r_max, 'high');
  12. % 应用滤波器
  13. h_pad = [h h; h(end:-1:1) h]; % 镜像扩展
  14. h_pad = h_pad(1:N*2, 1:M*2); % 零填充
  15. filtered_img = conv2(double(gray_img), h_pad, 'same');
  16. % 显示去噪后的图像
  17. imshow(uint8(filtered_img));

在这个示例中,我们首先读取一张带有噪声的图像,并将其转换为灰度图像。然后,我们使用butter函数设计一个理想低通滤波器,其中MN是图像的行数和列数,xy是网格坐标,rtheta是极坐标坐标,cutoff是截止频率。接下来,我们将滤波器的系数进行镜像扩展和零填充,然后将其应用到灰度图像上,得到去噪后的图像。最后,我们使用imshow函数显示去噪后的图像。
二、巴特沃斯低通滤波器
巴特沃斯低通滤波器是一种常用的低通滤波器,其特点是具有平坦的通带和陡峭的过渡带。在Matlab中,我们可以使用butter函数来设计巴特沃斯低通滤波器。以下是一个示例代码:
```matlab
% 读取图像
img = imread(‘noisy_image.jpg’);
% 转换为灰度图像
gray_img = rgb2gray(img);
% 设计巴特沃斯低通滤波器
bW = 10; % 滤波器的阶数
b_div = 50; % 分隔频率
dBstop = 30; % 阻带衰减
bW_rad = bW pi / 180; % 将角度转换为弧度
b_rad = b_div
pi / 180; % 将角度转换为弧度
dBstop_rad = DBstop / 10; % 将分贝转换为线性幅度单位
r_max = sqrt(bW^2 / (pi bW_rad^2 (sin(b_div/2)^2)));
h = 1 / (1 + exp(-bW / bW_rad (r / r_max - 1)));
h = h - h
exp(-10 (r / r_max - 1));
h = h / sum(h); % 归一化系数
h_pad = [h h; h(end:-1:1) h]; % 镜像扩展
h_pad = h_pad(1:N
2, 1:M*2); % 零填充
filtered_img = conv2(double(gray_img), h_pad, ‘same’);
% 显示去噪后的