[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

相关推荐
QuantumStack3 分钟前
【C++ 真题】B2037 奇偶数判断
数据结构·c++·算法
今天好像不上班11 分钟前
软件验证与确认实验二-单元测试
测试工具·算法
冷静 包容37 分钟前
C语言学习之 没有重复项数字的全排列
c语言·开发语言·学习
碳苯42 分钟前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os
wclass-zhengge1 小时前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌1 小时前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.1 小时前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
学习使我变快乐1 小时前
C++:静态成员
开发语言·c++
TJKFYY1 小时前
Java.数据结构.HashSet
java·开发语言·数据结构
杰哥在此1 小时前
Python知识点:如何使用Multiprocessing进行并行任务管理
linux·开发语言·python·面试·编程