[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")

相关推荐
长安——归故李21 分钟前
【modbus学习】
java·c语言·c++·学习·算法·c#
索迪迈科技23 分钟前
STL库——map/set(类函数学习)
开发语言·c++·学习
ForteScarlet1 小时前
Kotlin 2.2.20 现已发布!下个版本的特性抢先看!
android·开发语言·kotlin·jetbrains
小码编匠1 小时前
WPF 多线程更新UI的两种实用方案
后端·c#·.net
兴科Sinco1 小时前
[leetcode 1]给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数[力扣]
python·算法·leetcode
沐怡旸1 小时前
【算法--链表】138.随机链表的复制--通俗讲解
算法·面试
anlogic1 小时前
Java基础 9.10
java·开发语言·算法
薛定谔的算法1 小时前
JavaScript单链表实现详解:从基础到实践
数据结构·算法·leetcode
yongche_shi1 小时前
第二篇:Python“装包”与“拆包”的艺术:可迭代对象、迭代器、生成器
开发语言·python·面试·面试宝典·生成器·拆包·装包
CoovallyAIHub1 小时前
CostFilter-AD:用“匹配代价过滤”刷新工业质检异常检测新高度! (附论文和源码)
深度学习·算法·计算机视觉