彩色图像模糊增强(Fuzzy Enhancement)MATLAB 实现

基于 模糊对比度增强 的彩色图像增强方法,在 HSI 颜色空间 中对亮度分量(Intensity)进行模糊增强,然后转换回 RGB,以保持色调和饱和度不变。

一、算法原理

  1. 颜色空间转换:RGB → HSI(色调、饱和度、亮度)
  2. 亮度分量模糊增强
    • 将亮度值归一化到 0,1
    • 定义模糊隶属度函数(如 S 型函数)
    • 计算模糊对比度(局部或全局)
    • 通过模糊规则增强对比度(拉伸隶属度)
    • 反模糊化得到增强后的亮度
  3. 颜色空间逆转换: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(越大越陡峭)

五、扩展

  1. 局部自适应增强 :将图像分块,每块独立计算 f0(如基于局部均值)。
  2. 饱和度增强:在 HSI 空间同时调整饱和度分量。
  3. 其他模糊增强算法:如基于模糊熵的增强、基于模糊逻辑规则的增强。
相关推荐
bubiyoushang8881 小时前
电力线信道“五类噪声”仿真MATLAB
开发语言·matlab
kaikaile19951 小时前
图像稀疏化分解 + 压缩感知(CS)重建 MATLAB
开发语言·计算机视觉·matlab
yugi9878381 小时前
PNCC(Power-Normalized Cepstral Coefficients)— MATLAB 实现
开发语言·人工智能·matlab
大黄说说1 小时前
C++20 协程从入门到网络服务
开发语言
你是个什么橙1 小时前
Python入门学习2:Python 基础语法全解析——从代码结构到输入输出
开发语言·python·学习
小白学大数据1 小时前
Python + 大模型行业资讯自动化摘要流水线完整工程实现方案
开发语言·python·自动化
宝贝儿好2 小时前
【LLM】第二章:HuggingFace入门学习
人工智能·深度学习·神经网络·学习·算法·自然语言处理
何以解忧,唯有..2 小时前
Go语言中的const:常量声明与iota枚举详解
java·开发语言·golang
沪飘大军2 小时前
goldRush-专门分析黄金的投资理财agent
java·开发语言·elasticsearch