基于 模糊对比度增强 的彩色图像增强方法,在 HSI 颜色空间 中对亮度分量(Intensity)进行模糊增强,然后转换回 RGB,以保持色调和饱和度不变。
一、算法原理
- 颜色空间转换:RGB → HSI(色调、饱和度、亮度)
- 亮度分量模糊增强 :
- 将亮度值归一化到 0,1
- 定义模糊隶属度函数(如 S 型函数)
- 计算模糊对比度(局部或全局)
- 通过模糊规则增强对比度(拉伸隶属度)
- 反模糊化得到增强后的亮度
- 颜色空间逆转换:HSI → RGB
二、完整 MATLAB 代码
2.1 主函数:fuzzy_color_enhance.m
matlab
function enhanced_img = fuzzy_color_enhance(img, param)
% 彩色图像模糊增强(HSI空间亮度分量增强)
% 输入:
% img - RGB图像 (uint8 或 double [0,255])
% param - 结构体,可选字段:
% .fe : 增强因子 (default 1.5)
% .f0 : 模糊阈值 (default 0.5)
% 输出:
% enhanced_img - 增强后的RGB图像
if nargin < 2
param = struct();
end
fe = get_field(param, 'fe', 1.5); % 增强因子
f0 = get_field(param, 'f0', 0.5); % 模糊阈值
% 转换为 double [0,1]
if isinteger(img)
img = double(img) / 255;
end
% RGB → HSI
[hsi_img, I] = rgb2hsi(img);
% 对亮度分量进行模糊增强
I_enhanced = fuzzy_enhance_intensity(I, fe, f0);
% 替换增强后的亮度
hsi_img(:,:,3) = I_enhanced;
% HSI → RGB
enhanced_img = hsi2rgb(hsi_img);
% 裁剪到 [0,1] 并转回 uint8
enhanced_img = max(0, min(1, enhanced_img));
if isinteger(img)
enhanced_img = uint8(enhanced_img * 255);
end
end
% ========== 辅助函数 ==========
function val = get_field(s, field, default)
if isfield(s, field) && ~isempty(s.(field))
val = s.(field);
else
val = default;
end
end
function I_enhanced = fuzzy_enhance_intensity(I, fe, f0)
% 模糊对比度增强(基于 Pal & King 改进算法)
% I : 亮度分量 [0,1]
% fe: 增强因子 (>1 增强, <1 减弱)
% f0: 模糊阈值(通常取 0.5)
% 1. 模糊化:使用 S 型隶属度函数
% μ(x) = 1 / (1 + exp(-(x - f0)*k))
k = 10; % 斜率参数(控制模糊化敏感度)
mu = 1 ./ (1 + exp(-k * (I - f0)));
% 2. 模糊对比度增强(拉伸隶属度)
% 增强规则:若 μ > 0.5 则增大,若 μ < 0.5 则减小
mu_enhanced = mu;
high = mu >= 0.5;
low = mu < 0.5;
mu_enhanced(high) = 1 - (1 - mu(high)).^fe;
mu_enhanced(low) = mu(low).^(1/fe);
% 3. 反模糊化:由增强后的隶属度得到新的亮度值
% 使用逆 S 型函数
I_enhanced = f0 + (1/k) * log(mu_enhanced ./ (1 - mu_enhanced + eps));
I_enhanced = max(0, min(1, I_enhanced));
end
function [hsi, I] = rgb2hsi(rgb)
% RGB → HSI (色调、饱和度、亮度)
rgb = double(rgb);
R = rgb(:,:,1); G = rgb(:,:,2); B = rgb(:,:,3);
% Intensity
I = (R + G + B) / 3;
% Saturation
S = 1 - min(min(R,G),B) ./ (I + eps);
% Hue
num = 0.5 * ((R-G) + (R-B));
den = sqrt((R-G).^2 + (R-B).*(G-B)) + eps;
theta = acos(num ./ den);
H = theta;
H(B > G) = 2*pi - H(B > G);
H = H / (2*pi); % 归一化到 [0,1]
hsi = cat(3, H, S, I);
end
function rgb = hsi2rgb(hsi)
% HSI → RGB
H = hsi(:,:,1) * 2*pi; % 恢复到弧度
S = hsi(:,:,2);
I = hsi(:,:,3);
R = zeros(size(H));
G = zeros(size(H));
B = zeros(size(H));
% RG sector (0 <= H < 2π/3)
idx = (H >= 0) & (H < 2*pi/3);
B(idx) = I(idx) .* (1 - S(idx));
R(idx) = I(idx) .* (1 + S(idx).*cos(H(idx))./cos(pi/3 - H(idx) + eps));
G(idx) = 3*I(idx) - (R(idx) + B(idx));
% GB sector (2π/3 <= H < 4π/3)
idx = (H >= 2*pi/3) & (H < 4*pi/3);
H(idx) = H(idx) - 2*pi/3;
R(idx) = I(idx) .* (1 - S(idx));
G(idx) = I(idx) .* (1 + S(idx).*cos(H(idx))./cos(pi/3 - H(idx) + eps));
B(idx) = 3*I(idx) - (R(idx) + G(idx));
% BR sector (4π/3 <= H < 2π)
idx = (H >= 4*pi/3) & (H < 2*pi);
H(idx) = H(idx) - 4*pi/3;
G(idx) = I(idx) .* (1 - S(idx));
B(idx) = I(idx) .* (1 + S(idx).*cos(H(idx))./cos(pi/3 - H(idx) + eps));
R(idx) = 3*I(idx) - (G(idx) + B(idx));
rgb = cat(3, R, G, B);
end
2.2 演示脚本:demo_fuzzy_enhance.m
matlab
%% 彩色图像模糊增强演示
clear; clc; close all;
% 读取图像
img = imread('peppers.png'); % 可替换为你的图像
% 模糊增强(默认参数)
enhanced = fuzzy_color_enhance(img);
% 对比显示
figure('Position', [100, 100, 1200, 550]);
subplot(1,2,1); imshow(img); title('原始图像');
subplot(1,2,2); imshow(enhanced); title('模糊增强图像');
% 尝试不同增强因子
figure('Position', [100, 100, 1200, 800]);
param.fe = 1.2;
enhanced1 = fuzzy_color_enhance(img, param);
param.fe = 2.0;
enhanced2 = fuzzy_color_enhance(img, param);
param.fe = 3.0;
enhanced3 = fuzzy_color_enhance(img, param);
subplot(2,2,1); imshow(img); title('原始');
subplot(2,2,2); imshow(enhanced1); title('fe=1.2');
subplot(2,2,3); imshow(enhanced2); title('fe=2.0');
subplot(2,2,4); imshow(enhanced3); title('fe=3.0');
参考代码 彩色图像模糊增强 www.youwenfan.com/contentcsv/81186.html
三、运行结果说明
- 增强因子
fe:控制增强力度。fe>1增强对比度(暗部更暗,亮部更亮),fe<1减弱对比度。 - 模糊阈值
f0:决定增强的转折点,通常取 0.5(中灰),可根据图像特性调整(如暗图像取更低值)。 - 效果:增强后图像细节更清晰,对比度提高,色彩饱和度保持不变(仅亮度分量被修改)。
四、参数调优建议
| 参数 | 作用 | 典型范围 |
|---|---|---|
fe |
增强力度 | 1.2 ~ 3.0 |
f0 |
模糊阈值(亮度分割点) | 0.3 ~ 0.7 |
k |
隶属度函数斜率(代码内固定) | 5 ~ 20(越大越陡峭) |
五、扩展
- 局部自适应增强 :将图像分块,每块独立计算
f0(如基于局部均值)。 - 饱和度增强:在 HSI 空间同时调整饱和度分量。
- 其他模糊增强算法:如基于模糊熵的增强、基于模糊逻辑规则的增强。