当前位置:   article > 正文

[C#]winform基于opencvsharp实现黑白图像上色_c# colorization

c# colorization

【算法简介】

技术有时会提高艺术,但有时也会破坏艺术。着色黑白电影是一个可以追溯到1902年的古老想法。几十年来,许多电影创作者反对将黑白电影着色的想法,并将其视为对艺术的破坏。但今天它被接受为艺术形式的增强。该技术本身已经从艰苦的手工着色转变为如今的自动化技术。如下图所示。

基于传统的计算机视觉方法以及发表了许多关于图像着色的论文。我最喜欢的一篇文章是名为Colorization using Optimization的论文。它使用了一些彩色涂鸦来指导解决着色的优化问题。论文见

如果算法不需要用户输入任何参数,这不是很酷的事情吗?在过去几年中,随着深度学习的发展,着色自动化取得了巨大的飞跃。在这篇文章中,我们将了解一个这样的着色深度学习模型。我们还共享OpenCV代码,以便在Python或C ++应用程序中使用经过训练的模型。

1 彩色图像着色

在ECCV 2016中,一篇名为Colorful Image Colorization的论文,提出了一个用于着色灰度图像的卷积神经网络。论文使用ImageNet训练集的130万像素训练网络,并公开了一个训练好的基于Caffe的模型。在这篇文章中,我们将首先定义着色问题,解释论文的架构细节,最后分享代码和一些有趣的结果。

论文原文:

1.1 定义着色问题

我们首先根据CIE Lab颜色空间定义颜色问题。与RGB颜色空间一样,它是3通道颜色空间,但与RGB颜色空间不同,颜色信息仅在a(绿红分量)和b(蓝黄分量)通道中编码。L(亮度)通道仅对亮度信息进行编码。

我们想要着色的灰度图像可以被认为是Lab颜色空间中图像的L通道,我们的目标是找到a和b分量。可以使用标准颜色空间变换将该Lab图像变换为RGB颜色图像。例如,在OpenCV中,这可以使用COLOR_BGR2Lab选项的cvtColor来实现。

为了简化计算,Lab颜色空间的ab空间进行312级量化,如图2所示。OpenCV会映射到0到312,由于这种量化我们只需找到0到312的数,而不是找到每个像素的a和b值。另一种思考问题的方法是我们已经有一个L通道,取值从0到255,我们需要找到一个取0到312之间值的ab通道。所以颜色预测任务现在是变成了多项分类问题,每个灰色像素有313个类可供选择。

1.2 CNN彩色化结构

Colorful Image Colorization这篇论文使用的CNN结构如下所示。类似与VGG网络,但是该CNN没有池化层或全连接层。

输入图像缩放为224×224,缩放后的灰度输入图像表示为X。当它通过上面显示的神经网络时,输出为:

[OpenCV实战]17 基于卷积神经网络的OpenCV图像着se_v8_04

[OpenCV实战]17 基于卷积神经网络的OpenCV图像着se_ide_05

的尺寸为H×W×Q,其中H=56和W=56是最后一个卷积层输出的高度和宽度。Q=313表示类别个数。对于每个H×W都有一个对应的值表示属于该类的概率。我们的目标是为每个概率分布

[OpenCV实战]17 基于卷积神经网络的OpenCV图像着se_ide_06

找到其对应的ab通道值。

【界面展示】

【效果展示】

 【部分实现代码】

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using OpenCvSharp;
  12. namespace FIRC
  13. {
  14. public partial class Form1 : Form
  15. {
  16. Mat src = new Mat();
  17. ColorizeImager net=new ColorizeImager(Application.StartupPath+ "\\weights\\colorization_deploy_v2.prototxt", Application.StartupPath + "\\weights\\colorization_release_v2.caffemodel");
  18. public Form1()
  19. {
  20. InitializeComponent();
  21. }
  22. private void button1_Click(object sender, EventArgs e)
  23. {
  24. OpenFileDialog openFileDialog = new OpenFileDialog();
  25. openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";
  26. openFileDialog.RestoreDirectory = true;
  27. openFileDialog.Multiselect = false;
  28. if (openFileDialog.ShowDialog() == DialogResult.OK)
  29. {
  30. src = Cv2.ImRead(openFileDialog.FileName);
  31. pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);
  32. }
  33. }
  34. private void button2_Click(object sender, EventArgs e)
  35. {
  36. if(pictureBox1.Image==null)
  37. {
  38. return;
  39. }
  40. var resultMat = net.Inference(src);
  41. pictureBox2.Image= OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultMat); //Mat转Bitmap
  42. }
  43. private void Form1_Load(object sender, EventArgs e)
  44. {
  45. }
  46. }
  47. }

【测试环境】

vs2019

netframework4.7.2

opencvsharp4.8.0

【演示视频】

C#使用OpenCvSharp实现黑白老照片上色_哔哩哔哩_bilibili【测试环境】vs2019netframework4.7.2opencvsharp4.8.0更多信息参考博文:https://blog.csdn.net/FL1623863129/article/details/139772466, 视频播放量 1、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:使用易语言调用opencv进行视频和摄像头每一帧处理,Perplexity AI可以将你的搜索到的答案一键生成博客、文章,用C#部署yolov8的tensorrt模型进行目标检测winform最快检测速度,使用C#的winform部署yolov8的onnx实例分割模型,将yolov5-6.2封装成一个类几行代码完成语义分割任务,基于yolov8+bytetrack实现目标追踪视频演示,使用C#部署openvino-yolov5s模型,使用C++部署yolov8的onnx和bytetrack实现目标追踪,C#使用纯OpenCvSharp部署yolov8-pose姿态识别,C++使用纯opencv部署yolov9的onnx模型icon-default.png?t=N7T8https://www.bilibili.com/video/BV1es421T7zK/

【C#源码下载】

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

同时我也用python和C++都实现了使用这个算法进行图像上色

【C++源码下载】

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

【python源码下载】

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/807468
推荐阅读
相关标签
  

闽ICP备14008679号