基于二维伽马函数的光照不均匀图像自适应校正算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于⼆维伽马函数的光照不均匀图像⾃适应校正算法

照度反射模型

⼊射光线 \(L(x,y)\) 经过物体 \(R(x,y)\) 反射后,被相机捕获,形成图像 \(S(x,y)\) 。即

\[S(x,y) = L(x,y) \cdot R(x,y) \]

单尺度 Retinex

原理

单尺度 Retinex 即 Single Scale Retinex,它是所有基于 Retinex ⽅法的最简版本,原理如下:

上式两边取对数变换:

\[\begin{array}{l} \log S = \log \left( {L\cdot R} \right) \\ \quad \quad \; = \log L + \log R \\ \end{array} \]

于是得到物体真实图像 \(R\)

\[R = \exp{(\log S - \log L)} \]

但是⼊射光线 \(L\) 真实情况下是⽆法获取的,于是通过⾼斯函数进⾏卷积,获取⾼斯模糊图像,来近似地估算光照分量:

\[L\left( {x,y} \right) = S\left( {x,y} \right) * G\left( {x,y} \right) \]

于是,对于照度反射模型,可整理出⼀个通⽤的表达式:

\[R =\exp{(\log S - \log S * G)} \]

即给定⼀个输⼊图像 \(S\) 和⼀个⾼斯函数 \(G\) 就可以根据上述公式计算出物体真实图像 \(R\) ,从⽽⼀定程度上对将拍摄得到的图像中光照带来的影响减弱。这⾥的⾼斯函数表达式如下:

\[G(x,y)=\frac{1}{{2\pi{\sigma ^2}}}{e^{ - \frac{{{x^2} + {y^2}}}{{2{\sigma ^2}}}}}\ \]

且要满⾜归⼀化条件

\[\iint {G\left( {x,y} \right)}{\text{d}}x{\text{d}}y = 1 \]

在实际操作中,卷积的实现有多种⽅法,其中⽐较快速的做法是转换到频域做乘积,因为

时域中(图像中通常称为空域)的卷积等于频域中的乘积

\[\begin{array}{l} L = S * G \\ \;\;\; = IFT\left( {FT\left( S \right)FT\left( G \right)} \right) \\ \end{array} \]

⽽且通常得到的最后的 \(\log{R}\) 在对数域中,尽管做指数变换可以还原得到 \(R\),但图像已经减去了反应光照情况的分量,所以得到的图像视觉效果并不好,为此需要做增益补偿,通常可直接对 \(log{R}\) 做⼀个线性拉伸处理。

\[{R_{new}} = 255\frac{{R - {R_{\min }}}}{{{R_{\max }} - {R_{\min }}}} \]

实现

function [R,R_temp,L] = ssr4gray(S,sigma)

% S = 0 ~ 255 , 单通道图像

% R = 0 ~ 1 , 单通道图像

% R_temp = any , ⽤于进⼀步计算,避免做归⼀化影响结果

% S = R×L

% log(R) = log(S) - log(L)

% = log(S) - log(S*L)

G = fspecial('gaussian',size(S),sigma); % ⾼斯函数

% 时域卷积等于频域乘积,估计光照图像 L

%

L = real(ifft2(fft2(S).*fftshift(fft2(G,size(S,1),size(S,2)))));

L = L - min(L(:));

%}

% L = imfilter(S,G,'replicate','conv'); % 使⽤滤波卷积效果不好

R_temp = log(S+1) - log(L+1); % 去除光照影响

R = mat2gray(exp(R_temp)); % 线性拉伸

end

上述过程只能处理单通道的图像,对于三通道 RGB 图像,每⼀个通道做⼀遍即可获得 SSR 增强图像。

多尺度 Retinex

原理

可以看出单尺度 Retinex 最⼤的缺陷在于图像的增强效果⾮常依赖于⾼斯函数的 $\sigma $ ,即所谓的 Retienx 尺度,$\sigma $ 取值越⼩,⾼斯模糊效果越弱,光照估计的越不准,图像细节保留的越多,于是处理后的图像细节较好,但⾊彩严重失真;取值越⼤,则图像细节丢失,光照估计的越准确,处理后的图像颜⾊越⾃然,但细节丢失较多,且容易出现光晕现象。

所以为了弥补单⼀尺度下的这种缺陷,采取多个尺度的 SSR 进⾏处理,然后再对处理后的多个图像做加权求和,⼀定程度上实现细节和颜⾊⽅⾯的效果兼容。

\[R = \sum\limits_{i = 1}^N {{\omega _i}\left( {\log S - \log S * {G_i}} \right)} \]

这⾥的 \(R\) 同样也是仅针对的是⼀个通道的处理,多通道的重复使⽤即可。

实现

function [R,R_temp] = ssr(S,sigma)

% S = 0 ~ 255 , 三通道彩⾊图像

% Si = Ri×Li

% log(Ri) = log(Si) - log(Li)

% = log(Si) - log(S*Li)

% 结果初始化

R = zeros(size(S));

R_temp = zeros(size(S));

for i = 1:size(S,3)

Si = S(:,:,i); % 提取单通道图像

[~,Ri,~]= ssr4gray(Si,sigma); % 单通道 ssr

R_temp(:,:,i) = Ri; % 单通道结果存储

R(:,:,i) = mat2gray(Ri); % 单通道结果存储

end

end

其中,使⽤到了前⾯已经写好的单通道单尺度 Retinex 函数 ssr4gray

当然,我们也可以将图像转换到 HSV 颜⾊空间,使⽤多尺度 Retinex 进⾏增强

相关文档
最新文档