基于matlab的retinex理论低照度图像增强代码
时间: 2023-11-13 17:06:06 浏览: 169
多级分解的Retinex低照度图像增强算法
以下是基于Matlab的Retinex理论低照度图像增强的示例代码,使用的是多尺度Retinex(MSR)算法:
```matlab
% 读入低照度图像
img = imread('low_light_image.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 设置MSR算法的参数
scales = 3; % 尺度数
weight = 0.5; % 权重
% 对图像进行MSR算法增强
enhanced_img = MSR(gray_img, scales, weight);
% 显示原始图像和增强后的图像
subplot(1,2,1);
imshow(gray_img);
title('Original Image');
subplot(1,2,2);
imshow(enhanced_img);
title('Enhanced Image');
% MSR算法函数
function [enhanced_img] = MSR(img, scales, weight)
% 对图像进行高斯平滑
img_smoothed = imgaussfilt(img, 5);
enhanced_img = zeros(size(img));
for i = 1:scales
% 计算局部均值和标准差
img_mean = imgaussfilt(img_smoothed, 2^i-1);
img_diff = img_smoothed - img_mean;
img_std = sqrt(imgaussfilt(img_diff.^2, 2^i-1));
% 计算对数域表示
img_log = log(weight * img_diff ./ img_std + 1);
% 反变换
img_exp = exp(imresize(img_log, size(img)));
% 累加每个尺度的结果
enhanced_img = enhanced_img + img_exp;
end
% 亮度归一化
enhanced_img = (enhanced_img - min(enhanced_img(:))) ./ (max(enhanced_img(:)) - min(enhanced_img(:)));
end
```
需要注意的是,这只是一个示例代码,实际应用中可能需要根据具体情况进行参数调整和优化。
阅读全文