[论文阅读] 颜色迁移-Correlated Color Space
[论文阅读] 颜色迁移-Correlated Color Space
文章: Color transfer in correlated color space, [paper], [matlab code], [opencv code]
1-算法原理
本文算法比较简单, 其原理是把原始图像本身的空间分布进行归一化, 然后通过旋转平移缩放等变换, 变换到目标图像的空间分布, 如下所示:
\]
T表示平移, R表示旋转, S表示缩放. 下标t表示目标图像, 下标s表示原始图像, 文中的原始公式存在问题, 我这里进行了调整.
因而本文就是寻找这个变换矩阵, 使用的方法是使用SVD分解(关于SVD算法, 可以戳这里: 奇异值分解(SVD) - 知乎 (zhihu.com).)
\]
具体地, 本文算法步骤为:
- 计算图像每个颜色通道的均值, 及图像的协方差矩阵
- 对协方差矩阵进行SVD分解
- 构建变换需要的矩阵
- 使用公式对图像进行颜色迁移
2-算法核心
对于n维颜色空间, 为了方便处理, 可以调整为n+1维的齐次坐标标示. 对于本文, 使用的是RGB 3维颜色空间, 齐次坐标维4维的.
对于上述几个变换矩阵, 平移矩阵T很容易想到, 可以使用各颜色通道的均值来表示. 但对于旋转矩阵R和缩放矩阵S就需要用到SVD分解矩阵的性质了: \(U\) 表示旋转, \(\Lambda\) 表示缩放拉伸.
因而所需变换矩阵如下:
\]
\begin{pmatrix}
1 & 0 & 0 & -m_s^{c1} \\
0 & 1 & 0 & -m_s^{c2} \\
0 & 0 & 1 & -m_s^{c3} \\
0 & 0 & 0 &1
\end{pmatrix} ,
T_t =
\begin{pmatrix}
1 & 0 & 0 & m_t^{c1} \\
0 & 1 & 0 & m_t^{c2} \\
0 & 0 & 1 & m_t^{c3} \\
0 & 0 & 0 &1
\end{pmatrix}
\]
\]
\begin{pmatrix}
1/s_s^{c1} & 0 & 0 & 0 \\
0 & 1/s_s^{c2} & 0 & 0 \\
0 & 0 & 1/s_s^{c3} & 0 \\
0 & 0 & 0 &1
\end{pmatrix} ,
S_t =
\begin{pmatrix}
s_t^{c1} & 0 & 0 & 0 \\
0 & s_t^{c2} & 0 & 0 \\
0 & 0 & s_t^{c3} & 0 \\
0 & 0 & 0 &1
\end{pmatrix} ,
\]
式中, ci表示颜色通道, \(s^{ci}=\sqrt{\lambda^{ci}}\). 这里取了根号, 如果不取根号是不是也可以???
本文算法是对3个通道一起处理, 如果每个通道单独处理, 上述公式可以等效为:
\]
式中, i表示通道.
3-算法效果
如下所示为文中给出的一组结果:

4-补充说明
作者在自己给出的matlab代码中指出了本文算法存在的一个问题, 我们先来看看实际的情况, 如下所示为一组图像的测试结果.

可以看到, 结果出现了异常. 作者给出的分析是:
- SVD生成的\(\Lambda\) 矩阵中对角线上的值, 是由特征值从大到小排列的, 源图像和目标图像的这个排列可能不匹配
- 如源图像排列为c1, c2, c3, 目标图像排列为c2, c1, c3
- 即使排列相同, 它们的方向可能相反, 如目标图像排列为c1, -c2, c3
针对这个问题, 作者代码实现中给出了解决方案, 进行列匹配(matchColumns):
- 对旋转矩阵\(U_t\) 的所有列进行排列组合, 与\(U_s\) 对应的列求点积和
- 找到和最大的一个组合为最优匹配
- 根据组合中坐标轴的顺序, 对\(\Lambda_t\) 的顺序进行调整, 同时调整方向
下面是调整后的结果:

[论文阅读] 颜色迁移-Correlated Color Space的更多相关文章
- YOLO: You Only Look Once论文阅读摘要
论文链接: https://arxiv.org/pdf/1506.02640.pdf 代码下载: https://github.com/gliese581gg/YOLO_tensorflow Abst ...
- python opencv 实现Reinhard颜色迁移算法
Reinhard颜色迁移算法的过程很简单,流程如下,细节部分见原文,题目为color transfer between images: 将参考图片和目标图片转换到LAB空间下 得到参考图片和目标图片的 ...
- 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)
今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...
- 论文阅读笔记 Improved Word Representation Learning with Sememes
论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...
- Unity Lighting - Choosing a Color Space 选择色彩空间(四)
Choosing a Color Space 选择色彩空间 In addition to selecting a rendering path, it’s important to choose ...
- 【计算机视觉】Selective Search for Object Recognition论文阅读2
Selective Search for Object Recognition 是J.R.R. Uijlings发表在2012 IJCV上的一篇文章.主要介绍了选择性搜索(Selective Sear ...
- Learning to See in the Dark论文阅读笔记
这是一篇图像增强的论文,作者创建了一个数据集合,和以往的问题不同,作者的创建的see in the dark(SID)数据集合是在极其暗的光照下拍摄的,这个点可以作为一个很大的contribution ...
- Color Space 和 Color Range
颜色有两个属性Color Range和Color Space 有关Color Space的解释可以看下面两个链接: https://www.jianshu.com/p/facdbab5ac20 htt ...
- BERT 论文阅读笔记
BERT 论文阅读 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 由 @快刀切草莓君 ...
- Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读
Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读 Action4D: Online Action Recognition in the Crowd and Clutter 论文链接 ...
随机推荐
- 开源 Web 相册程序: Photoview 和数据可视化生成工具:Datawrapper
Photoview Photoview是一个开源 Web 相册程序,Go 语言写的,使用 Docker 安装,可以用来快速架设个人相册. github地址:https://github.com/pho ...
- Service概述
为何需要 Service Kubernetes 中 Pod 是随时可以消亡的(节点故障.容器内应用程序错误等原因).如果使用 Deployment 运行您的应用程序,Deployment 将会在 Po ...
- frps服务端与nginx可共用443端口
转载自: https://www.ioiox.com/archives/78.html frps服务器上的nginx frps.ini配置 由于nginx占用80/443端口,frps.ini中的 v ...
- PAT (Basic Level) Practice 1022 D进制的A+B 分数 20
输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. 输出格式: 输出 A+ ...
- 2022.9.30 Java第四次课后总结
1.public class BoxAndUnbox { /** * @param args */ public static void main(String[] args) { int value ...
- Upscayl,免费开源的 AI 图像增强软件
有的时候我们找遍了全网却难以找到一张模糊图片的原图,这时候我们想如果能够一键将图片变成高清的就好了.其实这正是计算机视觉的一大研究反向--图形增强,通过AI计算将模糊的图片增强,将几百kb的低像素图片 ...
- String内建函数
int length():返回字符串的长度: return value.lengthchar charAt(int index): 返回某索引处的字符return value[index]boolea ...
- vulnhub靶场之EMPIRE
准备: 攻击机:虚拟机kali.本机win10. 靶机:EMPIRE: BREAKOUT,地址我这里设置的桥接,下载地址:https://download.vulnhub.com/empire/02- ...
- Mybatis组件介绍
核心组件 SqlSessionFactoryBuilder SqlSessionFactoryBuilder的作用就是通过XML或者Java代码来建造一个工厂(SqlSessionFactory),并 ...
- 八、docker compose容器编排
一. Docker-Compose 1.1. 什么是Docker Compose Compose 项目是 Docker 官方的开源项目,负责实现 Docker 容器集群的快速编排,开源代码在 http ...