基于多尺度retinex算法低光照彩色图片增强的MATLAB代码
时间: 2023-08-25 19:06:14 浏览: 123
以下是基于多尺度retinex算法低光照彩色图片增强的MATLAB代码示例:
```matlab
function [outimg] = MSR(img, a, b, alpha, beta, G)
% 基于多尺度retinex算法低光照彩色图片增强
% img: 输入图像
% a: 算法中的常数a
% b: 算法中的常数b
% alpha: 算法中的常数alpha
% beta: 算法中的常数beta
% G: 高斯卷积核大小
if nargin == 4
beta = 1;
G = 15;
elseif nargin == 5
G = 15;
end
% 将输入图像转化为double类型,范围为[0,1]
img = im2double(img);
% 对图像进行多尺度分解
scales = 3;
img = rgb2gray(img); % 将彩色图像转换为灰度图像
[height, width] = size(img);
for s = 1:scales
sigma = 2^(s-1);
img_g = imgaussfilt(img, G*sigma);
img_l = img - img_g;
img_l = imresize(img_l, [height, width], 'bilinear');
img_s(:,:,s) = img_l;
end
% 计算图像的全局平均值
mean_l = mean(mean(img_s(:,:,1)));
mean_c = mean(mean(mean(img)));
% 计算图像的权重
w = alpha*(mean_l/mean_c).^beta;
% 对图像进行增强
for s = 1:scales
img_s(:,:,s) = img_s(:,:,s)./(img_s(:,:,s) + a*w);
end
% 对增强后的图像进行加权重构
outimg = zeros(height, width, 3);
for s = 1:scales
sigma = 2^(s-1);
img_s(:,:,s) = imresize(img_s(:,:,s), [height, width], 'bilinear');
img_s(:,:,s) = imgaussfilt(img_s(:,:,s), G*sigma);
outimg = outimg + b*img_s(:,:,s);
end
outimg = outimg + (1-b)*img;
end
```
使用示例:
```matlab
img = imread('test.jpg');
outimg = MSR(img, 0.001, 0.75, 125, 1);
imshow(outimg);
```
阅读全文