Retinexformer:基于 Retinex 的单阶段 Transformer 低光照图像增强方法

        开头发点牢骚:本来做的好好都都要中期了,导师怎么突然给我换题目啊。真是绷不住了......又要从头开始学了,唉!

原论文链接:Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement

       低光照图像增强算法多基于Retinex理论,但传统模型忽略暗区噪声和光照过程中引入的失真,且现有方法依赖多阶段CNN训练,难以建模长距离依赖,效率低下。文章搭建了①单阶段Retinex框架(ORF),可以通过光照估计即直接预测光照提升图(而非传统光照图),避免数值不稳定问题。同时,还能做到噪声修复,端到端联合优化光照增强与失真修复。②光照引导Transformer(IGT):IG-MSA自注意力:利用光照特征动态引导不同亮度区域的交互,降低计算复杂度(线性复杂度)。

现有技术分析:

  • 传统Retinex方法:

 Retinex理论认为图像可分解为 反射分量(物体固有属性,如颜色和纹理)和 光照分量(环境光照)。增强时,通过调整光照分量(如提升暗区亮度)来改善视觉效果。

具体步骤为:①估计光照分量(通常通过高斯滤波或优化方法)。

                      ②计算反射分量:R=I/L(图像除以光照图)。

                      ③对反射分量进行对比度增强或直方图拉伸。

缺点:假设图像无噪声且光照均匀,导致增强后出现噪声放大或颜色失真。

  • 基于CNN的方法

利用卷积神经网络(CNN)建模Retinex分解过程,通常分阶段处理光照和反射分量。依赖多阶段训练流程,难以捕捉长距离依赖关系。

具体步骤:①分解网络:输入低光图像,输出反射图 R 和光照图 L。

                  ②反射去噪网络:对 R 进行去噪(如使用U-Net)。

                  ③光照调整网络:调整 L 以生成增强后的光照图。

                  ④融合阶段:将调整后的 R 和 L 融合为最终图像。

  • Transformer方法

Transformer通过自注意力机制捕捉全局依赖,理论上适合建模图像中的长距离关系。

步骤:①将图像分割为块(Patch),展平为序列。

           ②计算每个块之间的注意力权重(Query-Key-Value)。

           ③加权聚合Value生成输出特征。

全局自注意力计算复杂度高(与图像尺寸平方成正比),难以直接应用于高分辨率图像。

论文方案创新点:

技术方案与创新点

单阶段Retinex框架(ORF)

  • 修正Retinex模型:引入扰动项(\hat{\mathbf{R}}\tilde{\mathbf{L}})建模噪声和失真,更贴合真实场景。
  • 光照估计与增强:直接预测“光照提升图” \tilde{\mathbf{L}}(而非传统光照图L),避免除法操作带来的数值不稳定问题。
  • 端到端训练:将光照估计和图像修复整合到单阶段流程,简化训练过程。

光照引导Transformer(IGT)

  • IG-MSA自注意力机制:利用光照特征引导不同光照区域的交互,降低计算复杂度。
  • 复杂度优化:将自注意力计算复杂度从 O(HW^2) 降至 O(HW) ,支持多尺度特征处理。
  • U型架构设计:结合下采样和上采样分支,通过跳跃连接保留细节信息。

方法

① 单阶段Retinex框架(ORF)

a. 修正Retinex模型
  • 传统模型:\mathbf{I}=\mathbf{R}\odot\mathbf{L}(图像=反射分量×光照分量)。

  • 引入扰动项:                          \mathbf{I}=(\mathbf{R}+\hat{\mathbf{R}})\odot(\mathbf{L}+\tilde{\mathbf{L}})

  • 其中:

                 \hat{\mathbf{R}}:暗区噪声和伪影(如高ISO噪声)。

                 \tilde{\mathbf{L}}:光照估计误差(如过曝光或颜色失真)。

在Retinex理论中,符号  表示 逐元素乘法(Element-wise Multiplication),即两个矩阵(或张量)中对应位置的元素相乘。
例如,若图像大小为 H×W×3,则每个像素点 (i,j) 的RGB值由反射分量R(i,j) 和光照分量 L(i,j) 的乘积决定。

传统Retinex模型:I = R ⊙ L 

Retinex理论认为,人眼感知的图像(I)由两部分组成:

  1. 反射分量  Reflectance

    • 表示物体的固有属性,如颜色、纹理、材质(如红色苹果的红色是反射属性)。

    • 特点:与光照无关,是“理想”的无光照影响的图像。

  2. 光照分量  Illumination

    • 表示环境光照的分布(如阳光、灯光的方向和强度)。

    • 特点:通常假设是平滑的(低频分量),且取值范围在 [0,1]。

数学表达式:                               \mathbf{I}(i,j,c)=\mathbf{R}(i,j,c)\cdot\mathbf{L}(i,j)

  • 图像生成过程:每个像素点 (i,j) 的RGB值(通道 c)等于反射分量 R(i,j,c) 乘以光照分量 L(i,j)。

  • 物理意义:在光照强(L 值大)的区域,反射分量被“照亮”,反之在暗区(L 值小)则显得暗淡。

b. 光照估计与初步增强:将低光照图像变亮
  • 输入:低光图像 I 和光照先验图 L_p(通道均值)。

  • 网络结构(图2a-i):

    1. 特征融合:将 I 和 L_p​ 拼接后通过1×1 卷积融合。

    2. 区域交互建模:使用深度可分离 9×9 卷积,捕捉不同光照区域的上下文信息,生成光照特征 F_{lu}

    3. 光照提升图生成:通过 1×1 卷积从 Flu​ 生成三通道光照提升图 \tilde{\mathbf{L}}(RGB通道独立建模非线性光照变化)。

    4. 初步增强:\mathbf{I}_{lu}=\mathbf{I}\odot\tilde{\mathbf{L}}

\mathbf{I}\odot\mathbf{\bar{L}}=\mathbf{R}+\mathbf{R}\odot(\mathbf{\hat{L}}\odot\mathbf{\bar{L}})+(\mathbf{\hat{R}}\odot(\mathbf{L}+\mathbf{\hat{L}}))\odot\mathbf{\bar{L}}

\widehat{R} \odot (L+\widehat{L} ):暗场景中的噪声和伪影

R \odot (\widehat{L}+ \overline{L}):表示由light-up过程引起的过曝光/曝光不足和颜色失真

\mathbf{I}_{lu}=\mathbf{I}\odot\mathbf{\bar{L}}=\mathbf{R}+\mathbf{C}

ORF设计如公式(5)所示:

(\mathbf{I}_{lu},\mathbf{F}_{lu})=\mathcal{E}(\mathbf{I},\mathbf{L}_{p}),\quad\mathbf{I}_{en}=\mathcal{R}(\mathbf{I}_{lu},\mathbf{F}_{lu})

  • \varepsilon:光照估计(illumination estimator)
  • \Re:corruption restorer
  • L_{p} \in \mathbb{R}^{H \times W}:I的光照先验图,L_{p}=main_{c}(I)main_{c}表示沿着通道维度计算每个像素的平均值。
  • F_{lu} \in \mathbb{R}^{H \times W \times C}:light-up feature
  • I_{en} \in \mathbb{R}^{H \times W \times C}:增强后的图

②. 光照引导Transformer(IGT)

目标:修复初步增强图像I_{lu}中的噪声、伪影和曝光问题,同时建模长距离依赖。

网络结构(图2a-ii)

IGT采用U型架构(类似U-Net),包含下采样和上采样分支,通过跳跃连接保留细节。

  • 输入:初步增强图像 I_{lu} 和光照特征 F_{lu}​。

  • 核心模块:Illumination-Guided Attention Block (IGAB)。

        降采样分支中,经过一个步长为2的3×3的卷积、一个IGAB、一个步长为2的4×4卷积、两个IGAB和一个步长为2的4×4的卷积层生成分层特征。经过两个IGBA
        上采样分支是一个对称结构,用步长为2的反卷积操作deconv2×2来升级特征。跳跃连接用来减轻下采样分支带来的信息损失。上采样分支输出一个残差图像,然后增强的图像

IGAB块详解(图2b)

每个IGAB块包含:

  1. 层归一化(LayerNorm):稳定训练。

  2. 光照引导自注意力(IG-MSA):核心创新模块。

  3. 前馈网络(FFN):增强非线性表达能力。

IG-MSA机制(图2c)

a. 传统自注意力问题
全局计算所有像素对的注意力权重,复杂度为 O(HW\times ×HW),无法处理高分辨率图像。

b. IG-MSA的改进

  • Token化:将输入特征图 \mathbf{F}_{in}\in\mathbb{R}^{H\times W\times C} 展平为 HW\times ×C 的序列。

  • 多头拆分:将序列按通道分为 k 个头。\mathbf{X}=[\mathbf{X}_{1},\mathbf{X}_{2},\cdots,\mathbf{X}_{k}]

  • 光照特征引导:

    1. 将光照特征 F_{lu} 同样展平并拆分为 k 个头。\mathbf{Y}=[\mathbf{Y}_1,\mathbf{Y}_2,\cdots,\mathbf{Y}_k]

    2. 注意力计算:

      \mathrm{Attention}(\mathbf{Q}_i,\mathbf{K}_i,\mathbf{V}_i,\mathbf{Y}_i)=(\mathbf{Y}_i\odot\mathbf{V}_i)\mathrm{softmax}\left(\frac{\mathbf{K}_i^T\mathbf{Q}_i}{\alpha_i}\right)

      其中 Y_i是光照特征的第 i 个头,用于调制注意力权重。

c. 复杂度优化

  • 传统全局自注意力:复杂度 O(HW^2)

  • IG-MSA:复杂度O(HW)(公式10),支持多尺度特征处理。

                    \begin{aligned} \mathcal{O}(\mathrm{IG-MSA}) & =k\cdot[d_{k}\cdot(d_{k}\cdot HW)+HW\cdot(d_{k}\cdot d_{k})], \\ & =2HWkd_{k}^{2}=2HWk(\frac{C}{k})^{2}=\frac{2HWC^{2}}{k}. \end{aligned}

核心流程

  1. 光照估计(E模块)

    • 输入低光图像II和光照先验图L_p(通道均值)。

    • 通过深度可分离卷积建模不同光照区域的交互,生成光照提升图\tilde{\mathbf{L}}和初步增强图像I_{lu}

  2. 图像修复(R模块,即IGT)

    • 输入I_{lu}​和光照特征F_{lu}

    • 通过光照引导的自注意力(IG-MSA)修复噪声、伪影、曝光问题,输出残差图Ire​。

    • 最终增强图像:\mathbf{I}_{en}=\mathbf{I}_{lu}+\mathbf{I}_{re}

实验结果

 略

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

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

相关文章

后端——AOP异步日志

需求分析 在SpringBoot系统中,一般会对访问系统的请求做日志记录的需求,确保系统的安全维护以及查看接口的调用情况,可以使用AOP对controller层的接口进行增强,作日志记录。日志保存在数据库当中,为了避免影响接口的响…

flink广播算子Broadcast

文章目录 一、Broadcast二、代码示例三.或者第二种(只读取一个csv文件到广播内存中)提示:以下是本篇文章正文内容,下面案例可供参考 一、Broadcast 为了关联一个非广播流(keyed 或者 non-keyed)与一个广播流(BroadcastStream),我们可以调用非广播流的方法 connect(),…

Redis 和 MySQL双写一致性的更新策略有哪些?常见面试题深度解答。

目录 一. 业务数据查询,更新顺序简要分析 二. 更新数据库、查询数据库、更新缓存、查询缓存耗时对比 2.1 更新数据库(最慢) 2.2 查询数据库(较慢) 2.3 更新缓存(次快) 2.4 查询缓存&#…

SRT协议

SRT(Secure Reliable Transport)是一种开源的视频传输协议,专为高丢包、高延迟网络环境设计,结合了UDP的低延迟和TCP的可靠性,广泛应用于直播、远程制作、视频会议等场景。 定位:SRT协议的官方C/C实现库&am…

“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)

&#x1f6a8;&#x1f4e2; "征服HTML引号恶魔&#xff1a;“完全解析手册” &#x1f4e2;&#x1f6a8; &#x1f3af; 博客引言&#xff1a;当引号变成"恶魔" &#x1f631; 是否遇到过这种情况&#xff1a; 写HTML时满心欢喜输入<div title"他…

npm install 卡在创建项目:sill idealTree buildDeps

参考&#xff1a; https://blog.csdn.net/PengXing_Huang/article/details/136460133 或者再执行 npm install -g cnpm --registryhttps://registry.npm.taobao.org 或者换梯子

c++中cpp文件从编译到执行的过程

C 文件从编写到执行的过程可以分为几个主要阶段&#xff1a;编写代码、预处理、编译、汇编、链接和运行。以下是每个阶段的详细说明&#xff1a; 1. 编写代码 这是整个过程的起点。程序员使用文本编辑器&#xff08;如 VSCode、Sublime Text 或其他 IDE&#xff09;编写 C 源…

PROE 与 STL 格式转换:开启 3D 打印及多元应用的大门

在 3D 设计与制造的复杂生态中&#xff0c;将 PROE 格式转换为 STL 格式绝非无端之举&#xff0c;而是有着深厚且多元的现实需求作为支撑。 一、文件格式介绍​ &#xff08;一&#xff09;PROE 格式​ PROE 作为一款参数化设计软件&#xff0c;采用基于特征的参数化建模技术…

开发中后端返回下划线数据,要不要统一转驼峰?

先说结论。看情况&#xff01;&#xff01;&#xff01;&#xff01; 前端 主要用 JS/TS 建议后端返回 camelCase&#xff0c;减少前端转换成本。后端 主要是 Python/Go 建议保持 snake_case&#xff0c;前端做转换。但是团队统一风格最重要&#xff01;如果统一返回驼峰就驼峰…

docker pull时报错:https://registry-1.docker.io/v2/

原文&#xff1a;https://www.cnblogs.com/sdgtxuyong/p/18647915 https://www.cnblogs.com/OneSeting/p/18532166 docker 换源&#xff0c;解决连接不上的问题。 编辑以下文件&#xff0c;不存在则创建&#xff1a; vim /etc/docker/daemon.json {"registry-mirrors&qu…

Pytorch学习笔记(十二)Learning PyTorch - NLP from Scratch

这篇博客瞄准的是 pytorch 官方教程中 Learning PyTorch 章节的 NLP from Scratch 部分。 官网链接&#xff1a;https://pytorch.org/tutorials/intermediate/nlp_from_scratch_index.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwdaa2m 提取码: …

基础算法02——冒泡排序(Bubble Sort)

冒泡排序&#xff08;Bubble Sort&#xff09; 冒泡排序&#xff1a;是一种简单的排序算法&#xff0c;其基本思想是通过重复遍历要排序的列表&#xff0c;比较相邻的元素&#xff0c;并在必要时&#xff08;即前面的数比后面的数大的时候&#xff09;交换它们的位置&#xff…

RestTemplate远程调用接口方式

1.Post(body空参) 也就是说需要给一个空的json 代码: String getDeviceUrl this.MOVABLE_URL "detected-data/getMachineLists"; // 远程调用 RestTemplate restTemplate new RestTemplate(); restTemplate.getMessageConverters().set(1,new StringHttpMessageC…

ar头显和眼镜图像特效处理

使用一个线程从摄像头或者其他设备循环读取图像数据写入链表&#xff0c;另一个线程从链表循环读取数据并做相应的特效处理&#xff0c;由于写入的速度比读取的快&#xff0c;最终必然会因为写入过快导致线程读写一帧而引发冲突和数据帧正常数据帧被覆盖。最好使用共享内存&…

mysql--socket报错

错误原因分析 MySQL 服务未运行&#xff08;最常见原因&#xff09; 错误中的 (2) 表示 “No such file or directory”&#xff0c;即 /tmp/mysql.sock 不存在这通常意味着 MySQL 服务器根本没有启动 socket 文件路径不匹配 客户端尝试连接 /tmp/mysql.sock但 MySQL 服务器可…

labview加载matlab数据时报错提示:对象引用句柄无效。

1. labview报错提示 labview加载mat数据时报错提示&#xff1a;对象引用句柄无效。返回该引用句柄的节点可能遇到错误&#xff0c;并没有返回有效的引用句柄。该引用句柄所指的存储可能在执行调用之前已关闭。报错提示如下&#xff1a; 这是由于labview缺少matlab MathWorks导…

面试计算机操作系统解析(一中)

判断 1. 一般来说&#xff0c;先进先出页面置换算法比最近最少使用页面置换算法有较少的缺页率。&#xff08;✘&#xff09; 正确答案&#xff1a;错误解释&#xff1a;FIFO&#xff08;先进先出&#xff09;页面置换算法可能导致“Belady异常”&#xff0c;即页面数增加反而…

如何防御TCP洪泛攻击

TCP洪泛攻击&#xff08;TCP Flood Attack&#xff09;是一种常见的分布式拒绝服务&#xff08;DDoS&#xff09;攻击手段&#xff0c;以下是其原理、攻击方式和危害的详细介绍&#xff1a; 定义与原理 TCP洪泛攻击利用了TCP协议的三次握手过程。在正常的TCP连接建立过程中&a…

20250330 Pyflink with Paimon

1. 数据湖 2. 本地安装Pyflink和Paimon 必须安装Python 3.11 Pip install python -m pip install apache-flink1.20.1 需要手动加入这两个jar 测试代码&#xff1a; import argparse import logging import sys import timefrom pyflink.common import Row from pyflink.tab…

-PHP 应用SQL 盲注布尔回显延时判断报错处理增删改查方式

#PHP-MYSQL-SQL 操作 - 增删改查 1 、功能&#xff1a;数据查询(对数据感兴趣&#xff09; 查询&#xff1a; SELECT * FROM news where id$id 2 、功能&#xff1a;新增用户&#xff0c;添加新闻等&#xff08;对操作的结果感兴趣&#xff09; 增加&#xff1a; INSERT INT…