图像亮度自适应调整(Python版)

本篇博客主要给大家介绍的是对一篇论文中的亮度自适应算法的复现,感兴趣的同学可以进行尝试。
在视频和图像的采集过程中,由于受到地物环境复杂、物品之间相互遮挡以及环境光照条件多变等因素的影响,经常会导致场景的光照不均匀,主要表现为图像中亮的区域光线足够或者过强,而暗的区域照度不足,导致一些重要的细节信息无法凸显甚至被掩盖掉,严重影响了图像的视觉效果和应用价值,因此开展光照不均匀图像的校正研究,消除不均匀光照对图像的影响,已经成为当前图像处理领域的一个研究热点。
最近在做比赛上的一些东西,因为图片本身就存在着大量的噪声,我们在去燥的过程中发现了亮度不一导致的问题,因此采用了亮度自适应的算法来预处理完图像后,在进行下一步的去噪实验。
一、算法原理
基于二维伽马函数光照不均匀图像自适应校正算法,文献中算法的思路较简单,实现出来没有论文那么好的效果:

(1) 利用多尺度高斯函数去除场景的光照分量

(2) 然后构造了一种二维伽马函数,并利用光照分量的分布特性调整二维伽马函数的参数,降低光照过强区域的亮度值,提高光照过暗区域图像的亮度值,最终实现对光照不均匀图像的自适应校正处理。

利用高斯函数与源图像做卷积即可得到光照分量。G为高斯函数,F为源图像,I为光照分量。
在这里插入图片描述
在这里插入图片描述

二维伽马函数O(x,y),F是源图像,γ是亮度增强的指数值,由光照分量和光照分量的亮度均值m决定。

在这里插入图片描述

为避免RGB通道互相影响,整个处理过程是在HSV色彩空间进行的,对其中的亮度分量V进行处理,最后再从HSV空间转化到RGB空间。

注意:这里原论文的公式有问题,应该是作者的笔误,γ的指数应该是m-I(x,y),而不是I(x,y)-m。不然得到的结果不正确。简单分析一下:
底数小于1,那么指数越小,结果就会越大;指数越大,结果就会越小。伽马也是一个底数小于1的幂指数。

举个例子分析:按照论文的写法,设m=128,I(x,y)是较暗的地方灰度为64,γ是 ,是大于1的,底数小于1,则这个结果是小于底数的,暗的地方灰度变小

若I(x,y)是较亮的地方灰度为192,γ是根号0.5,,是小于1的,底数小于1,则这个结果是大于底数的。亮的地方灰度变大

那这样的结果是暗的地方变得更暗,亮的地方变得更亮,显然不对。
因此,在本文中,我特地把公式变了回来,希望各位看官看的开心。
二丶算法的流程图
图像亮度自适应调整(Python版)_第1张图片
三丶代码实现
下面我给出别人使用Matlab实现的算法

clc,close all;
tic;
im=imread('1128-2.jpg');
figure;
imshow(im);
title('原图');
[h,s,v]=rgb2hsv(im);    %转到hsv空间,对亮度h处理
% 高斯滤波
HSIZE= min(size(im,1),size(im,2));%高斯卷积核尺寸
q=sqrt(2);
SIGMA1=15;%论文里面的c
SIGMA2=80;
SIGMA3=250;
F1 = fspecial('gaussian',HSIZE,SIGMA1/q);
F2 = fspecial('gaussian',HSIZE,SIGMA2/q) ;
F3 = fspecial('gaussian',HSIZE,SIGMA3/q) ;
gaus1= imfilter(v, F1, 'replicate');
gaus2= imfilter(v, F2, 'replicate');
gaus3= imfilter(v, F3, 'replicate');
gaus=(gaus1+gaus2+gaus3)/3;    %多尺度高斯卷积,加权,权重为1/3
% gaus=(gaus*255);
figure;
imshow(gaus,[]);
title('光照分量');
%二维伽马卷积
m=mean(gaus(:));
[w,height]=size(v);
out=zeros(size(v));
gama=power(0.5,((m-gaus)/m));%根据公式gamma校正处理,论文公式有误
out=(power(v,gama));
figure;
imshow(out,[]);
rgb=hsv2rgb(h,s,out);   %转回rgb空间显示
figure;
imshow(rgb);
title('处理结果')
toc;

下面是本人使用Python进行算法过程中遇到的一些问题和思考,代码我放在我的下载区,因为想赚点积分,大家谅解哈
最开始复现这个Matlab代码时,发现好像几乎没怎么变化,在我的文字部分,效果图如下:


于是乎,产生了怀疑,我便加上了亮度差矩阵,在求其平均值
图像亮度自适应调整(Python版)_第2张图片
在这里插入图片描述
均值再告诉我,对,你的猜想没错,几乎没发生变化,我靠,坑爹呢,看他们表演了半天,居然没怎么变化,是不是我给的图片亮度本来就还可以,没怎么变化呢,于是乎,我给了一张肉眼看起来就很暗的图片进行测试,效果如下:

再悄悄的看一眼亮度差的均值,是不是还是这种微乎其微的:
在这里插入图片描述
嗯,没错,发生了较大的变化了,但是还是很小啊,对吧,于是我开始思考哪里错了,想了很久,我发现了一个很大的问题,这是CSDN的代码,会不会作者那里思考错了,我再仔细看看,嗯,果然高斯卷积核不应该死图像的长和宽,源代码的高斯卷积核大小:
在这里插入图片描述
想到这,还有点小兴奋,立刻进行了改变试试,我直接把HSIZE改成了25
效果如下:



嗯,肉眼看起来变化还不是很大,于是乎,我再次对比了下差值:
在这里插入图片描述
我靠,这个值可以了,嗯,于是乎我就进行了批量的处理。
四、总结
通过本次的尝试,我发现了还是需要认真的做一件事情,不要全部相信别人,需要敢于质疑,并不断的去验证自己的想法。

你可能感兴趣的:(图像处理,图像处理,Python3)