其他原创博客http://blog.csdn.net/baolinq

主要看第三部分就可以,前面是一些其他常见 的基本图像方法。基于二维伽马函数的光照不均匀图像自适应校正算法

在视频和图像的采集过程中,由于受到地物环境复杂、物品之间相互遮挡以及环境光照条件多变等因素的影响,经常会导致场景的光照不均匀,主要表现为图像中亮的区域光线足够或者过强,而暗的区域照度不足,导致一些重要的细节信息无法凸显甚至被掩盖掉,严重影响了图像的视觉效果和应用价值,因此开展光照不均匀图像的校正研究,消除不均匀光照对图像的影响,已经成为当前图像处理领域的一个研究热点。

最近在做目标检测的一些东西,有些原始图像的光照很不均匀,影响检测准确度。光照不均匀的图像作目标检测难度其实还真的蛮大的,我在想着能不能从源图像入手,改善或者说提高图像的质量,从而提高检测精度。但是这样说好像有点问题的,对这种情况,是不是应该在深度学习的样本数据中增加光照不均匀的图像,从而能在测试图像中成功检测。先不管了,本文只是谈谈如何去光照不均匀,从而改善图像质量。

本文主要针对类似上面的类型图像,光照不均匀,有的地方亮度较大有的则很暗。

尝试过很多方法:

1.直方图均衡化

直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。思路很简单,先统计原图的灰度级分布情况,得到累积分布函数,由该函数可以求出原图和结果图的映射关系f,对每个像素作用此映射即可。

这样可以可以提高图像的对比度。下面是实验结果截图:

传统算法检测结果

分析:从上至下分别为:原图,灰度图,直方图均衡化后的图,后面分别是对应的检测结果。

可以明显看到,经过直方图均衡化处理后的图像由两个car被检测出来了,而在原图是没有被检测出来的。虽然直方图均衡化之后,原图像光照强的地方被曝光很严重,(人眼视觉上)处理结果并不好,但是实验显示更有利于做目标检测。

总的来说,有一定的提升效果但是不够好,还是有车没有检测出来。

2.retenix去雾算法

Retinex理论在彩色图像增强、图像去雾、去光照不均匀影响、彩色图像恢复方面拥有很好的效果。网上有很多博文讲这个算法,是个非常经典的算法,试验测试结果截图:

原图:

Retinex效果图

分析:从人眼视觉效果上看,Retinex的处理去光照效果更好一些,但是检测结果并没有改进。

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

基于二维伽马函数光照不均匀图像自适应校正算法,文献中算法的思路较简单,实现出来没有论文那么好的效果:

(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,则这个结果是大于底数的。亮的地方灰度变大

那这样的结果是暗的地方变得更暗,亮的地方变得更亮,显然不对。

γ的指数应该是m-I(x,y),所以说论文里的公式还是要自己去推导一下~~

算法流程框图如下:

根据此算法流程图,我们写出相应的matlab代码。

Rgb2hsv,对h分量多尺度高斯卷积(高斯滤波),二维gamma函数校正,hsv2rgb,结束。

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;

注意:

论文中没有说卷积核是多大,但是根据提取光照分量 的模糊程度,卷积核应该要取很大,我这里是取图像的宽和高中的较小者,min(h,w);

实践发现,在高斯卷积的时候使用imfilter

函数比conv2函数快太多了,在测试中,同一幅图像,使用imfilter

函数的整个过程1s以内,而使用conv2函数的却花了十几秒。

实验测试:

上面是论文中的截图处理效果,下面是我试验的截图,效果还是可以的,依次为原图、光照分量,效果图

错误处理结果,暗的地方变更暗,亮的地方变更亮

参考文献

[1] 刘志成, 王殿伟, 刘颖,等. 基于二维伽马函数的光照不均匀图像自适应校正算法[J]. 北京理工大学学报, 2016, 36(2):191-196.

好了,本篇结束,下一篇见,有问题欢迎底下交流讨论~~~

去光照不均匀matlab 算法和代码放出相关推荐

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

    Matlab程序: %% % 基于二维伽马函数的光照不均匀图像自适应校正算法 % %% clc,close all; tic; im=imread('你的图片.jpg'); figure; imsho ...

  2. LQR轨迹跟踪算法Python/Matlab算法实现_代码(2)

    本文根据LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导(2)使用代码实现,进行仿真: clc clear allKp = 1.0 ; dt =0.1 ;% [s] L = ...

  3. MATLAB等额还款代码,matlab算法实现对等额本息和等额本金两种还款方式的计算

    matlab算法实现对等额本息和等额本金两种还款方式的计算 发布时间:2018-05-29 20:04, 浏览次数:1410 , 标签: matlab matlab算法实现对等额本息和等额本金两种还款 ...

  4. 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码

    基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 文章目录 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 1 蝙蝠算法与BP神经网络分类模型 1.1 蝙 ...

  5. SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性

    SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性. 对于数字信号处理很有用. ID: ...

  6. 基于蝗虫(蚱蜢)优化算法优化的支持向量机分类模型及其MATLAB实现-附代码

    基于蝗虫(蚱蜢)优化算法GOA优化的支持向量机分类模型SVM及其MATLAB实现-附代码 文章目录 基于蝗虫(蚱蜢)优化算法GOA优化的支持向量机分类模型SVM及其MATLAB实现-附代码 1. 模型 ...

  7. 基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码

    基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码 文章目录 基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码 1 GWO-SVM 模型 1.1 灰狼优化器GWO ...

  8. 手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)

    你好,我是小智. 上一节介绍了手眼标定算法Tsai的原理,这一节介绍算法的代码实现,分别有Python.C++.Matlab版本的算法实现方式. 该算法适用于将相机装在手抓上和将相机装在外部两种情况 ...

  9. 二叉树去马赛克算法的代码

    是什么? 二叉树去马赛克算法的代码可以根据具体的需求和应用环境来定制,比如在Python中可以使用如下代码:def mosaic(image, block_size): # 将图像分割成块 block ...

最新文章

  1. 计算机专业知识认识报告,计算机专业认识习报告.doc
  2. 交叉编译器工具链的使用
  3. mac无法访问samba共享 提示输入用户名密码
  4. mybatis入门案例
  5. 设置 Web 服务器控件颜色属性 转
  6. “我升职的原因是:比同事更早学会这个知识”
  7. ORA-12541:TNS: 没有监听器.解决方法!
  8. java反射(面试题)
  9. 架构之美:教你如何分析一个接口?
  10. Python爬虫编程思想(82):管理SQLite数据库
  11. mysql blast2go_blast2go本地化 mysql_study
  12. [转载]教师节献礼-关于大学的一点思考
  13. 【产业互联网周报】云厂商加速布局政企市场:华为云发布七款新产品;腾讯政务战略升级;钉钉发布数字区县解决方案...
  14. idgenerator 会重复吗_随机 ID 生成器
  15. 关于使用shopify 和theme 模版使用问题。
  16. 微软Azure给openAI提供了多少机器资源
  17. 小米路由器同一wifi局域网下,各主机无法ping连
  18. (转载)基于LBS地图的开发,满足地图上有头像的需求
  19. 小说里的编程 【连载之十七】元宇宙里月亮弯弯
  20. proxifier 代理bluestack

热门文章

  1. ftp连接成功, 读取目录列表失败, 是什么原因?
  2. FT232R驱动问题
  3. OPPO8.29C++蜜汁题目
  4. 计算机绘图图框实验报告,南邮工图实验报告.pdf
  5. cad捕捉不到标注线上的点_为什么打开了捕捉光标移动到图形上不显示捕捉标记?...
  6. 五款开发Java电商系统的工具
  7. 闵帆老师论文写作课程心得
  8. AE496 20个4K现代实用标注跟踪线条呼出文字标题指示线介绍注释动画ae模板
  9. 引用Math.h编译sin、cos时无法通过【待续】
  10. 3.27 分享两个在PC上浏览小红书内容的方法【玩赚小红书】