[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

相关推荐
To_OC19 分钟前
LC 35 搜索插入位置:二分查找谁都会,边界条件谁写谁懵
javascript·算法·leetcode
码哥DFS1 小时前
二叉树的直径
开发语言·javascript·算法
paopaokaka_luck1 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
小金子会发光2 小时前
C# WinForms 手搓 Modbus RTU 调试助手:不依赖第三方 Modbus 库,从 CRC16 到 8 种功能码完整实现
c#·modbusrtu·串口通讯
梦雨生生3 小时前
java开发工具(学习第一天)
java·开发语言·学习
营养充电站4 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
人工智能·算法·docker·jupyter
啊啊啊啊啊!!!!4 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
技术小黑4 小时前
RNN算法实战系列05 | 天气预测
人工智能·rnn·算法
松仔log5 小时前
Java中级——组合和继承
android·java·开发语言