图像滤波matlab
时间: 2023-10-19 07:33:08 浏览: 100
在Matlab中,可以使用双边滤波算法对图像进行去噪处理。双边滤波是一种非线性滤波方法,它能够在保持边缘信息的同时有效地降低图像噪声。
下面是一个使用Matlab进行图像双边滤波去噪的示例代码:
```matlab
% 读取图像
img = imread('input_image.jpg');
% 将图像转换为灰度图
gray_img = rgb2gray(img);
% 添加高斯噪声
noisy_img = imnoise(gray_img, 'gaussian', 0, 0.01);
% 双边滤波去噪
filtered_img = bilateralFilter(noisy_img, 3, 10, 10);
% 显示原始图像和去噪后的图像
figure;
subplot(1,2,1);
imshow(noisy_img);
title('Noisy Image');subplot(1,2,2);
imshow(filtered_img);
title('Filtered Image');
% 双边滤波函数
function output = bilateralFilter(input, sigma_spatial, sigma_range, window_size)
[h, w] = size(input);
output = zeros(size(input));
pad_size = floor(window_size/2);
padded_input = padarray(input, [pad_size, pad_size], 'replicate');
for i = 1:h
for j = 1:w
center_pixel = padded_input(i+pad_size, j+pad_size);
weighted_sum = 0;
weight_sum = 0;
for m = -pad_size:pad_size
for n = -pad_size:pad_size
spatial_distance = sqrt(m^2 + n^2);
range_distance = abs(center_pixel - padded_input(i+m+pad_size, j+n+pad_size));
weight = exp(-(spatial_distance^2)/(2*sigma_spatial^2)) * exp(-(range_distance^2)/(2*sigma_range^2));
weighted_sum = weighted_sum + padded_input(i+m+pad_size, j+n+pad_size) * weight;
weight_sum = weight_sum + weight;
end
end
output(i, j) = weighted_sum / weight_sum;
end
end
end
```
在这个示例中,首先读取输入图像,然后将其转换为灰度图像。接下来,使用`imnoise`函数向灰度图像添加高斯噪声。然后,定义了一个双边滤波函数`bilateralFilter`,其中包含双边滤波的核心算法。最后,通过调用`bilateralFilter`函数对噪声图像进行去噪处理,并显示原始图像和去噪后的图像。
请注意,上述代码中的双边滤波函数是自己实现的简单版本,你可以根据需要进行优化和修改。另外,调整参数`sigma_spatial`、`sigma_range`和`window_size`可以获得不同的去噪效果。
阅读全文