以下是基于Retinex算法实现图像增强的几种常见方法(SSR、MSR、MSRCR、MSRCP)的示例Matlab代码:
SSR(Single-Scale Retinex):
matlab
function enhanced_image = SSR(image, sigma)
log_image = log(double(image) + 1);
blurred_image = imgaussfilt(log_image, sigma);
diff_image = log_image - blurred_image;
enhanced_image = imadjust(image, [min(diff_image(😃), max(diff_image(😃)], []);
end
MSR(Multi-Scale Retinex):
matlab
function enhanced_image = MSR(image, scales)
log_image = log(double(image) + 1);
enhanced_image = zeros(size(image));
for i = 1:length(scales)
blurred_image = imgaussfilt(log_image, scales(i));
diff_image = log_image - blurred_image;
enhanced_image = enhanced_image + diff_image;
end
enhanced_image = imadjust(image - enhanced_image, [min(enhanced_image(😃), max(enhanced_image(😃)], []);
end
MSRCR(Multi-Scale Retinex with Color Restoration):
matlab
function enhanced_image = MSRCR(image, scales, gain)
rgb_image = im2double(image);
enhanced_image = zeros(size(rgb_image));
for i = 1:3
channel = rgb_image(:, :, i);
log_channel = log(channel + 1);
enhanced_channel = zeros(size(channel));
for j = 1:length(scales)
blurred_channel = imgaussfilt(log_channel, scales(j));
diff_channel = log_channel - blurred_channel;
enhanced_channel = enhanced_channel + gain(j) * diff_channel;
end
enhanced_image(:, :, i) = channel - enhanced_channel;
end
enhanced_image = imadjust(enhanced_image, [min(enhanced_image(😃), max(enhanced_image(😃)], []);
end
MSRCP(Multi-Scale Retinex with Color and Phase Correction):
matlab
function enhanced_image = MSRCP(image, scales, gain)
rgb_image = im2double(image);
enhanced_image = zeros(size(rgb_image));
for i = 1:3
channel = rgb_image(:, :, i);
log_channel = log(channel + 1);
enhanced_channel = zeros(size(channel));
for j = 1:length(scales)
blurred_channel = imgaussfilt(log_channel, scales(j));
diff_channel = log_channel - blurred_channel;
enhanced_channel = enhanced_channel + gain(j) * diff_channel;
end
enhanced_channel = channel - enhanced_channel;
enhanced_channel = histeq(enhanced_channel);
enhanced_image(:, :, i) = enhanced_channel;
end
enhanced_image = imadjust(enhanced_image, [min(enhanced_image(😃), max(enhanced_image(😃)], []);
end