因为我的本科毕业论文题目跟颜色迁移有关,我以后我会慢慢总结颜色迁移方面的算法与技术~~~~首先介绍下什么事颜色迁移。

颜色迁移是计算机视觉领域的一个很有趣的问题,它实际上要我们解决这么一个问题:基于图像A和图像B,合成一幅新的图像C,使其同时具有A的颜色和B的形状等遗传信息,即图像B在不改变它自身所表达的形状信息的情况下,学习了图像A的整体颜色基调,我们把这个过程称为图像的颜色迁移合成。其中图像A 称为颜色图像(源图像),图像B 称为形状图像(目的图像)。

在进行各种算法分析总结前,做好准备工作是必须的。先来总结下颜色迁移的必要基础知识——色彩空间及色彩空间的转换。

色彩空间

色彩空间是进行颜色信息研究的理论基础,它将颜色从人们的主观感受量化为具体的表达,为用计算机来记录和表现颜色提供了有力的依据。

一幅图像可以用不同的色彩空间表示,其视觉效果是相同的。但色彩空间的选取对图像的色彩迁移算法是否有效有很大的影响,选择一个合适的色彩空间能够保证色彩迁移结果的准确性。用于彩色图像处理的色彩空间必须同时具有独立性和均匀性。独立性是指色彩空间的三个分量互不影响,对其中某个分量的处理不会导致其它分量相对于人眼感觉发生变化;均匀性是指对色彩空间的每一个分量来说,相同数量的变化能够产生大约相同视觉重要性的变化。

色彩空间的表达形式是多样的,不同的色彩空间具有不同的特性,但因为不同的色彩空间是同构的,所以它们之间可以互相转换。

目前已发展的色彩空间非常多,如RGB,CIE XYZ,LMS,HSV,YCrCb,HSL,CMY(K),YUV,lαβ等。

下面主要介绍RGB色彩空间和lαβ色彩空间以及它们之间的转换。

RGB色彩空间

色彩混合的基本定律表明:自然界任何一种色彩均可用红、绿、蓝三种原色光混合产生,这在几何上能够以R、G、B三个互相垂直的轴所构成的空间坐标系统来表示,称为RGB色彩空间。如图1所示,RGB色系坐标中三维空间的三个轴分别于红、绿、蓝三基色相对应,原点对应黑色,离原点最远的顶点对应白色,而立方体内其余各点对应不同的颜色。RGB色彩系统用R、G、B三原色通过不同比例的混合来表示任一种色彩,因而它不能直观地度量色调、饱和度和亮度。而且,各分量之间存在着一定的相关性,它们在大多数情况下都是成正比的,主要表现为自然场景中若某一通道大,则像素的其他通道值也较大。这意味着,如果要对图像的色彩进行处理,常常需要对像素的三个分量同时进行修改才不会影响图像的真实感,这将大大增加颜色调整过程的复杂性。因此,在RGB色彩空间下进行色彩迁移会比较复杂,得到的视觉效果也不自然。

图1 RGB颜色空间

另外,RGB是与设备相关的色彩空间,即:不同的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同的色彩显示结果。

lαβ色彩空间

lαβ色彩空间是在LMS空间的基础上建立起来的。LMS空间三通道间的相关性很大。图2是Ruderman等人在一幅用LMS空间表示的图像中随机抽取1000个像素点生成的坐标关系图。从图中可以看出,L、M、S三个通道有很大的相关性,尤其是L与M之间。

图2 LMS色彩空间中L-M和L-S分布图

Buchsbaum等人对色彩迁移进行了研究,利用一些正交线性变换将人类视觉系统所能感受到的红、绿、蓝三色信号变换到三个不相关的色彩分量。在他们的研究基础上,Ruderman等人经过对大量的自然界图像进行颜色分布统计,得到了图像的颜色分布统计结果,并用转化色彩空间的方法形成一个统计意义上具有近似正交基的均匀色彩空间lαβ,并给出了简单的3×3矩阵运算实现RGB到lαβ空间的转化。lαβ色彩空间是基于数据驱动对人类感觉的研究,它假设人类的视觉系统理想地适应自然景色的处理,由亮度分量l,和两个色度分量α和β组成。其中,α表示黄一蓝通道(yellow—blue opponent),β表示红一绿通道(red—green opponent),见图3。

图3 lαβ色彩空间

Ruderman等人在一幅用lαβ色彩空间表示的图像中随机抽取1000个像素点,生成了图4所示的坐标关系图。从中可以看出,lαβ色彩空间不仅基本消除了颜色分量之间的强相关性,而且有效地将图像的灰度信息和颜色信息分离开来。所以可以分别对三个通道图像进行独立的运算,而不需要修改另外两个通道的信息,从而不会影响原图像的自然效果。

图4 lab空间l-a、l-b、a-b关系图

色彩空间的转换

色彩空间一方面要符合人眼的视觉感知特性,另一方面应方便图像的处理。图像色彩迁移的过程是一个改变图像颜色基调的过程,通常希望在改变图像的一个颜色属性时,不改变图像其它的颜色属性。由前面的介绍可知,RGB空间的三通道具有很强的相关性,而lαβ空间的各通道具有最小的相关性。所以,在lαβ空间对图像的颜色进行出来将会变得十分方便。因此,选择在lαβ空间进行图像间的色彩迁移,这就需要将图像从RGB空间转换到lαβ空间。

1.从RGB空间到lαβ空间的转换

需要进行3次变换,即RGB->CIEXYZ->LMS->lαβ,具体步骤如下:

1)从RGB空间到CIE XYZ空间的转换

2)从CIE XYZ空间到LMS空间的转换

通过1、2可以得到RGB空间到LMS空间的转换

由于数据在LMS空间比较分散,所以进一步将其转换到以10为底的对数空间,这样不仅使数据分布更加聚敛,而且符号人类对于颜色感觉的心理物理学研究结果。

3)从LMS空间到lαβ空间的转换

这一变换是基于对数据的主成分分析(PCA,Principal ComponentAnalysis)得到的,其中l为第一主成分,α为第二主成分,β为第三主成分。

经过这三个步骤就完成了从RGB空间到lαβ空间的转换。

色彩空间的逆转换

当图像在lαβ空间进行处理之后,为了显示处理的结果,需要把图像转换到RGB空间,具体步骤为:

1)从lαβ空间到LMS对数空间的转换

2)从LMS对数空间到LMS线性空间的转换

3)从LMS空间到RGB空间的转换

 添加上C/C++代码

void RgbToLab(BYTE R,BYTE G,BYTE B,double& l,double& a,double& b)
{double L = 0.3811*R + 0.5783*G + 0.0402*B;double M = 0.1967*R + 0.7244*G + 0.0782*B;double S = 0.0241*R + 0.1288*G + 0.8444*B;//若RGB值均为0,则LMS为0,防止数学错误log0if(L!=0) L = log(L)/log(10);if(M!=0) M = log(M)/log(10);if(S!=0) S = log(S)/log(10);l = (L + M + S)/sqrt(3);a = (L + M - 2*S)/sqrt(6);b = (L - M)/sqrt(2);}
void LabToRgb(double l,double a,double b,BYTE& R,BYTE& G,BYTE& B)
{l /= sqrt(3);a /= sqrt(6); b /= sqrt(2);double L = l + a + b;double M = l + a - b;double S = l - 2*a;L = pow(10,L);M = pow(10,M);S = pow(10,S);double dR = 4.4679*L - 3.5873*M + 0.1193*S;double dG = -1.2186*L + 2.3809*M - 0.1624*S;double dB = 0.0497*L - 0.2439*M + 1.2045*S;//防止溢出,若求得RGB值大于255则置为255,若小于0则置为0if (dR>255) R=255;else if (dR<0) R=0;else R = BYTE(dR);if (dG>255) G=255;else if (dG<0) G=0;else G = BYTE(dG);if (dB>255) B=255;else if (dB<0) B=0;else B = BYTE(dB);
}

代码链接

颜色迁移之一——基础知识(色彩空间及其转换)相关推荐

  1. 计算机基础知识 进制转换,计算机基础之进制转换详解

    进制转换是个老问题了,今天恰巧看见.我详细的去分析下它.留一笔吧 二进制的范围是(0-1), 不包含2 八进制的范围是(0-7) ,不包含8 十六进制的范围是(0-15) ,不包含16 先讲十进制-- ...

  2. 迁移学习基础知识整理

    目录 基本概念 迁移学习的价值 与传统机器学习的对比 迁移学习分类 迁移学习解决的方法 应用 基本概念 迁移学习研究如何把源域的知识迁移到目标域上. 相似性是核心,度量准则是重要手段. 领域(Doma ...

  3. ps导出gif颜色不对_PS基础知识(1)

    视图平移命令: 1,使用工具箱中的抓手工具或着(H) 2按住空格键,+上下左右移动视图.(常用方法) 图像格式 PSD:原始的图像文件,包含所有的 Photoshop 处理信息,如图层,文本,渲染效果 ...

  4. 计算机系统基础知识——进制转换(二进制、八进制、十进制、十六进制)

    前言:计算机系统中常用的进位数制有二进制.八进制.十进制.十六进制,对于任何一种进位数制,其表示的数都可以写成按权展开的 多项式. 1. 十进制与二进制的相互转换 1.1 十进制转二进制   十进制数 ...

  5. 迁移学习基础知识(一)——分类及应用

    适合入门:机器学习的明天--迁移学习 一.迁移学习分类: 按照目标域有无标签,迁移学习可以分为监督迁移学习,半监督迁移学习,无监督迁移学习: 按照学习方法分类,迁移学习可以分为基于样本的迁移学习方法( ...

  6. 计算机视觉基础-图像色彩空间转换

    Task03 Opencv框架实现色彩空间转换 一.前言 二.几种常用彩色模型 2.1彩色空间概念 2.2RGB 2.3CMYK 2.4YUV 2.5YCbCr 2.6HSV 2.7HSI 2.8La ...

  7. 基础知识(一),ip地址详解、网关、DNS、进制转换、DOS命令、批处理、用户和组管理、telnet、RDP、NTFS、CIFS

    基础知识: 企业 >enterprise 专业 >profession 服务器 >server 客户端 >client 浏览器 >Browser B/S 架构:服务器对应 ...

  8. decimal转换为int_FPGA基础知识极简教程(10)二进制到BCD转换算法

    写在前面 正文 快速认识 实现方式一 实现方式二 写在最后 写在前面 FPGA基础知识极简教程(9)[1]讲到了七段数码管的显示Verilog设计,我们都知道,要在数码管上显示的数字,使用BCD编码是 ...

  9. 数字电路基础知识——格雷码和二进制码的转换的算法和Verilog实现

    数字电路基础知识--格雷码和二进制码的转换的算法和Verilog实现 关于数字电路中的码制问题在这篇博客中已经做了详细分析, 数字电路基础知识--数字IC中的进制问题(原码,反码,补码以及各进制的转换 ...

最新文章

  1. 挨踢项目求生法则-团队建设篇
  2. python编码规范手册-python 编码规范整理
  3. Spring框架中的9种设计模式汇总
  4. Java基础之static关键字的用法
  5. 使用MVC模式制作游戏-教程和简介
  6. 搜狗浏览器打不开网页怎么办
  7. memory php 变量,php入门-变量
  8. 朋友易得 ,知已难求
  9. Response.Clear() Response.ClearContent()和Response.ClearHeaders()之间的区别
  10. 2021招生之友+录取统计_电子版免费分享
  11. 包误差率(PER)与BER相关
  12. 数据分析训练营-pandas
  13. xtraReport的简易使用方法
  14. Linux下创建和删除用户
  15. 单相全桥逆变原理及仿真实验
  16. Activiti 学习笔记八:排他网关(ExclusiveGateWay)
  17. 龙之信条服务器维护,不只是重启!《龙之信条:黑暗觉者》常见问题解决方案...
  18. Task02 python与excel
  19. Unity3d轻量渲染管线(LWRP)民间文档
  20. linux基础01-ip与网卡

热门文章

  1. 深度学习 计算机视觉中的注意力机制
  2. 手写实现数据库连接池
  3. iMAC——全新重装Mac系统
  4. NS3中“E: package ‘gnuplot‘ has no installation candidate”问题解决方案
  5. 山东大学项目实训十六——可控音乐变压器Controllable Music Transformer
  6. 你知道路由器,但是你知道交换机吗?
  7. 计算机网络第五弹——运输层
  8. jsp页面获取到后台的cookie(记住我)
  9. 初创企业融资发展的几个阶段
  10. C# 使用 NPOI 处理Excel导入单元格内容是公式问题