双边滤波去噪matlab代码,双边滤波(bilateral filter)彩色图 matlab实现代码
时间: 2023-11-22 08:54:35 浏览: 92
bilateralFilter_essential4rr_双边滤波MATLAB实现_双边滤波_out_
双边滤波是一种可以同时考虑空间距离和像素值差异的滤波方法,可以在去除图像噪声的同时保留图像细节。下面是双边滤波的Matlab代码实现:
```matlab
function [output_image] = bilateral_filter(input_image, sigma_d, sigma_r)
% 双边滤波函数
% input_image: 输入图像
% sigma_d: 空域滤波器的标准差
% sigma_r: 像素值差异滤波器的标准差
% 将输入图像转换为double类型
input_image = im2double(input_image);
% 获取输入图像的大小
[M, N, ~] = size(input_image);
% 初始化输出图像
output_image = zeros(M, N, 3);
% 定义空域滤波器
[X, Y] = meshgrid(-ceil(3*sigma_d):ceil(3*sigma_d));
space_filter = exp(-(X.^2+Y.^2)/(2*sigma_d^2));
% 对于每个像素进行滤波
for i = 1:M
for j = 1:N
% 计算像素值差异滤波器
pixel_filter = exp(-((input_image(i,j,1)-input_image(:,:,1)).^2+...
(input_image(i,j,2)-input_image(:,:,2)).^2+...
(input_image(i,j,3)-input_image(:,:,3)).^2)/(2*sigma_r^2));
% 计算双边滤波器
bilateral_filter = space_filter .* pixel_filter;
% 归一化
bilateral_filter = bilateral_filter / sum(bilateral_filter(:));
% 计算输出像素值
output_image(i,j,1) = sum(sum(input_image(:,:,1).*bilateral_filter));
output_image(i,j,2) = sum(sum(input_image(:,:,2).*bilateral_filter));
output_image(i,j,3) = sum(sum(input_image(:,:,3).*bilateral_filter));
end
end
% 将输出图像转换为uint8类型
output_image = uint8(output_image*255);
```
使用方法:
```matlab
input_image = imread('input_image.png');
sigma_d = 2;
sigma_r = 0.1;
output_image = bilateral_filter(input_image, sigma_d, sigma_r);
imshow(output_image);
```
其中,`input_image.png`为输入图像的文件名,`sigma_d`为空域滤波器的标准差,`sigma_r`为像素值差异滤波器的标准差。
阅读全文