基于matlab的retinex理论低照度图像增强

写本文的目的是记录自己学习过或做过的一些东西,深化理解,理清思路,便于回忆。本人处于学习阶段,欢迎指出不对的地方。

在低照度环境下,电子设备要获取一副细节明显,内容突出的图像往往不太容易,要么更换更好的设备,要么采取后期处理的方法。对于特定环境下,比如设备成本限制,或者设备体积限制等等,采取后期处理的方式是解决问题的最佳方式,图像增强技术应运而生,且广泛应用于诸如军事侦察,安防监控,医学影像,行车记录,智能手机以及特殊环境成像等各个方面。

对于低照度图像增强的方式有很多种,比较大众化的有直方图均衡化,局部直方图均衡化,Retinex,变换域方法等,此处研究Retinex算法。

Retinex是较为普遍的低照度图像增强算法,Retinex是Retina和Cortex的合成词,可译为‘视网膜-核心’算法。此算法有一定的生物学理论基础,基于颜色恒常性和人眼的视觉系统特性,可将一副正常光学图像视为由光照分量和反射分量的组合,光照分量决定了图像的动态压缩范围,属于图像的低频成分,反射分量能反映颜色和细节,是图像的高频成分。此算法的核心在于去除图像的光照成分,可以得到包含物体本身颜色和细节信息的图像。Retinex也分不同种类,本文只研究其中一种。

算法原理

基于Retinex理论,任何一副图像都可视为反射光和入射光的乘积
在这里插入图片描述
L为入射光,R为反射光,O为原始图像。此算法的核心在于光照分量的计算,然后在依照上述公式求出反射分量。

光照分量计算如下:
在这里插入图片描述
f(x,y)是二维高斯函数,也就是二维正态分布函数。此处是卷积操作。接下来光照分量已知,那么我们要求的反射分量也就可以算出了。

开始测试

首先读入一张低照度环境下拍摄的照片
基于matlab的retinex理论低照度图像增强_第1张图片
分别读取RGB三层矩阵,后面的操作方法分别对每一个矩阵进行一次,最后在组合成为RGB图像。

首先构造二维高斯滤波函数,此处可用直接输入函数表达式(见下图)的方法,也可使用MATLAB系统自带的fspecial()函数构造,注意构造函数的大小,不同大小对最终的滤波效果有影响,此处大小为与原始图像相同大小。

式中sigma为可调参数
在这里插入图片描述

其次对原始图像与二维高斯滤波函数进行卷积,此处依然有两种方法,一是现将两个函数进行傅里叶变化,在频域相乘后再反变换回来。二是使用MATLAB系统自带的卷积函数,二者实施起来都不麻烦,此处使用前一种方法。

经过前面的计算已经得到图像的光照分量,接下来只要使用原始图像除以求得的光照分量便可,此处先将二者进行对数变换,可以将除法变为减法,更加方便运算。

最后再经过数据归一化和直方图均衡(显示效果更好),便可得到最终结果。
基于matlab的retinex理论低照度图像增强_第2张图片

总结

本次学习了Retinex的SSR(单比例)算法,后续还有MSR(多比例)和MSRCR(颜色恢复多比例)等算法,MSR是对同一副图像采用多次sigma值不同的光照估计,最后平均加权得到结果。MSRCR是引入了彩色恢复因子,协调RGB的关系。后续改进可以加入自适应sigma因子,或者增加自适应权重给MSR算法。

你可能感兴趣的:(基于matlab的retinex理论低照度图像增强)