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

【算法介绍】

"Conditional Sequential Modulation for Efficient Global Image Retouching" 是一种图像修饰方法,主要用于对图像进行全局的高效调整。该方法基于深度学习技术,通过引入条件向量来实现对图像特征的调制,以达到改善图像质量和视觉效果的目的。

该方法主要包括两个网络:Base Network和Condition Network。Base Network是一个三层1x1的卷积层,相当于三个独立处理每个像素的多层感知器(MLP)。Condition Network则用于生成条件向量,该向量会被用来对Base Network的中间结果进行缩放(scaling)和移位(shifting)操作,从而实现对图像特征的调制。

这种方法的主要优点在于其高效性和灵活性。由于所有滤波器的大小都是1x1,因此网络的参数数量非常少,这使得网络能够快速地处理大分辨率的图像。此外,通过引入条件向量,该方法可以在不同风格间进行切换,从而实现对图像增强效果的控制。

该方法在MIT-Adobe FiveK数据集上进行了大量实验,并达到了最先进的性能,同时参数量也是最少的。实验结果证明了该方法的有效性和优越性。

总的来说,"Conditional Sequential Modulation for Efficient Global Image Retouching" 是一种高效、灵活且参数量少的图像修饰方法,对于改善图像质量和视觉效果具有重要的应用价值。

【论文简介】

论文题目:Conditional Sequential Modulation for Efficient Global Image Retouching

论文地址:https://arxiv.org/pdf/2009.10390.pdf

代码地址:https://github.com/hejingwenhejingwen/CSRNet

文章使用了一个条件向量,通过加入条件向量,可以较大幅度提升效果,同时可以控制图像增强的效果,在不同风格间进行切换。另外,网络可以做到很小,轻量级,对大分辨率的图像处理的速度也会较快。

【效果展示】

【实现部分代码】

复制代码
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();
        ImageRetouchNet pl = new ImageRetouchNet();
        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\csrnet_360x640.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/BV1tu4m1A76Q/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee

【源码下载】

【测试环境】

vs2019,netframework4.7.2,opencvsharp4.8.0

【参考文献】

1\] [https://blog.csdn.net/zhognsc08/article/details/127398036](https://blog.csdn.net/zhognsc08/article/details/127398036 "https://blog.csdn.net/zhognsc08/article/details/127398036")

相关推荐
AI柠檬3 分钟前
几种排序算法的实现和性能比较
数据结构·算法·c#·排序算法
sheji341611 分钟前
【开题答辩全过程】以 基于Java的旅游网站的设计与开发为例,包含答辩的问题和答案
java·开发语言·旅游
code bean26 分钟前
【C#】Channel<T>:现代 .NET 中的异步生产者-消费者模型详解
c#
yue00830 分钟前
C# XML文件的读写V2.0
xml·开发语言·c#
weixin_4296302632 分钟前
第6章 支持向量机
算法·机器学习·支持向量机
SweetCode32 分钟前
C++ 实现大数加法
开发语言·c++·算法
王哈哈^_^34 分钟前
【数据集】【YOLO】【目标检测】共享单车数据集,共享单车识别数据集 3596 张,YOLO自行车识别算法实战训推教程。
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
Nan_Shu_61436 分钟前
学习:JavaScript(5)
开发语言·javascript·学习
像风一样自由20201 小时前
Rust与Python完全指南:从零开始理解两门语言的区别与关系
开发语言·python·rust
睡前要喝豆奶粉1 小时前
.NET Core Web API开发需引入的三个基本依赖配置说明
oracle·c#·.netcore