当前位置: 首页 > news >正文

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
参考头条号:人工智能研究所
微信中复制如下链接,发送到文件传输助手,打开,免费体验chatgpthttps://wx2.expostar.cn/qz/pages/manor/index?id=1137&share_from_id=79482&sid=24

 动画详解transformer

 

http://www.lryc.cn/news/143702.html

相关文章:

  • HTML之VSCode简单配置与创建
  • 2023亿发一体化新零售POS收银解决方案,打造连锁门店经营新未来
  • Android ---使用Jenkins 打包release版本不能安装或者安装后不显示APP
  • 【Spring】什么是 AOP(面向切面编程) ? 为什么要有 AOP ? 如何实现 Spring AOP ?
  • 11.并发:自旋锁
  • 使用EF Core更新与修改生产数据库
  • 法律小程序开发:让法律咨询更便捷
  • 【C++多线程】C++11互斥锁和条件变量实现生产者消费者模型
  • Webpack迁移Vite采坑指南
  • 设计模式-职责链模式
  • CMake学习笔记-VSCode使用Cmake编译C++工程
  • redis相关
  • 【VRTK4.0运动专题】轴移动AxisMove(真实身体的移动)
  • 【vue2-helper插件】提供Mixins和组件库相关的类型提示、智能补全、跳转等功能~
  • 论文解读 | ScanNet:室内场景的丰富注释3D重建
  • 手写数字识别之网络结构
  • 《动手深度学习》 线性回归从零开始实现实例
  • Redis 命令
  • Linux网络编程:线程池并发服务器 _UDP客户端和服务器_本地和网络套接字
  • nvm安装electron开发与编译环境
  • 玩转Mysql系列 - 第7篇:玩转select条件查询,避免采坑
  • 启动程序结束程序打开指定网页
  • 从零开始学习 Java:简单易懂的入门指南之包装类(十九)
  • leetcode分类刷题:哈希表(Hash Table)(一、数组交集问题)
  • UML四大关系
  • forms组件(钩子函数(局部钩子、全局钩子)、三种页面的渲染方式、数据校验的使用)、form组件的参数以及单选多选形式
  • 跨专业申请成功|金融公司经理赴美国密苏里大学访学交流
  • 第十一章 CUDA的NMS算子实战篇(下篇)
  • R语言01-数据类型
  • 【网络基础实战之路】基于三层架构实现一个企业内网搭建的实战详解