MSRCR代码matlab
时间: 2023-09-15 18:17:59 浏览: 173
下面是MSRCR(多尺度反应彩色恢复)的Matlab代码实现:
```matlab
function [result] = MSRCR(img, sigma_list, G, b, alpha, beta, low_clip, high_clip)
% 多尺度反应彩色恢复算法
% img: 输入图像
% sigma_list: 高斯核的标准差列表
% G: 每个高斯核的权重
% b: 对比度增强的参数
% alpha: 细节增强的参数
% beta: 饱和度增强的参数
% low_clip: 最低像素值
% high_clip: 最高像素值
% result: 输出图像
if ~exist('low_clip', 'var'), low_clip = 0; end
if ~exist('high_clip', 'var'), high_clip = 255; end
if size(img, 3) == 1
img = repmat(img, [1, 1, 3]);
end
result = zeros(size(img));
for i = 1:size(sigma_list, 2)
sigma = sigma_list(i);
I = imgaussfilt(img, sigma);
if i == 1
d = img - I;
E = d;
else
d = I_old - I;
E = alpha * abs(d) - beta * d;
end
I_old = I;
result = result + G(i) * (I + b * E);
end
result(result < low_clip) = low_clip;
result(result > high_clip) = high_clip;
result = uint8(result);
end
```
其中,`img` 为输入图像,`sigma_list` 为高斯核的标准差列表,`G` 为每个高斯核的权重,`b` 为对比度增强的参数,`alpha` 为细节增强的参数,`beta` 为饱和度增强的参数,`low_clip` 和 `high_clip` 分别为最低和最高像素值,`result` 为输出图像。在函数中,首先判断输入图像是否为灰度图像,如果是则转换成彩色图像;然后根据高斯核的标准差列表和权重计算每个尺度的图像;对于第一个尺度的图像,直接计算出细节图;对于其他尺度的图像,先计算出当前尺度和上一个尺度的差,然后根据差计算细节图;最后根据每个尺度的图像、细节图和权重计算彩色恢复图像,并进行像素值裁剪。
阅读全文