读文献_用于彩色图像增强的自适应局部幂律变换
源码转载于(link)
Adaptive Local Power-Law Transformation for Color Image Enhancement
文章内容
一、Retinex 增强算法
Retinex 理论始于Land和McCann于20世纪60年代作出的一系列贡献,其基本思想是人感知到某点的颜色和亮度并不仅仅取决于该点进入人眼的绝对光线,还和其周围的颜色和亮度有关。Retinex这个词是由视网膜(Retina)和大脑皮层(Cortex)两个词组合构成的。
Retinex 理论的基本内容是物体的颜色是由物体对长波(红)、中波(绿)和短波(蓝)光线的反射能力决定的,而不是由反射光强度的绝对值决定的;物体的色彩不受光照非均性的影响,具有一致性,即 Retinex 理论是以色感一致性(颜色恒常性)为基础的。如下图所示,观察者所看到的物体的图像S是由物体表面对入射光L反射得到的,反射率R由物体本身决定,不受入射光L变化。
Retinex 理论的基本假设是原始图像S是光照图像L和反射率图像 R 的乘积,即可表示为下式的形式:
基于 Retinex 的图像增强的目的就是从原始图像S中估计出光照L,从而分解出R,消除光照不均的影响,以改善图像的视觉效果,正如人类视觉系统那样。在处理中,通常将图像转至对数域,即
从而将乘积关系转换为和的关系:
Retinex 方法的核心就是估测照度L,从图像S中估测L分量,并去除L分量,得到原始反射分量R,即:
二、HSV 颜色模型
HSV (Hue, Saturation, Value) 是根据颜色的直观特性由 A. R. Smith 在1978 年创建的一种颜色空间, 也称六角锥体模型 ( Hexcone Model )。HSV 色系对用户来说是一种直观的颜色模型,对于颜色,人们直观的会问”什么颜色?深浅如何?明暗如何?“,而 HSV 色系则直观的表示了这些信息。
每一种颜色都是由上色相(Hue,简H),饱和度(Saturation,简S)和色明度(Value,简V)所表示的。这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。
色调 H 参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,取值范围为0°~360°。若从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度S:取值范围为0.0~1.0;
亮度V:取值范围为0.0(黑色)~1.0(白色)。
三、图像增强处理
对比度增强在调整图像质量来获得更好的视觉体验体验中一直扮演着重要的角色。传统的灰度级对比度增强的方法可以扩展为通过颜色空间变换来增强。近来基于空间的对比度增强算法主要技术可以被分成全局和局部方法。
全局增强方法,是提高整个图像的信息(亮度和饱和度)的图像的方法。 直方图均衡化(HE)及其变体由于其简单性和有效性,是执行对比度增强的最常用算法之一。其中有一个方法是使用双直方图均衡(BBHE)来保持平均亮度。 他的 BBHE 基于平均亮度,将原始直方图分为两个子直方图。 每个子直方图都通过使用HE方法得到增强。但是,他的方法需要预先设置成本函数的加权常数。
局部增强方法,是根据信息(亮度,饱和度和 Retinex)及其相邻的信息来增强每个像素的图像。前人使用基于 Retinex 的自适应滤波器来增强自然彩色图像,他们的结果表明,具有光晕区域的彩色图像可以得到增强。
但是,他们的方法需要选择适当的滤镜大小以减少光晕图像并为极高的动态范围图像引入全局色调映射。
四、自适应局部幂律变换
之前的方法都具有缺点,且时间复杂度很高。此外,使用这些方法需要人为确定许多参数来提高应用该方法的有效性。因此本文中,将提出自适应局部幂律变换(ALPLT)以增强彩色图像并避免这些缺点。所提出的方法简单,快速,只需要一个窗口大小参数,并可以自动进行增强。 提供数据以分析窗口大小参数的性能。 特别是,局部幂律变换功能中的参数是自动选择的。 换句话说,它几乎没有参数,并且不需要人工干预。
系统的步骤包括:首先,首先将彩色图像转换为HSV色彩空间。 然后,使用自适应局部幂律变换(ALPLT)来增强原始彩色图像。最后,使用向后颜色变换来产生增强结果。
幂律变换对于通用对比度增强很有用。 幂律变换[2]具有基本形式
这里 c 和 γ 为正常数。 图 4 所示为各种γ值的 O 与 I 的关系图。简单地通过改变γ即可获得一系列可能的转换曲线。 γ> 1值生成的曲线与 γ<1值生成的曲线完全相反。 此外,当 c =γ= 1时,公式简化为恒等变换。
以上提到的 ALPLT 方法是修改而来,可以写成以下等式:
其中(x,y)代表增强亮度值,f(x,y)代表原始亮度值,γ 代表指数值,α 是2.2,通常用于大多数计算机系统和大多数标准显示器的伽玛校正,并且
这个公式中 μ(x,y),x,y 和 s 分别是局部窗口中的局部平均值,图像宽度,图像高度和局部窗口的侧边长度。
根据上页第一个公式,图像中的暗区域将具有指数值 γ<1,图像中的亮区域将具有指数值 γ> 1。 例如,对于局部平均值μ(x,y)为64的暗区域,指数值γ≈0.6742。 该指数值可以将黑暗区域扩展为明亮区域。 若对于一个明亮的区域,如果局部均值μ(x,y)为192,则指数值 γ≈1.4832。 此指数值可以将亮区域变成为暗区域。
上页第二个公式说明了用于计算局部平均值的常规方法。图 5 显示该公式在单个图像上的基本实现。其中(x,y)是图像中的任意位置,显示的窗口是以(x,y)点为中心, s 为侧边的正方形矩形,作为实施效果的范围。运算过程中会将中心点不断的右移,窗口也随之右移,并将公式中的操作作用于范围内的(x,y)点。
五、恒定时间计算局部均值
但是,这种方法是蛮力方法,必须对局部窗口中的每个像素值求和才能获得总像素值。 然后将局部窗口中的总像素值除以局部窗口大小以获得局部平均值。 在一般情况下,此算法的每像素复杂度在本地窗口中为O(s^2)。为了克服这个问题,提出了一种有效的方法来计算局部均值。之前的公式可以分为两部分,可以重写如下以及
其中 TPV(total pixel value) 代表总像素值。 该值是通过对局部窗口中的像素值求和而获得的。必须对局部窗口中的每个像素求和以找到总像素值(TPV)。
新提出的算法思想是每次方形窗口向右移动一个像素之后,会丢掉最左边一列的像素,而最右边会获得一列新的像素,而中间有两列是上一次移动的像素,所以可以保存下来,所以只需要增加最右边一列就可以,而中间的两列做一次移位操作。此操作的复杂度仅为O(1),因为与窗口大小无关,一个加法和一个减法是必需的。
六、部分实验代码
% 论文: Adaptive Local Power-Law Transformation for Color Image Enhancement
% 作者: Chun-Ming Tsai
%
% Author: HSW
% Date: 2018-04-27
clc;
close all;
clear;
img = imread('3.jpg');
figure(1);
imshow(img, []);
title('原图像');
if size(img, 3) == 3
img_hsv = rgb2hsv(img);
img_V = img_hsv(:, :, 3);
img_V = img_V .* 255;
img_V_out = img_V;
alpha = 2.2;
[m, n] = size(img_V);
hsize = 3;
totalPixel = (2*hsize + 1) * (2*hsize + 1);
method = 2;
if method == 1
t0_1 = tic;
for i = hsize + 1:m - hsize
for j = hsize + 1:n - hsize
mu = sum(sum(img_V(i + [-hsize:hsize], j + [-hsize:hsize]))) / totalPixel;
gama = ( 1 / alpha)^((128 - mu) / 128.0);
img_V_out(i, j) = uint8(255 * (img_V(i,j) / 255.0)^gama);
end
end
t0_2 = toc(t0_1);
disp(num2str(t0_2));
else
img_v_int = boxFilter(img_V); % 计算积分图花费的时间比较多,但是,对于矩形窗口较大的场景是有利的
t1_1 = tic;
for i = hsize+1:m-hsize
for j = hsize+1:n-hsize
mu = (img_v_int(i + hsize, j + hsize) + img_v_int(i - hsize, j - hsize) - img_v_int(i + hsize, j - hsize) - img_v_int(i - hsize, j + hsize)) / totalPixel;
gama = ( 1 / alpha)^((128 - mu) / 128.0);
img_V_out(i, j) = uint8(255 * (img_V(i,j) / 255.0)^gama);
end
end
t1_2 = toc(t1_1);
disp(num2str(t1_2));
end
img_hsv_out = img_hsv;
img_hsv_out(:, :, 3) = img_V_out ./ 255;
img_out = hsv2rgb(img_hsv_out);
figure(2);
imshow(img_out, []);
title('增强图像');
else
disp('输入需要彩色图像');
end
%% 计算积分图
function img_int = boxFilter(img)
% inputs:
% img:
% outputs:
% img_int:
img_int = zeros(size(img));
[rows, cols, dims] = size(img);
for i = 1:rows
for j = 1:cols
for dim = 1:dims
img_int(i, j, dim) = img(i, j, dim);
if i - 1 > 0
img_int(i, j, dim) = img_int(i, j, dim) + img_int(i - 1, j, dim);
end
if j - 1 > 0
img_int(i, j, dim) = img_int(i, j, dim) + img_int(i, j-1, dim);
end
if i - 1 > 0 && j - 1 > 0
img_int(i, j, dim) = img_int(i, j, dim) - img_int(i - 1, j -1, dim);
end
end
end
end
end
七、实验结果与分析
通过仿真实验结果表明,原始图像不能看清一些细节经过处理后可以看清了,图像增强的效果达到了,但存在较多噪声。