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. 模型效果