MSR 算法去雾 matlab实现
时间: 2023-07-28 21:07:22 浏览: 53
以下是 MSR 算法的 MATLAB 实现(仅供参考):
```matlab
function [dehazedImg, transmission] = MSR(img, w, gamma, b)
% img: 输入图像
% w: 滤波器大小
% gamma: 修正参数
% b: 饱和度参数
% 将图像转化为灰度图像
if size(img, 3) == 3
img = rgb2gray(img);
end
% 对图像进行多次高斯滤波和取对数运算,得到不同尺度的图像
scales = 3;
img = im2double(img);
log_img = zeros(size(img, 1), size(img, 2), scales);
for i = 1:scales
sigma = 2 ^ (i-1);
h = fspecial('gaussian', w, sigma);
blurred_img = imfilter(img, h, 'replicate');
log_img(:, :, i) = log(img) - log(blurred_img);
end
% 对不同尺度的图像进行加权平均,得到最终的去雾结果
weight = zeros(size(img));
for i = 1:scales
weight = weight + exp(gamma .* log_img(:, :, i));
end
weight = weight ./ scales;
transmission = min(max(weight, 0), 1);
dehazedImg = (img - b) ./ transmission + b;
dehazedImg = min(max(dehazedImg, 0), 1);
```
其中,`img` 为输入的图像,`w` 为滤波器大小,`gamma` 为修正参数,`b` 为饱和度参数。函数的输出包括去雾后的图像 `dehazedImg` 和透射图 `transmission`。需要注意的是,该实现中使用的是灰度图像,如果需要处理彩色图像,可以先将图像转化为灰度图像或者对三个通道分别进行处理。