[C#]winform基于opencvsharp结合pairlie算法实现低光图像增强黑暗图片变亮变清晰

【低光图像增强介绍】

在图像处理领域,低光图像增强是一个具有挑战性的任务。由于光线不足,这些图像往往呈现出低对比度、高噪声和细节丢失等问题,严重影响了图像的视觉效果和后续分析的准确性。因此,开发有效的低光图像增强方法具有重要的实用价值。

近年来,随着深度学习技术的快速发展,基于神经网络的图像增强方法取得了显著进展。其中,一种简单而有效的方法是利用成对的低光和高光图像进行训练,学习从低光图像到高光图像的映射关系。这种方法的核心在于构建一个能够捕捉图像光照变化的神经网络模型,通过对大量低光-高光图像对的训练,学习如何增强低光图像的光照和细节。

在训练过程中,模型会学习到如何调整图像的亮度、对比度和色彩等信息,以恢复出更接近真实场景的高光图像。同时,通过引入不同的损失函数和优化策略,可以进一步提高增强效果,减少噪声和失真。

与传统的图像增强方法相比,基于深度学习的低光图像增强方法具有更高的灵活性和更强的泛化能力。它不仅可以处理各种复杂的低光场景,还可以根据具体需求进行定制和优化。因此,这种方法在视频监控、夜间摄影、医学影像分析等领域具有广泛的应用前景。

总之,学习从配对低光实例中增强简单低光图像是一种有效且实用的技术。随着深度学习技术的不断进步,相信这种方法在未来会得到更多的发展和应用。

【算法介绍】

Learning a Simple Low-light Image Enhancer from Paired Low-light Instances
发表于2023CVPR

论文主要介绍了一种用于低光图像增强(LIE)的方法。在低光条件下拍摄的图像往往存在对比度低、细节模糊等问题。作者提出了一种无监督的方法,通过从低光图像对中学习自适应的先验。同时提出了一种简单的自监督机制,用于去除原始图像中不合适的特征。

论文地址:CVPR 2023 Open Access Repository

论文代码:https: //github.com/zhenqifu/PairLIE

本文贡献
提出了PairLIE方法:本文提出了一种名为PairLIE的无监督方法,该方法通过学习自适应的先验知识来增强低光照图像。传统的低光照图像增强算法通常使用单张输入图像和手工设计的先验知识来调整光照,但由于单张图像的信息有限以及手工先验知识的适应性不足,这些方法通常无法恢复图像细节。PairLIE方法通过学习来自低光照图像对的自适应先验知识,能够更好地提高对比度并恢复图像细节。

基于Retinex理论进行图像分解:为了实现准确的图像分解,本文首先对原始图像进行投影,以去除不合适的特征。通过应用Retinex理论,本文要求分解得到的两个分量应该满足重建输入图像的要求。为了保证合理的分解,文中引入了一个重建项,用于衡量重建后图像与输入图像的差异。通过估计光照分量,可以计算得到反射分量。因此,本文还添加了一个项来引导分解过程,以保证反射分量与低光照图像除以光照分量的结果之间的一致性。

简化网络结构和减少手工先验:与大多数现有方法使用大量手工先验知识不同,PairLIE方法只对光照分量施加了一个平滑项和一个初始化项。具体而言,初始化的光照分量是通过R、G、B通道的最大值计算得到的。相比之下,PairLIE方法使用了更简化的网络结构和较少的手工先验,同时实现了与现有方法相当的性能。

【效果展示】

【实现部分代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;namespace FIRC
{public partial class Form1 : Form{Mat src = new Mat();PairLIE pl = new PairLIE();public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";openFileDialog.RestoreDirectory = true;openFileDialog.Multiselect = false;if (openFileDialog.ShowDialog() == DialogResult.OK){src = Cv2.ImRead(openFileDialog.FileName);pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);}}private void Form1_Load(object sender, EventArgs e){pl.LoadWeights(Application.StartupPath+@"\weights\pairlie_416x416.onnx");}private void button3_Click(object sender, EventArgs e){if (pictureBox1.Image == null){return;}var image = pl.Inference(src);pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image); //Mat转Bitmap}}
}

【视频演示】

https://www.bilibili.com/video/BV1Ly421z7nS/

【源码下载】

https://download.csdn.net/download/FL1623863129/88856153

【测试环境】

vs2019,netframework4.7.2,opencvsharp4.8.0

【参考文献】

[1] https://blog.csdn.net/qq_54510777/article/details/134148179

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

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

相关文章

Redis(03)——发布订阅

基础命令 基于频道 publish channel message:将信号发送到指定的频道pubsub subcommand [argument [argyment]]:查看订阅或发布系统状态subscribe channel [channel]:订阅一个或多个频道的信息unsubscribe [channel [channel]]:退…

SpringBootWeb学习笔记——12万字详细总结!

0. 写在前面 注:这套笔记是根据黑马程序员B站2023-3-21的视频学习的成果,其中省略了前端基础部分、Maven部分和数据库基础部分,详情可见目录。 注注:目前文章内结尾处多幅图片加载不出来,因为图片还存在本地没被传上来,过段时间再改~ 所有的Spring项目都基于Spring Fra…

Vue路由组件练习

Vue 路由组件练习 1. 演示效果 2. 代码分析 2.1. 安装 vue-router 命令:npm i vue-router 应用插件:Vue.use(VueRouter) 2.2. 创建路由文件 在 src 文件夹下,创建router文件夹,并在该文件夹创建index.js文件 2.3. 导入依赖…

解决vscode每次git pull/push都需要输入账号密码

git如何设置用户名 邮箱 密码 //设置用户 git config --global user.name "xxx"//设置邮箱 git config --global user.email "xxxxxx.com"//设置密码 git config --global user.password "xxxxx"解决每次git pull/push操作都需要输入密码 git …

ctfshow-web29~40-WP

web29 if(isset($_GET[c])){$c = $_GET[c];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__); } 首先先system(“ls”);查看一下文件 既然过滤了flag,那我们就fla*的形式进行匹配,结合tac命令输出flag.php文件内容

Collection集合体系(ArrayList,LinekdList,HashSet,LinkedHashSet,TreeSet,Collections)

目录 一.Collection 二.List集合 三.ArrayList集合 四.LinkedList集合 五.Set集合 六.hashSet集合 七.LinkedHashSet集合 八.TreeSet集合 九.集合工具类Collections 集合体系概述 单列集合:Collection代表单列集合,每个元素&#…

2024牛客寒假算法基础集训营4(视频讲解题目)

2024牛客寒假算法基础集训营4&#xff08;视频讲解题目&#xff09; 视频链接ABCDEFG、H&#xff08;下面是hard版本的代码两个都可以过&#xff09; 视频链接 2024牛客寒假算法基础集训营4&#xff08;视频讲解题目&#xff09; A #include<bits/stdc.h> #define en…

Linux(五)__系统管理

介绍 通常&#xff0c; Windows 中使用"任务管理器"主要有 3 个目的&#xff1a; 利用"应用程序"和"进程"标签来査看系统中到底运行了哪些程序和进程&#xff1b;利用"性能"和"用户"标签来判断服务器的健康状态&#xff1…

【c++】vector的增删查改

1.先定义一个类对象vector 为了防止和库里面发生冲突&#xff0c;定义一个命名空间&#xff0c;将类对象放在命名空间 里面 #include<iostream> using namespace std; namespace zjw {class vector {public:private:}; }2.定义变量&#xff0c;需要一个迭代器&#xff…

Python开发户型图编辑器-2D/3D户型图展示

在现代家居设计中&#xff0c;户型图是不可或缺的工具&#xff0c;它为设计师和业主提供了一个直观的展示和规划空间的方式。然而&#xff0c;传统的户型图编辑软件往往复杂难用&#xff0c;限制了设计师的创作灵感。我们为您带来了一款全新的Python开发的户型图编辑器&#xf…

IDEA中创建web项目(配置tomcat,tomcat启动报程序包javax.servlet.http不存在,tomcat控制台乱码问题)

文章目录 一、新建动态web项目1、新建项目2、选择创建动态web项目3、项目命名4、编辑index.jsp 二、配置Tomcat1、新增tomcat服务器配置2、选择服务器类型3、配置服务器参数4、部署项目5、完成配置6、启动运行7、访问web项目 三、tomcat启动报程序包javax.servlet.http不存在四…

数组的左旋和右旋算法

public class Test09 {public static void main(String[] args) {//右旋 数组逆序遍历&#xff0c;将尾部元素&#xff0c;不断交换至头部int[] arr {1,2,3,4,5,6,7,8};for(int i arr.length-1;i>0;i--) { //遍历一次arr[i] arr[i] ^ arr[i-1];arr[i-1] arr[i] ^ arr[i…

【maya 入门笔记】基本视图和拓扑

1. 界面布局 先看基本窗口布局&#xff0c;基本窗口情况如下&#xff1a; 就基本窗口布局的情况来看&#xff0c;某种意义上跟blender更像一点&#xff08;与3ds max相比&#xff09;。 那么有朋友就说了&#xff0c;玛格基&#xff0c;那blender最下面的时间轴哪里去了&…

Java中哪些很容易出现的坑

文章目录 1空指针2小数的计算3包装类型4Java8 Stream5日期格式化 先来一个简单一点&#xff0c;就从空指针开始吧 1空指针 //多级调用空指针userService.getUser("张三").getUserInfo().getUserName(); //例如getUser("张三")、getUserInfo&#xff08;&a…

【RT-DETR有效改进】 多维度注意力机制 | TripletAttention三重立体特征选择模块

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制&#xff0c;它通过三个不同的视角来分析输入的数据&#xff0c;就好比三个人从不同的角度来观察同一幅画&#xff0c;然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

从零开始手写mmo游戏从框架到爆炸(十六)— 客户端指定回调路由与登录

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 我们这次来把注册、登录、选择英雄&#xff0c;进入主页-选择地图的功能完善。 在这之前&#xff0c;我们还要解决一个问题&#xff0c;就是服务端往客户端发消息的路由问题…

【漏洞复现】H3C 路由器多系列信息泄露漏洞

Nx01 产品简介 H3C路由器是一款高性能的路由器产品&#xff0c;具有稳定的性能和丰富的功能。它采用了先进的路由技术和安全机制&#xff0c;可以满足不同用户的需求&#xff0c;广泛应用于企业、运营商和数据中心等领域。 Nx02 漏洞描述 H3C路由器多系列存在信息泄露漏洞&…

网络爬虫基础(上)

1. 爬虫的基本原理 爬虫就是在网页上爬行的蜘蛛&#xff0c;每爬到一个节点就能够访问该网页的信息&#xff0c;所以又称为网络蜘蛛&#xff1b; 网络爬虫就是自动化从网页上获取信息、提取信息和保存信息的过程&#xff1b; 2. URL的组成部分 URL全称为Uniform Resource L…

Oracle 如何提高空间使用率?

一&#xff0c;行迁移和行链接。 oracle尽量保证一行的数据能够放在同一个数据块当中&#xff0c;有的时候行会发生行迁移和行链接。 行链接 &#xff1a;有一个列的字段是大对象&#xff08;long&#xff0c;longlong&#xff09;一行占的数据一整个块都放不下&#xff0c;则…

07 Redis之持久化(RDB+AOF)

4 Redis持久化 Redis 是一个内存数据库&#xff0c;然而内存中的数据是不持久的&#xff0c;若主机宕机或 Redis 关机重启&#xff0c;则内存中的数据全部丢失。 当然&#xff0c;这是不允许的。Redis 具有持久化功能&#xff0c;其会按照设置以快照或操作日志的形式将数据持…