双边滤波matlab代码
时间: 2023-07-09 18:29:42 浏览: 46
下面是一个简单的双边滤波的 MATLAB 代码:
```matlab
function [output] = bilateralFilter(input, spatial_sigma, intensity_sigma)
% 双边滤波函数
% input: 输入图像
% spatial_sigma: 空间域标准差
% intensity_sigma: 强度域标准差
% output: 输出图像
% 计算图像行列数
[rows, cols] = size(input);
% 初始化输出图像
output = zeros(rows, cols);
% 遍历图像每个像素
for i = 1:rows
for j = 1:cols
% 初始化权重和像素值
weight_sum = 0;
pixel_sum = 0;
% 遍历周围像素
for k = max(1, i - 2*spatial_sigma):min(rows, i + 2*spatial_sigma)
for l = max(1, j - 2*spatial_sigma):min(cols, j + 2*spatial_sigma)
% 计算空间距离和强度距离
spatial_distance = sqrt((k - i)^2 + (l - j)^2);
intensity_distance = abs(input(k, l) - input(i, j));
% 计算权重
weight = exp(-spatial_distance^2 / (2*spatial_sigma^2) - intensity_distance^2 / (2*intensity_sigma^2));
% 更新权重和像素值
weight_sum = weight_sum + weight;
pixel_sum = pixel_sum + weight * input(k, l);
end
end
% 更新输出像素值
output(i, j) = pixel_sum / weight_sum;
end
end
```
该代码实现了一个简单的双边滤波函数,输入为一个灰度图像,输出为双边滤波后的图像。其中 spatial_sigma 和 intensity_sigma 分别为空间域和强度域的标准差。