双边滤波matlab代码
时间: 2023-10-11 09:09:53 浏览: 56
双边滤波是一种图像滤波算法,它可以在保留边缘信息的同时平滑图像。下面是一份使用Matlab实现双边滤波的代码:
```matlab
function [output_img] = bilateral_filter(input_img, sigma_d, sigma_r)
% 双边滤波算法
% input_img: 输入图像
% sigma_d: 空间核函数标准差
% sigma_r: 强度核函数标准差
% output_img: 输出图像
% 获取输入图像的大小
[rows, cols] = size(input_img);
% 初始化输出图像
output_img = zeros(rows, cols);
% 计算空间核函数
[X, Y] = meshgrid(1:cols, 1:rows);
space_kernel = exp(-((X - Y).^2 + (Y - X).^2) / (2 * sigma_d^2));
% 对每个像素进行处理
for i = 1:rows
for j = 1:cols
% 获取当前像素的强度值
intensity = input_img(i, j);
% 计算强度核函数
intensity_diff = intensity - input_img;
intensity_kernel = exp(-(intensity_diff.^2) / (2 * sigma_r^2));
% 计算双边滤波器的输出值
bilateral_filter = space_kernel .* intensity_kernel;
normalization_factor = sum(bilateral_filter(:));
output_img(i, j) = sum(sum(bilateral_filter .* input_img)) / normalization_factor;
end
end
% 将输出图像的数据类型转换为与输入图像相同
output_img = cast(output_img, class(input_img));
end
```
在使用该函数时,需要传入输入图像、空间核函数的标准差和强度核函数的标准差。函数返回一个双边滤波后的输出图像。注意,该函数中的循环嵌套较多,可能会导致处理时间较长。为了加快处理速度,可以考虑使用Matlab内置的函数(如`imgaussfilt`)来实现图像滤波。