OpenCV为老照片,黑白照片增加色彩

news2024/11/25 16:42:38

Colorful Image Colorization
图片的颜色上色,主要使用到了CNN卷积神经网络,作者在ImageNet数据集上进行了大量的训练,并将此问题使用在分类任务中,以解决问题的潜在的不确定性,并在训练时使用颜色重新平衡的损失函数方法来增加颜色的多样性。该算法在测试时作为CNN中的前馈通道实现,并在超过一百万个彩色图像上进行了训练。且使用“着色图灵测试”评估算法。
此算法作者为了训练神经网络,从imageNet数据集上搜集大量的数据,并将所有搜集的图像从图片的RGB空间转换为Lab空间。
与RGB三种颜色空间类似,Lab空间具有3个通道,但是与RGB不同,Lab空间对颜色的编码为:

  1. The L channel :代表颜色的亮度
  2. The a channel :绿-红
  3. The b channel :蓝-黄

Lab颜色空间是根据Commission International Eclairage(CIE)在1931年所制定的一种测定颜色的国际标准建立的。于1976年被改进,并且命名的一种色彩模式。Lab颜色模型弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。 [1] Lab颜色模型由三个要素组成,一个要素是亮度(L),a 和b是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩。
由于L通道仅编码强度,因此神经网络可以将L通道用作为网络的灰度输入
神经网络训练学习并预测a、b通道。 给定输入L通道和预测的ab通道,3中通道合并便可以生成彩色的图片
基于以上的基本知识的理解,我们可以总结一下黑白照片着色步骤为:

  1. 将输入图像从RGB颜色空间转换为Lab颜色空间
  2. 使用L通道信息作为神经网络的输入,并训练神经网络以预测Ab通道信息
  3. 将输入图像的L通道信息与神经网络预测的Ab通道信息合并
  4. 将合并的图片信息转换回RGB图像

作者已经使用imageNet数据集训练了神经网络,我们使用预训练模型与权重来进行图片的着色
代码实战
1、初始化神经网络
我们加载预训练模型与权重,加载一个numpy的聚类中心点文件,此文件为numpy类文件,主要是提供颜色的重新平衡损失函数算法,使用cv的dnn模块进行模型的加载,前期文章分享视频实时对象检测时,也用到了类似的代码来加载模型
深度学习和OpenCV的对象检测(MobileNet SSD视频流实时识别)

神经网络初始化
2、神经网络颜色重新平衡
如下代码的主要作用对神经网络的a通道颜色信息进行颜色重新平衡的损失函数,将图片的每个点看作为1*1 CNN 卷积核,并输入神经网络模型中

神经网络颜色重新平衡
3、处理原始图片
输入一张原始图片,对原始图片的像素强度转换为0-1的范围
#22 按照着色步骤,我们转换原始图片的RGB颜色空间到LAB颜色空间
#23 由于模型需要,我们resize一下输入图片的尺寸大小为224*224
#24-25 提取图片的L空间信息

处理原始图片
4、神经网络预测ab空间信息
初始化了神经网络以及处理好了输入图片,且获得了224*224尺寸大小的L空间信息,利用L空间信息作为神经网络的输入,来进行神经网络的预测,以便预测出AB空间信息(尺寸224*224)
待神经网络预测出AB空间信息后,我们resize一下ab空间到输入图片的大小,以便与输入图片的L空间进行合并

神经网络预测ab空间信息
5、合并L 空间与AB空间,获取上了色的图片
#31 由于前面我们resize了图片,所以这里重新从lab空间里面获取L空间颜色信息
#32 合并L空间颜色与预测的AB空间颜色
#33 把lab空间信息重新转换到RGB空间
#34 除掉超过0-1颜色强度
#35 前面由于除以255获得了0 1颜色强度,这里乘以255重新回到原始0-255范围

合并L 空间与AB空间,获取上了色的图片
6、呈现最终图片
最后,我们呈现一下原始图片与上了色的图片,进行一下对比,经过神经网络训练上色的图片与实际照片确实有些差别,但是很多情况下也是很好呈现了原始图片的信息

更多transformer,VIT,swin tranformer
参考头条号:人工智能研究所
微信中复制如下链接,发送到文件传输助手,打开,免费体验chatgpt
 
https://wx2.expostar.cn/qz/pages/manor/index?id=1137&share_from_id=79482&sid=24

 动画详解transformer

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/939168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

气传导耳机哪个品牌好?推荐几款非常不错的气传导耳机

​气传导耳机能够提供高品质的音效,同时保持耳道的开放,让你在享受音乐的同时保持对外界的感知,户外使用安全性更高。还有很多人对气传导耳机不了解的,以下是我们为大家推荐的四款气传导耳机,仅供大家参考。 NO1&…

【2023最新版】R安装(直接+Anaconda)及使用(Pycharm配置R)教程

目录 一、R语言 1. R官网 2. R介绍 二、直接安装R 1. 下载 2. 安装 三、Pycharm使用R 1. 安装Pycharm 2. R Language for IntelliJ插件 3. R设置 报错 4. R软件包 安装 加载 查看已安装的包 四、使用Anaconda创建R语言虚拟环境 1. 安装Anaconda 2. 创建R语言…

9 款值得您花钱的最佳 PDF 编辑器

PDF 格式在 90 年代初一推出就开始流行。PDF 文件便于携带、易于共享、阅读有趣,但难以编辑。有什么不喜欢的呢?与其他格式相比,无论大小的企业都更喜欢 PDF,因为他们不喜欢其他人篡改他们的文档。 无论是指南、职业道德还是展示…

2023年05月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:怪盗基德的滑翔翼 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。 有一天&#xff…

element——switch接口成功后赋值打开开关

应用场景 基本用法使用v-model双向绑定值,进行开关控制 例子1:需求: **点击switch,出弹窗,点击弹窗保存按钮调接口成功后再赋值(row.orderButtonValue“1”)打开switch开的状态变颜色。 在vue 中使用 :va…

【openEuler创新项目探索】一个Java端的向量化BLAS库VectorBLAS

VectorBLAS简介 VectorBLAS是一个使用Java语言实现的向量化BLAS高性能库,目前已在openEuler社区开源。 VectorBLAS通过循环展开、矩阵分块和内存布局优化等算法优化,对BLAS函数进行了深度优化,并利用VectorAPI JDK提供的多种向量化API实现。…

快速学习ES6新特性Promise之实例代码

&#xff08;一&#xff09;首先用setTimeout模拟一个异步请求&#xff0c;然后封装成一个new Promise <script type"text/javascript">function createAudioFileAsync() {console.log(调用返回数据前);let newPromise new Promise((resolve, reject) > {…

电子邮件营销模板怎么写?如何做营销邮件?怎么设计EDM邮件模板?

推荐的电子邮件营销模板有哪些&#xff1f; 电子邮件营销模板是现代营销策略中的重要组成部分。通过精心设计的邮件模板&#xff0c;您可以有效地吸引客户&#xff0c;传达信息&#xff0c;并提高销售率。在本文中&#xff0c;我们将介绍如何撰写出色的电子邮件营销模板&#x…

猫头虎博主赠书一期:《Kubernetes原生微服务开发》

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

C语言(第三十三天)

3.1.2 画图推演 3.2 举例2&#xff1a;顺序打印一个整数的每一位 输入一个整数m&#xff0c;打印这个按照顺序打印整数的每一位。 比如&#xff1a; 输入&#xff1a;1234 输出&#xff1a;1 2 3 4 输入&#xff1a;520 输出&#xff1a;5 2 0 3.2.1 分析和代码实现 这个题目&a…

算法通关村第8关【黄金】| 寻找祖先问题

思路&#xff1a;递归三部曲 第一步&#xff1a;确定参数和返回值 题目要求找到指定的结点&#xff0c;就需要返回结点。 题目又涉及到p,q就需要传入p,q&#xff0c;需要遍历传入root 第二步&#xff1a;确定终止条件 当遍历到结点为空说明到底没找到返回空 或者遍历到p,…

cyclictest stress 工具 使用

工具介绍 1. Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异&#xff0c;以提供有关系统延迟的统计数据。 它可以测量由硬件、固件和操作系统引起的实时系统延迟 2.stress是Linux的一个压力测试工具&#xff0c;可以对CPU、Memory、IO、磁盘进行…

ZQGZ-08、61、44、80 导轨安装系列中间继电器 JOSEF约瑟 增加保护和控制线路

系型型号 ZQGZ-08 ZQGZ-61 ZQGZ-44 ZQGZ-80 ZQGZ-RJ08 ZQGZ-RJ61 ZQGZ-RJ44 ZQGZ-RJ80 ZQGZ-PJ08 ZQGZ-PJ61 ZQGZ-PJ44 ZQGZ-PJ80 ZQGZ-RY08 ZQGZ-RY61 ZQGZ-RY44 ZQGZ-RY80 ZQGZ-PY08 ZQGZ-PY61 ZQGZ-PY44 ZQGZ-PY80 ZQGZ-08、61、44、80 导轨安装系列中间继电器用…

以太网交换机高稳定性时钟系统应用方案

随着网络技术的不断发展&#xff0c;我们的生活也发生着巨大的变化&#xff0c;这离不开以太网起到的重大作用&#xff0c;全球大部分地区的以太网交换机市场都出现了增长。 那么&#xff0c;平常我们所说的以太网交换机到底是什么&#xff1f;今天小扬给大家科普科普以太网交…

ModaHub魔搭社区:WinPlan经营大脑查询业务表单详情

查询业务表单详情 ●URL:https://open.shulead.com/api/schema/detail ●Method:POST 请求参数 WinPlan决策系统 算力 阿里云 腾讯云 AWS亚马逊 框架 业务数据基座 WinPlan垂直大模型 模型 分析模型 预测模型 决策模型 应用 精准预测

Java之API详解之Runtime的详细解析

3.1 概述 Runtime表示Java中运行时对象&#xff0c;可以获取到程序运行时设计到的一些信息 3.2 常见方法 常见方法介绍 我们要学习的Object类中的常见方法如下所示&#xff1a; public static Runtime getRuntime() //当前系统的运行环境对象 public void exit(int statu…

ssm+vue医院医患管理系统源码和论文

ssmvue医院医患管理系统源码和论文077 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm vue.js 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已…

尚硅谷宋红康MySQL笔记 14-18

是记录&#xff0c;不会太详细&#xff0c;受本人知识限制会有错误&#xff0c;会有个人的理解在里面 第14章 视图 了解一下&#xff0c;数据库的常见对象 对象描述表(TABLE)表是存储数据的逻辑单元&#xff0c;以行和列的形式存在&#xff0c;列就是字段&#xff0c;行就是记…

计算机毕设 基于机器学习与大数据的糖尿病预测

文章目录 1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE&#xff08;递归特征消除法&#xff09;4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重新进行…

vscode 对模型train、detect脚本进行Debug时配置参数

我们训练yolov5代码时&#xff0c;一般会配置一些参数&#xff0c;比如模型权重文件--weights, 模型的配置文件--cfg, 以及训练的数据--data, 对应的训练脚本为: 训练train python train.py -- weights ./yolov5s.pt --cfg models\yolov5s.yaml --data ./data/coco128.yaml…