灰度图像滤波代码
时间: 2023-07-23 10:14:54 浏览: 42
以下是 MATLAB 中实现灰度图像均值滤波、中值滤波和高斯滤波的示例代码:
1. 均值滤波
```matlab
function output = average_filter(input, window_size)
% input: 输入灰度图像
% window_size: 滤波窗口大小(正方形)
% output: 输出灰度图像,与输入图像大小相同
[m, n] = size(input);
half_window = floor(window_size/2);
padded_input = padarray(input, [half_window, half_window], 'replicate', 'both');
output = zeros(m, n);
for i = 1:m
for j = 1:n
% 获取滤波窗口
window = padded_input(i:i+2*half_window, j:j+2*half_window);
% 计算窗口内像素的平均值
output(i, j) = mean(window(:));
end
end
output = uint8(output);
end
```
2. 中值滤波
```matlab
function output = median_filter(input, window_size)
% input: 输入灰度图像
% window_size: 滤波窗口大小(正方形)
% output: 输出灰度图像,与输入图像大小相同
[m, n] = size(input);
half_window = floor(window_size/2);
padded_input = padarray(input, [half_window, half_window], 'replicate', 'both');
output = zeros(m, n);
for i = 1:m
for j = 1:n
% 获取滤波窗口
window = padded_input(i:i+2*half_window, j:j+2*half_window);
% 计算窗口内像素的中值
output(i, j) = median(window(:));
end
end
output = uint8(output);
end
```
3. 高斯滤波
```matlab
function output = gaussian_filter(input, sigma)
% input: 输入灰度图像
% sigma: 高斯核函数标准差
% output: 输出灰度图像,与输入图像大小相同
mask_size = 2*ceil(3*sigma)+1;
mask = fspecial('gaussian', mask_size, sigma);
output = imfilter(input, mask, 'replicate');
output = uint8(output);
end
```
需要注意的是,以上示例代码仅适用于灰度图像的滤波操作,如果要对彩色图像进行滤波,需要对 R、G、B 三个通道分别进行处理。另外,为了避免边缘像素处理时越界,代码中使用了 padarray 函数对图像进行了边缘扩展。