1. 参考文献
2. 模型实现
% 论文: 基于Lab色彩空间和色调映射的彩色图像增强算法 % 作者: % 链接: http://www.jsjkx.com/jsjkxen/ch/reader/create_pdf.aspx?file_no=20180251&year_id=2018&quarter_id=2&falg=1 % Author: HSW % Date: 2018-04-26 clc; close all; clear all; img = imread('timg.jpg'); figure(1); imshow(img, []); title('原图像'); if size(img, 3) == 3 img_in = img; img_lab = rgb2lab(img_in); % 颜色转换: RGB => Lab L = img_lab(:, :, 1); % 亮度分量 La = img_lab(:, :, 2); Lb = img_lab(:, :, 3); [m, n] = size(L); % 进行双边滤波 ksize = 5; hsize = floor(ksize/2); sigma1 = 3; % 空间 sigma2 = 5; % 亮度 mean1 = 0; mean2 = 0; bilKernel = bilateralKernel(sigma1, mean1, sigma2, mean2, ksize); sumKernel = sum(sum(bilKernel)); T = 10; mu = 35.3; L_img = L; % 光照分量 R_img = ones(size(L)); % 反射分量 for i = hsize + 1: m - hsize for j = hsize + 1: n - hsize d = zeros(ksize, ksize); L_patch = L(i + [-hsize:hsize], j + [-hsize:hsize]); La_patch = La(i + [-hsize:hsize], j + [-hsize:hsize]); La_center = ones(ksize, ksize) .* La(i, j); Lb_patch = Lb(i + [-hsize:hsize], j + [-hsize:hsize]); Lb_center = ones(ksize, ksize) .* Lb(i, j); d = sqrt((La_patch - La_center).^2 + (Lb_patch - Lb_center).^2) < T; L_img(i, j) = sum(sum(d .* bilKernel .* L_patch)) / sumKernel; end end R_img = L ./ L_img; % 计算抛物线偏离值: lambda L_hist = zeros(101, 1); % 取值范围为[0. 100] U_hist = zeros(101, 1); for i = 1: 101 U_hist = i * 1.0 / 101; end % 输入图像的L分量的累积概率分布函数: 采用直方图均衡化 for i = 1:m for j = 1:n L_hist(uint8(L_img(i, j)) + 1) = L_hist(uint8(L_img(i, j)) + 1) + 1; end end for i = 1:101 if i == 1 L_hist(i) = L_hist(i); else L_hist(i) = L_hist(i) + L_hist(i - 1); end end L_hist = L_hist ./ (m * n * 1.0); % 进行直方图均衡化 Cumu_img = 100 .* L_hist; L_img_eq = L_img; for i = 1:m for j = 1:n L_img_eq(i,j) = Cumu_img(uint8(L_img(i,j)) + 1); end end img_lab_eq = img_lab; img_lab_eq(:, :, 1) = L_img_eq .* R_img; img_rgb = lab2rgb(img_lab_eq); lambda = sum(L_hist - U_hist); if abs(lambda) > mu lambda = sign(lambda) * mu; end figure(2); imshow(img_rgb, []); title('直方图均衡化:增强结果'); % % 抛物线映射没有理解 % % 进行抛物线拟合: (0, 0) (100, 100) (50 - sqrt(2) * lambda), 50 + sqrt(2) * % % lambda) % % x = [0, 100, (50 - sqrt(2) * abs(lambda)]; % y = [0, 100, (50 + sqrt(2) * abs(lambda)]; % p = polyfit(x,y,2); % % L_img_new = L_img; % for i = 1:m % for j = 1:n % L_img_new(i, j, 1) = polyval(p, L_img_new(i, j, 1)); % end % end % % img_lab_new = img_lab; % img_lab_new(:, :, 1) = L_img_new(:, :, 1) .* R_img; % img_rgb_new = lab2rgb(img_lab_new); % figure(3); % imshow(img_rgb_new, []); % title('抛物线均衡化: 增强结果'); else disp('必须输出彩色图像') end
3. 模型效果