以下是基于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