我看了n多关于基于单尺度Retinex图像增强的文献,用的高斯滤波函数都不一样,有的直接用高斯滤波器,就是自带的gaussian函数实现,有的是用自定义高斯函数,然而公式系数又都不一样,我快被搞疯了,研究了三天,终于在Matlab上实现了这个 “简单” 的SSR,想哭???


  • Retinex的理论依据

世界本是无色的,人们看到的颜色是 光和物质相互作用 的结果。

Retinex理论正印证了这一观点,认为物体的颜色与物体表面光照强度的绝对值,或者说反射光的绝对值关系不大,

而是由其接收到的不同波长的光线的反射能力所决定的,这是Retinex理论的核心所在。

Land提出的Retinex算法是一种建立在科学实验和分析上的常用的空域图像增强手段,如同Matlab是由Matrix(矩阵)和Laboratory(实验室)两个单词组合而成一样,Retinex是由Retina(视网膜)和Cortex(大脑皮层)两者组合而成,又可以被称为视网膜大脑皮层理论

它建立在三个假设的基础上:

  1. 人眼能感知的颜色实际上是光和物质相互作用的产物,而原本真实的世界是无色的。就如水本应是无色的,但我们看见水膜或肥皂膜呈现出五彩缤纷的色彩,实际上是薄膜干涉产生的。
  2. 固定波长的三原色(红、绿、蓝)构成了每一个颜色区域。
  3. 三原色决定了物体每个单位像素点的颜色。

Retinex算法的基础理论: 人类视觉系统观察到的物体的颜色是由物体对三种波形的反射能力决定的,分别是长波(红色)、中波(绿色)、短波(蓝色)。物体的色彩不受光照强度和光照的非均匀性所影响,具有一致性。

Retinex可以在色彩恒常性、动态范围压缩和边缘增强三个方面达到平衡。

  • 色彩恒常性

所谓色彩恒常性就是人体会通过视觉系统HVS(Human cisual system)对观察到的物体色彩变化进行处理,只保留物体内在的信息,而不会随外界光照的变化而对物体产生不同的认知变化,大脑皮层接收到这些物体的本质信息后,经过处理形成人的视觉。

例如,用红色光照射白色物体的表面,我们看到的不是红色,而是在红光照射下的白色。这就是一中色彩恒常性的表现。

由于光照环境的变化,使某一物体表面反射谱不同,人类视觉系统能够判断识别出该变化是否由光照环境变化产生,当光照的变化在一定范围内时,在这一变化范围内的人的视觉识别机制认为物体表面颜色是恒定不变的。颜色恒常性是指人对物体颜色的知觉,与人的知识经验、心理倾向有关,不是指物体本身颜色的恒定不变。


  • 经典的Retinex图像增强算法

在Retinex模型中,图像I(x,y)被分为两部分,一部分是反射分量R(x,y),代表物体的本质信息,另一部分是入射分量L(x,y),表示的是入射光亮,即亮度图像,模型如下:

Retinex理论认为,图像可以由反射图像和亮度图像的乘积构成:

Retinex的核心就是要获得表现本质信息的反射图像。通过分离入射图像,就有可能减弱因光照因素产生的对图像的影响,可以增强图像的细节信息,获得代表图像本质信息的内容。

通常Retinex算法是把上述乘法式转换到对数域,即把乘法转换至加法:log I = log (R x L) = log R + log L。

我们需要对多种Retinex算法中具有代表性的三种算法进行分析与掌握:

  • 单尺度Retinex算法(Single-Scale Retinex,SSR)
  • 多尺度Retinex算法(Multi-Scale Retinex,MSR)
  • 带色彩恢复的多尺度Retinex算法(The Color Restoration Step of Multiscale Retinex,MSMCR)

  • 单尺度Retinex算法

求入射图像在数学上是一个奇异问题,而在单尺度Retinex算法中,Jobson等人发现用高斯函数与图像进行卷积能够近似的表现入射分量:

SSR的实现过程:

  因为 I=RxL  所以 R=I/L , 即 log R = log I - log L。

·········>

本质是一个低通滤波器,K是归一化常数,使成立。

c表示高斯核,决定了G的邻域大小,可以控制图像细节和色彩的保留情况。

c较小时,原图像局部细节较为突出,但会出现颜色失真;

c较大时,G的邻域范围就大,颜色较自然,但以某一像素点为中心的周围其他像素对这个像素点的影响就越小,这样就会导致对图像的细节信息保留较少,图像的对比度信息不强。相关实验表明,c的取值一般在80-100的范围内。

SSR算法的具体实现步骤:

1.读取原始待增强图像 I(x,y),并进行数据类型变换,将整型变换为double型;

2.确定参数c的大小,并根据公式确定系数K的取值;

3.根据公式来获得图像R(x,y);

4.对R(x,y)进行线性校正处理(因为R(x,y)的范围不在0-255内),校正后的图像即为算法增强图像。

注意:对灰度图像进行处理时,按上述步骤即可,但彩色图像进行增强时,需要把彩色图像分为R、G、B三个分量分别按以上步骤进行处理,然后再合成获得增强图像。

Matlab代码实现:

I=imread('test.jpg');Ir=I(:,:,1);%提取红色分量
Ig=I(:,:,2);%提取绿色分量
Ib=I(:,:,3);%提取蓝色分量
I1=SSR(Ir); %自定义单尺度Retinex处理函数
I2=SSR(Ig);
I3=SSR(Ib);
In=cat(3,I1,I2,I3);          %cat用于构造多维数组
subplot(1,2,1);imshow(I);
title('A). 原始图像');
subplot(1,2,2);imshow(In,[]);
title('B). 单尺度Retinex');%——————————————划重点!!!!!!!!!!!!!!!!!!!!————————————————function A = SSR(I)
G=I;
[m,n]=size(I);
I=double(I);
x0=floor((m+1)/2);y0=floor((n+1)/2);
c = 80;
K=1/(sqrt(2*pi)*c);
for x=1:mfor y=1:nG(x,y)=K*(exp(-((x-x0)^2+(y-y0)^2)/(2*c^2))); %高斯函数end
endGfft=fft2(G);
Ifft=fft2(I);
Lfft=Gfft.*Ifft;
L=ifft2(Lfft);r=log(I+1)-log(L+1);                   %加1是为了防止对数为0时,log0没有定义%线性拉伸,将灰度范围转换到0-255,(直接求反对数的效果不好)
MIN=min(min(r));
MAX=max(max(r));
new=(r-MIN)*255/(MAX-MIN);
A=new;
end

看一下处理效果:

单尺度Retinex(SSR) + 代码实现相关推荐

  1. retinex相关代码汇总

    混合方法 SSR.m matlab代码,本来是RGB,改成了处理灰度图像的. %%%%%%%%%%%%%%%RGB normalisation%%%%%%%%%%%%%%%%%%%%%% %its c ...

  2. 深度学习时间序列预测:GRU算法构建单变量时间序列预测模型+代码实战

    深度学习时间序列预测:GRU算法构建单变量时间序列预测模型+代码实战 GRU(Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种 ...

  3. python代码示例下载-Python下载网易云歌单歌曲的示例代码

    今天写了个下载脚本,记录一下 效果: 直接上代码: # 网易云 根据歌单链接下载MP3歌曲 import requests from bs4 import BeautifulSoup def main ...

  4. html约束验证的例子,HTML5利用约束验证API来检查表单的输入数据的代码实例

    HTML5对于表单有着极大程度的优化,无论是语义,小部件,还是数据格式的验证.我猜你肯定会以浏览器兼容作为借口不愿意使用这些"新功能",但这绝不应该成为使你停滞不前的原因,况且还有 ...

  5. 单尺度二维离散小波重构(逆变换)idwt2

    clc,clear all,close all; load woman; %单尺度二维离散小波分解.分解小波函数haar [cA,cH,cV,cD]=dwt2(X,'haar'); %单尺度二维离散小 ...

  6. 127.0.0.1 zxt.php_php单文件版在线代码编辑器使用方法

    这篇文章主要介绍了php单文件版在线代码编辑器,个人感觉相当不错,分享给大家,需要的朋友可以参考下 密码加密方式: * md5(自设密码+$ace) //$ace为cdn镜像地址 使用方法: * 1. ...

  7. TI单芯片毫米波雷达代码走读(十五)—— 多普勒维(2D)处理之雷达参数与MATLAB仿真

    我们进入2D处理之前有几个雷达参数要知道,先回顾一下<TI单芯片毫米波雷达代码走读(八)-- 距离维(1D)处理之雷达参数>,由于2D处理要检测动目标,我们把配置参数重新修改如下图所示: ...

  8. MSRCR(Multi-Scale Retinex with Color Restore)多尺度Retinex图像增强

    引言 始于Edwin Herbert Land(埃德温·赫伯特·兰德)于1971年提出的一种被称为色彩恒常的理论,并基于此理论的图像增强方法.Retinex这个词由视网膜(Retina)和大脑皮层(C ...

  9. ORBSLAM2单应矩阵计算及代码分析

    单应矩阵代码分析 if(mpInitializer->Initialize(mCurrentFrame, //当前帧mvIniMatches, //当前帧和参考帧的特征点的匹配关系Rcw, tc ...

最新文章

  1. html 自动弹出框
  2. 肿瘤表观遗传相关重磅数据库:MR4Cancer使用指南
  3. 4.extern关键字.rs
  4. 菜单之二:使用xml文件定义菜单
  5. 外伤导致色觉异常型复视(球后视神经炎+视神经萎缩)
  6. android运行时状态,Android 如何保存Android 运行时状态
  7. JavaScript之正方教务系统自动化教评[插件-转载]
  8. mysql mysqldumpslow_慢日志分析工具—mysqldumpslow 和 mysqlsla
  9. 中国游戏公司研运一体发展专题分析2020
  10. 机器翻译学习1:pytorch官方教程与代码逐行详解
  11. 1000道Python题库系列分享十(37道)
  12. 麻省理工18年春软件构造课程阅读09“避免调试”
  13. 我收藏的PDF电子书第一部分
  14. JavaStudyNotes
  15. 2019携程校招笔试题选讲
  16. 有限域(2)——理想和商环
  17. java ee框架技术进阶式教程_《JavaEE框架技术进阶式教程》新版任务式教案
  18. Linux内存管理 —— 为buddy做准备:MMU, TLB, ZONE
  19. 【Silvaco example】Temperature Ramping - Effect on Leakage
  20. OpenGL | 放置摄像机gluLookAt函数

热门文章

  1. 使用Flickr的图片拼出你的句子
  2. 计算机网络的发展热点,计算机网络发展趋势(热点).ppt
  3. 掘金量化回测平台 - 1
  4. JPG文件-水平分辨率、垂直分辨率
  5. 分割含有中英文的字符串
  6. LeetCode1-400题汇总,希望对你有点帮助!
  7. python基础知识整理
  8. 在asp.net页面的aspx文件中插入代码段
  9. 对接快递100快递管家API之授权接口
  10. 30个好用的ERP开源项目