matlab双边滤波低照度彩色图像增强代码
时间: 2023-07-10 08:35:21 浏览: 151
以下是使用双边滤波进行低照度彩色图像增强的MATLAB代码:
```matlab
clear all; close all; clc;
% 读取低照度彩色图像
img = imread('low_light_image.jpg');
% 转换为浮点数
img = im2double(img);
% 双边滤波参数
w = 5; % 窗口大小
sigma_d = 2; % 空间高斯核标准差
sigma_r = 0.1; % 强度高斯核标准差
% 双边滤波增强
enhanced_img = zeros(size(img));
for c = 1:3
enhanced_img(:,:,c) = bilateral_filter(img(:,:,c), w, sigma_d, sigma_r);
end
% 显示原始图像和增强后的图像
figure;
subplot(1,2,1); imshow(img); title('原始图像');
subplot(1,2,2); imshow(enhanced_img); title('增强后的图像');
```
其中,`bilateral_filter` 函数实现了双边滤波,代码如下:
```matlab
function output = bilateral_filter(input, w, sigma_d, sigma_r)
% 获取图像大小
[h, w] = size(input);
% 初始化输出图像
output = zeros(h, w);
% 计算空间高斯核
[X, Y] = meshgrid(-w:w, -w:w);
G_d = exp(-(X.^2 + Y.^2) / (2*sigma_d^2));
% 对每个像素进行滤波
for i = 1:h
for j = 1:w
% 计算强度高斯核
G_r = exp(-(input(i,j) - input) .^ 2 / (2*sigma_r^2));
% 计算双边滤波器
W = G_d .* G_r;
Z = sum(W(:));
output(i,j) = sum(sum(W .* input)) / Z;
end
end
end
```
注意,在使用该代码时,需要将 `low_light_image.jpg` 替换为自己的低照度彩色图像的文件名。另外,可以根据需要调整双边滤波的参数,包括窗口大小 `w`、空间高斯核标准差 `sigma_d` 和强度高斯核标准差 `sigma_r`。
阅读全文