【Retinex theory】【图像增强】-笔记

1 前言

retinex 是常见的图像增强的方法,retinex 是由两个单词合成的:retina + conrtex ,即视网膜+皮层。

2 建立的基础

Land 的 retinex theory 建立在三个假设之下:

  1. 真实世界是无色的,我们所谓的颜色是光和物质相互作用的结果。
  2. 每一颜色区域由给定波长的红、绿、蓝三原色构成。
  3. 每个单位区域的颜色由三原色决定。

3 算法理论的发展

  1. 单尺度 Retinex 算法 SSR (single scale retinex)
  2. 多尺度加权平均 Retinex 算法 MSR (multi-scale retinex)
  3. 带彩色恢复的多尺度 Retinex 算法 MSRCR(multi-scale retinex with color restoration)

4 算法理论

  1. 物体的颜色由物体对长波、中波、短波广西的反射能力决定,与反射光强度的绝对值无关。
  2. 物体的色彩不受光照非均性影响,具有一致性。即,retinex 以色感一致性(颜色恒常性)为基础。
  3. 不同于传统的线性、非线性的只能增强图像某一类特征的方法,Retinex可以在动态范围压缩、边缘增强和颜色恒常三个方面达到平衡,因此可以对各种不同类型的图像进行自适应的增强。

Retinex theory 认为图像 I ( x , y ) I(x,y) I(x,y)由两幅不同的图像构成:入射图像(亮度图像) L ( x , y ) L(x,y) L(x,y) + 反射图像 R ( x , y ) R(x,y) R(x,y)
入射光照射到反射物体上,通过物体的反射,形成反射光进入人眼,最后形成图像。
用公式表示就是: I ( x , y ) = L ( x , y ) ∗ R ( x , y ) I(x,y)=L(x,y)*R(x,y) I(x,y)=L(x,y)R(x,y)
其中, L ( x , y ) L(x, y) L(x,y)表示入射光图像,环境光的照射分量,它直接决定了图像中像素所能达到的动态范围,应当尽量去除。 R ( x , y ) R(x,y) R(x,y)表示了物体的反射性质,即图像的内在属性,应尽量的保留。 I ( x , y ) I(x,y) I(x,y)表示人眼所能接收到的反射光图像。
L ( x , y ) L(x,y) L(x,y)的输入是光源的位置、强度、颜色,输出是物体表面上不同位置的照亮值。
R ( x , y ) R(x,y) R(x,y)的输入是物体表面的材质、颜色、法线,输出是表面不同位置的反射率和颜色。
在这里插入图片描述
Retinex 理论的基本思想:在原始图像中,通过某种方法去除或者降低入射图像 L ( x , y ) L(x,y) L(x,y)的影响,从而尽量的保留物体本质的反射属性图像 R ( x , y ) R(x,y) R(x,y)
基于Retinex的图像增强的目的:从原始图像S中估计出光照L,从而分解出R,消除光照不均的影响,以改善图像的视觉效果,正如人类视觉系统那样。
根据亮度图像 L ( x , y ) L(x,y) L(x,y)估计方法的不同,先后涌现出了很多Retinex算法。

5 处理步骤

原理:

  1. 利用取对数的方法将照射光的分量与反射光分量分离:
    l o g ( I ( x , y ) ) = l o g ( L ( x , y ) ) + l o g ( R ( x , y ) ) log(I(x,y))=log(L(x,y))+log(R(x,y)) log(I(x,y))=log(L(x,y))+log(R(x,y))
    (因为对数形式与人类在感受亮度的过程属性最相近)
  2. 用高斯模板对图像做卷积,近似获得入射图像 L ( x , y ) L(x,y) L(x,y)
  3. 使用步骤1的公式,获得反射图像 R ( x , y ) = e x p ( l o g ( I ( x , y ) ) − l o g ( L ( x , y ) ) ) R(x,y)=exp(log(I(x,y))-log(L(x,y))) R(x,y)=exp(log(I(x,y))log(L(x,y)))
  4. R ( x , y ) R(x,y) R(x,y)做对比度增强,得到最终的结果图像。

实际操作:

  1. 用高斯模板对原图像做卷积,相当于对原图做低通滤波,得到低通滤波后的图像D(x,y),其中F(x,y)表示高斯滤波函数。
    D ( x , y ) = I ( x , y ) ∗ F ( x , y , σ ) D(x,y)=I(x,y)*F(x,y,σ) D(x,y)=I(x,y)F(x,y,σ)
  2. 在对数域中,用原图像减去低通滤波图像,得到高频增强的图像G(x,y)
    G ( x , y ) = l o g ( I ( x , y ) ) − l o g ( D ( x , y ) ) G(x,y)=log(I(x,y))-log(D(x,y)) G(x,y)=log(I(x,y))log(D(x,y))
  3. 对G(x,y)取反对数,得到增强后的图像:
    R ( x , y ) = e x p ( G ( x , y ) ) R(x,y)=exp(G(x,y)) R(x,y)=exp(G(x,y))
  4. R ( x , y ) R(x,y) R(x,y)做对比度增强,得到最终的结果图像。

6 SSR 算法

具体步骤如下:

  1. 输入原始图像 I ( x , y ) I(x,y) I(x,y) 和滤波的半径范围 s i g m a σ sigma \ σ sigma σ ;
  2. 计算原始图像 I ( x , y ) I(x,y) I(x,y)高斯滤波后的结果,得到 L ( x , y ) L(x,y) L(x,y);
  3. 按照公式计算,得到 l o g [ R ( x , y ) ] log[R(x,y)] log[R(x,y)]
  4. 将得到的结果量化为 [0, 255] 范围的像素值,然后输出结果图像。

需要注意的是,最后一步量化的过程中,并不是将 l o g [ R ( x , y ) ] log[R(x,y)] log[R(x,y)] 进行 e x p exp exp 量化得到 R ( x , y ) R(x,y) R(x,y) ,而是直接将 l o g [ R ( x , y ) ] log[R(x,y)] log[R(x,y)] 的结果直接用如下公式进行量化:
R ( x , y ) = V a l u e − M i n M a x − M i n ∗ 255 R(x,y)=\frac{Value-Min}{Max-Min}*255 R(x,y)=MaxMinValueMin255


上述过程整合起来:
R S S R ( x , y , σ ) = l o g ( I ( x , y ) ) − l o g ( I ( x , y ) ∗ F ( x , y , σ ) ) R_{SSR}(x,y,σ)=log(I(x,y))-log(I(x,y)*F(x,y,σ)) RSSR(x,y,σ)=log(I(x,y))log(I(x,y)F(x,y,σ))
R 表示在对数域的输出。

7 MSR 算法

多尺度视网膜算法是在 SSR 算法的基础上提出的,采用多个不同的 s i g m a σ sigma σ sigmaσ值,然后将最后得到的不同结果进行加权取值,公式如下所示:
R M S R ( x , y , σ ) = ∑ k = 1 n w k R S S R k ( x , y , σ k ) R_{MSR}(x,y,σ)=\sum_{k=1}^nw_kR_{SSR_k}(x,y,σ_k) RMSR(x,y,σ)=k=1nwkRSSRk(x,y,σk)
其中 n n n 是尺度的数量, σ = σ 1 , σ 2 , . . . , σ n σ= {σ_1,σ_2,...,σ_n} σ=σ1,σ2,...,σn 是高斯模糊系数的向量, w k w_k wk是与第 k 个尺度相关的权重,其中 w 1 + w 2 + . . . + w n = 1 w_1 + w_2 + ... + w_n = 1 w1+w2+...+wn=1 。(权重一般都为1/N)

优点是可以同时保持图像高保真度与对图像的动态范围进行压缩的同时,MSR也可实现色彩增强、颜色恒常性、局部动态范围压缩、全局动态范围压缩,也可以用于X光图像增强。
一般的Retinex算法对光照图像估计时,都会假设初始光照图像是缓慢变化的,即光照图像是平滑的。但实际并非如此,亮度相差很大区域的边缘处,图像光照变化并不平滑。所以在这种情况下,Retinuex增强算法在亮度差异大区域的增强图像会产生光晕。
另外MSR常见的缺点还有边缘锐化不足,阴影边界突兀,部分颜色发生扭曲,纹理不清晰,高光区域细节没有得到明显改善,对高光区域敏感度小等。

8 MSRCR 算法

在前面的增强过程中,图像可能会因为增加了噪声,而使得图像的局部细节色彩失真,不能显现出物体的真正颜色,整体视觉效果变差。针对这一点不足,MSRCR在MSR的基础上,加入了色彩恢复因子C来调节由于图像局部区域对比度增强而导致颜色失真的缺陷:

R M S R C R ( x , y , σ ) = β l o g ( α I i ( x , y ) ∑ j = 1 3 I j ( x , y ) ) R M S P i ( x , y , σ ) R_{MSRCR}(x,y,σ)=βlog(\frac{αI_i(x,y)}{\sum_{j=1}^3I_j(x,y)})R_{MSP_i}(x,y,σ) RMSRCR(x,y,σ)=βlog(j=13Ij(x,y)αIi(x,y))RMSPi(x,y,σ)

  • I i ( x , y ) I_i(x, y) Ii(x,y) 表示第 i 个通道的图像
  • C i C_i Ci 表示第 i 个通道的彩色恢复因子,用来调节3个通道颜色的比例;
  • β 是增益常数;
  • α 是受控制的非线性强度;

MSRCR算法利用彩色恢复因子C,调节原始图像中3个颜色通道之间的比例关系,从而把相对较暗区域的信息凸显出来,达到了消除图像色彩失真的缺陷。
处理后的图像局部对比度提高,亮度与真实场景相似,在人们视觉感知下,图像显得更加逼真。

在这里插入图片描述

参考博文

1. csdn参考博文
2. 知乎参考博文
3. csdn参考博文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/106718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink之源算子Data Source

源算子Data Source 概述内置Data Source基于集合构建基于文件构建基于Socket构建 自定义Data SourceSourceFunctionRichSourceFunction 常见连接器第三方系统连接器File Source连接器DataGen Source连接器Kafka Source连接器RabbitMQ Source连接器MongoDB Source连接器 概述 Fl…

上位机在自动化中有何作用和优势?

今日话题 上位机在自动化中有何作用和优势? 自动化控制编程领域包括单片机、PLC、机器视觉和运动控制等方向。输入“777”,即刻获取关于上位机开发和数据可视化的专业学习资料,近年来,上位机编程逐渐兴起,正在逐步替…

【Linux】环境下部署Nginx服务 - 二进制部署方式

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

Linux网络编程系列之服务器编程——非阻塞IO模型

Linux网络编程系列 (够吃,管饱) 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…

将license验证加入到系统中

1.将ClientDemo下的cn文件夹的内容导入项目对应的java目录下。 2.将license-config.properties文件导入resources目录下。 3.在项目的pom.xml中添加如下依赖。 <properties><!-- Apache HttpClient --><httpclient>4.5.5</httpclient><!-- License…

MySQL 4 MySQL使用演示(包含基本操作命令~~~)MySQL5.7编码设置

目录 1 MySQL的使用演示&#xff08;8.0和5.7版本对比&#xff09; 1、查看所有的数据库 2、创建自己的数据库 3、使用自己的数据库 4、查看某个库的所有表格 5、创建新的表格 6、查看一个表的数据 7、添加一条记录 8、查看表的创建信息 9、查看数据库的创建信息 …

关于Vue+webpack使用unocss编写CSS,打包后CSS没加前缀

关于Vuewebpack使用unocss编写CSS&#xff0c;打包后CSS没加前缀&#xff0c;封装了一个插件去解决了这个问题 unocss-postcss-webpack-plugin unocss在vite中使用配置&#xff0c;关于unocss在vite中使用&#xff0c;自行查阅官网 https://unocss.dev/integrations/vite ,vi…

【LeetCode】24. 两两交换链表中的节点

1 问题 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xf…

Lua在计算时出现非法值,开启Debugger之后不再触发

1&#xff09;Lua在计算时出现非法值&#xff0c;开启Debugger之后不再触发 2&#xff09;从Gamma空间改为Linear空间会导致性能下降吗 3&#xff09;EXR格式在Unity中如何优化 4&#xff09;安卓游戏启动后提示“应用程序异常” 这是第355篇UWA技术知识分享的推送&#xff0c;…

如何抓取AJAX请求

在Python中&#xff0c;可以使用第三方库requests来抓取通过AJAX请求加载的数据。以下是一个示例代码&#xff1a; import requestsurl "https://example.com/ajax-endpoint"payload { "param1": "value1", "param2": "v…

基于VScode 使用plantUML 插件设计状态机

本文主要记录本人初次在VScode上使用PlantUML设计 本文只讲述操作的实际方法&#xff0c;假设java已安装成功 。 1. 在VScode下安装如下插件 2. 验证环境是否正常 新建一个文件夹并在目录下面新建文件test.plantuml 其内容如下所示: startuml hello world skinparam Style …

力扣 -- 1143. 最长公共子序列

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int longestCommonSubsequence(string s1, string s2) {int ms1.size();int ns2.size();s1 s1;s2 s2;vector<vector<int>> dp(m1,vector<int>(n1));for(int i1;i<m;i){for(int j1;j&…

SpringBoot采用集成多个Mybatis框架实现多JDBC数据源 + 多数据源本地事务

目录 1. 原理1.1 实现多数据源的原理1.2 多数据源本地事务的原理 2. Mysql数据准备3. pom.xml依赖4. application.properties配置5. 创建两个SqlSessionFactory5.1 DataSource1Config5.1 DataSource2Config 6. 动态数据源测试6.1 创建User类6.2 Mapper接口实现6.3 Mapper.xml实…

【狂神说】HTML详解

目录 1 HTML概述1.1 什么是HTML1.2 HTML发展史1.3 HTML5的优势1.4 W3C标准 2 网页2.1 网页基本信息2.2 网页基本标签2.2.1 标题标签2.2.2 段落标签2.2.3 换行标签2.2.4 水平线标签2.2.5 字体样式标签&#xff1a;粗体、斜体2.2.6 注释和特殊符号 2.3 图像标签2.4 链接标签邮箱链…

C#串口原理

串口实际有2种。主要是电压逻辑不一样。玩单片机的人指usb转TTL的串口&#xff1b;普通人指USB转DB9的串口&#xff1b;先看下他们的区别&#xff1a; https://doc.embedfire.com/module/module_tutorial/zh/latest/Module_Manual/port_class/serial_port.html 1. 串口外设总结…

PC网站微信扫码登录

PC站通过微信扫码登录网站。 参考文档&#xff1a;微信官方文档 1.通过在PC端打开以下链接&#xff1a; https://open.weixin.qq.com/connect/qrconnect?appidAPPID&redirect_uriREDIRECT_URI&response_typecode&scopeSCOPE&stateSTATE#wechat_redirect 用…

Flink的基于两阶段提交协议的事务数据汇实现

背景 在flink中可以通过使用事务性数据汇实现精准一次的保证&#xff0c;本文基于Kakfa的事务处理来看一下在Flink 内部如何实现基于两阶段提交协议的事务性数据汇. flink kafka事务性数据汇的实现 1。首先在开始进行快照的时候也就是收到checkpoint通知的时候&#xff0c;在…

15.项目讲解之前端页面的实现

项目讲解之前端页面的实现 本项目前端使用HBuilerX软件编写HBuilderX下载安装配置一键直达&#xff0c; uniapp框架uniapp官网&#xff0c; 使用Element-ui组件Element-ui组件网址进行前端页面的完成。 前端项目下载地址 前端项目 前端项目展示 首页 首页展示 echarts实现…

简单的数学运算如何改变算法

简单的数学运算如何影响事物 当你坐在无人驾驶汽车上行驶时&#xff0c;突然发现前面有一个问题。一个亚马逊快递司机将他们的货车开到了一辆双停的UPS卡车旁边&#xff0c;然后才意识到无法通过。现在他们卡住了&#xff0c;你也卡住了。 街道太窄&#xff0c;无法实现U型转弯…

CCF CSP认证 历年题目自练Day32

题目一 试题编号&#xff1a; 202209-1 试题名称&#xff1a; 如此编码 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 题目背景 某次测验后&#xff0c;顿顿老师在黑板上留下了一串数字 23333 便飘然而去。凝望着这个神秘数字&#xff0c;小…