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

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.mfbz.cn/a/94081.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

秒杀系统的业务流程以及优化方案(实现异步秒杀)

先看基本的业务流程 那么我们可以看到整个流程都是一个线程来完成的,这样的话耗时还是很长的,那么可不可以采用多线程去实现呢? 首先我们要思考怎么对业务进行拆分,可以想象一个我们去饭店点餐,会有前台接待&#xff…

使用ChatGPT一键生成思维导图

指令1:接下来你回复的所有内容,都放到Markdown代码框中。 指令2:作为一个Docker专家,为我编写一个详细全面的Docker学习大纲,包括基础知识、进阶知识、项目实践案例,学习书籍推荐、学习网站推荐等&#xf…

curl --resolve参数的作用

之所以会有这样的操作,是因为域名一般对应的都是一个反向代理,直接请求域名,反向代理会将流量随机选一台机器打过去,而无法确保所有的机器都可用。所以直接用ip。 在 curl 命令中,--resolve 参数用于指定自定义的主机名…

业务系统架构实践总结

我从2015年起至今2022年,在业务平台(结算、订购、资金)、集团财务平台(应收应付、账务核算、财资、财务分析、预算)、本地生活财务平台(发票、结算、预算、核算、稽核)所经历的业务系统研发实践…

pycharm添加虚拟环境以及虚拟环境安装pytorch

file、settings、interpreter、add interpreter、add local interpreter 记住不要勾选inherit,不然会把主环境的东西继承到虚拟环境。 创建前可以先点existing看看有没有已经建好的虚拟环境 有的时候pycharm有问题,创建了虚拟环境没有显示。找一个.py文…

嵌入式底层驱动需要知道的基本知识

先说结论,能,肯定能,必须能! 但是,问题重点在于坚持,程序员这一行 ,下班回家一般都要10点了,再刷两个小时枯燥的学习视频,我想大多数人是坚持不下来的。 但是&#xff…

vue3+ts+uniapp小程序端自定义日期选择器基于内置组件picker-view + 扩展组件 Popup 实现自定义日期选择及其他选择

vue3ts 基于内置组件picker-view 扩展组件 Popup 实现自定义日期选择及其他选择 vue3tsuniapp小程序端自定义日期选择器 1.先上效果图2.代码展示2.1 组件2.2 公共方法处理日期2.3 使用组件 3.注意事项3.1refSelectDialog3.1 backgroundColor"#fff" 圆角问题 自我记…

计算机视觉 – Computer Vision | CV

计算机视觉为什么重要? 人的大脑皮层, 有差不多 70% 都是在处理视觉信息。 是人类获取信息最主要的渠道,没有之一。 在网络世界,照片和视频(图像的集合)也正在发生爆炸式的增长! 下图是网络上…

Spring MVC 学习总结

学习目标 了解 Spring MVC 是什么,为什么要使用它或者说它能解决什么问题,其与 Spring 是什么关系。理解为什么配置 Spring MVC 的前端控制器的映射路径为 “/” 会导致静态资源访问不了,掌握怎么处理这个问题。掌握基于注解方式使用 Spring…

Spring MVC 四:Context层级

这一节我们来回答上篇文章中避而不谈的有关什么是RootApplicationContext的问题。 这就需要引入Spring MVC的有关Context Hierarchy的问题。Context Hierarchy意思就是Context层级,既然说到Context层级,说明在Spring MVC项目中,可能存在不止…

vue2项目中表格的增删查改

我们在项目中经常会用到对于表格的增删查改操作,以下使用vue2elementui来实现表格的增删查改 表格的基本属性 基础表格如下:(其中需要注意的是当el-table元素中注入data对象数组后,在el-table-column中用prop属性来对应对象中的键名即可填入数据&#x…

window下jdk安装及更换jdk版本的一些问题。

目录 jdk安装jdk的选择。oracle的jdk怎么安装。openjdk怎么安装。 jdk的版本控制。更换jdk的一些问题。 jdk安装 jdk的选择。 目前有两种可选的jdk,oracle的和开源的Openjdk,这两种jdk的区别可以自行查阅,就结果而言,openjdk开源…

java: 无法访问org.springframework.boot.SpringApplication 错误的类文件

项目场景: 提示:这里简述项目相关背景: 错误1: java: 无法访问org.springframework.boot.SpringApplication 错误的类文件: /D:/Software/env-java/apache-maven-3.6.1/repository/org/springframework/boot/spring-boot/3.1.2/sp…

URI和URL和URN区别

URI、URL 和 URN 是一系列从不同角度来看待资源标识和定位的概念。虽然它们有一些重叠,但每个概念都强调了不同的方面。 URI(Uniform Resource Identifier):URI 是一个通用的术语,用于标识和定位资源。它是一个抽象的概…

c#写的端口监听,程序退出后,再次运行提示端口占用,且进程不存在

我用c#写了一个监听29999端口,进程结束后再次启动发现端口被占用,但是运行netstat -ano | findstr 29999找到进程ID后,却没有这个进程 经查询这个监听29999进程虽然没了,但是要找到他的父进程,把父进程关闭了才可以,参…

代码随想录算法训练营第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 文档讲解 : 代码随想录 - 198.打家劫舍 状态:再次回顾。 动态规划五部曲: 确定dp数组(dp table)以及下标的含义 dp[i]的定义为:考虑下标i(包括i)以内的房屋&#xff0c…

第十二届中国PMO大会在京成功召开

8月12-13日,由PMO评论主办,以“拥抱变革 展现PMO力量”为主题的第十二届中国PMO大会在京成功召开。全国项目管理标准化技术委员会俞彪秘书长、《项目管理技术》杂志张星明主编莅临大会并致开幕词,53位来自知名企业的PMO实践精英及业内专家做了…

ffmpeg windows环境MinGW+msys2编译so库

一、安装MinGW 1.1、下载MinGW 1.2、下载完成后,会得到一个名为 mingw-get-setup.exe 的安装包,双击打开它,可以看到如下的对话框: 1.3、直接点击“Install”,进入下面的对话框 1.4、可根据自己操作系统的实际情况&am…

权限提升-数据库提权-MSF-UDF提权

权限提升基础信息 1、具体有哪些权限需要我们了解掌握的? 后台权限,网站权限,数据库权限,接口权限,系统权限,域控权限等 2、以上常见权限获取方法简要归类说明? 后台权限:SQL注入,数…

skywalking agent监控java服务

一、前言 skywalking agent可以监控的服务类型有多种,python、go、java、nodejs服务等都可以监控,现在通过java服务来演示skywalking agent的使用,并且是使用容器的方式实现 二、部署skywalking agent监控 需要注意,skywalking…