[论文阅读] 颜色迁移-Correlated Color Space

文章: Color transfer in correlated color space, [paper], [matlab code], [opencv code]

1-算法原理

本文算法比较简单, 其原理是把原始图像本身的空间分布进行归一化, 然后通过旋转平移缩放等变换, 变换到目标图像的空间分布, 如下所示:

\[I = T_t \cdot R_t \cdot S_t \cdot S_t \cdot S_s \cdot R_s \cdot T_s \cdot I_s \tag{1}
\]

T表示平移, R表示旋转, S表示缩放. 下标t表示目标图像, 下标s表示原始图像, 文中的原始公式存在问题, 我这里进行了调整.

因而本文就是寻找这个变换矩阵, 使用的方法是使用SVD分解(关于SVD算法, 可以戳这里: 奇异值分解(SVD) - 知乎 (zhihu.com).)

\[Cov = U \cdot \Lambda \cdot V^T
\]

具体地, 本文算法步骤为:

  1. 计算图像每个颜色通道的均值, 及图像的协方差矩阵
  2. 对协方差矩阵进行SVD分解
  3. 构建变换需要的矩阵
  4. 使用公式对图像进行颜色迁移

2-算法核心

对于n维颜色空间, 为了方便处理, 可以调整为n+1维的齐次坐标标示. 对于本文, 使用的是RGB 3维颜色空间, 齐次坐标维4维的.

对于上述几个变换矩阵, 平移矩阵T很容易想到, 可以使用各颜色通道的均值来表示. 但对于旋转矩阵R和缩放矩阵S就需要用到SVD分解矩阵的性质了: \(U\) 表示旋转, \(\Lambda\) 表示缩放拉伸.

因而所需变换矩阵如下:

\[\Lambda = diag(\lambda^{c1}, \lambda^{c2}, \lambda^{c3})
\]
\[T_s =
\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}
\]
\[R_s = U_s^{-1}, R_t = U_t
\]
\[S_s =
\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个通道一起处理, 如果每个通道单独处理, 上述公式可以等效为:

\[C^i = \frac{\sigma_t^{i}}{\sigma_s^{i}}(C_s^{i} - \mu_s^{i}) + \mu_t^{i}
\]

式中, i表示通道.

3-算法效果

如下所示为文中给出的一组结果:

4-补充说明

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

可以看到, 结果出现了异常. 作者给出的分析是:

  • SVD生成的\(\Lambda\) 矩阵中对角线上的值, 是由特征值从大到小排列的, 源图像和目标图像的这个排列可能不匹配
  • 如源图像排列为c1, c2, c3, 目标图像排列为c2, c1, c3
  • 即使排列相同, 它们的方向可能相反, 如目标图像排列为c1, -c2, c3

针对这个问题, 作者代码实现中给出了解决方案, 进行列匹配(matchColumns):

  1. 对旋转矩阵\(U_t\) 的所有列进行排列组合, 与\(U_s\) 对应的列求点积和
  2. 找到和最大的一个组合为最优匹配
  3. 根据组合中坐标轴的顺序, 对\(\Lambda_t\) 的顺序进行调整, 同时调整方向

下面是调整后的结果:

[论文阅读] 颜色迁移-Correlated Color Space的更多相关文章

  1. YOLO: You Only Look Once论文阅读摘要

    论文链接: https://arxiv.org/pdf/1506.02640.pdf 代码下载: https://github.com/gliese581gg/YOLO_tensorflow Abst ...

  2. python opencv 实现Reinhard颜色迁移算法

    Reinhard颜色迁移算法的过程很简单,流程如下,细节部分见原文,题目为color transfer between images: 将参考图片和目标图片转换到LAB空间下 得到参考图片和目标图片的 ...

  3. 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

    今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...

  4. 论文阅读笔记 Improved Word Representation Learning with Sememes

    论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...

  5. Unity Lighting - Choosing a Color Space 选择色彩空间(四)

      Choosing a Color Space 选择色彩空间 In addition to selecting a rendering path, it’s important to choose ...

  6. 【计算机视觉】Selective Search for Object Recognition论文阅读2

    Selective Search for Object Recognition 是J.R.R. Uijlings发表在2012 IJCV上的一篇文章.主要介绍了选择性搜索(Selective Sear ...

  7. Learning to See in the Dark论文阅读笔记

    这是一篇图像增强的论文,作者创建了一个数据集合,和以往的问题不同,作者的创建的see in the dark(SID)数据集合是在极其暗的光照下拍摄的,这个点可以作为一个很大的contribution ...

  8. Color Space 和 Color Range

    颜色有两个属性Color Range和Color Space 有关Color Space的解释可以看下面两个链接: https://www.jianshu.com/p/facdbab5ac20 htt ...

  9. BERT 论文阅读笔记

    BERT 论文阅读 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 由 @快刀切草莓君 ...

  10. Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读

    Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读 Action4D: Online Action Recognition in the Crowd and Clutter 论文链接 ...

随机推荐

  1. 开源 Web 相册程序: Photoview 和数据可视化生成工具:Datawrapper

    Photoview Photoview是一个开源 Web 相册程序,Go 语言写的,使用 Docker 安装,可以用来快速架设个人相册. github地址:https://github.com/pho ...

  2. Service概述

    为何需要 Service Kubernetes 中 Pod 是随时可以消亡的(节点故障.容器内应用程序错误等原因).如果使用 Deployment 运行您的应用程序,Deployment 将会在 Po ...

  3. frps服务端与nginx可共用443端口

    转载自: https://www.ioiox.com/archives/78.html frps服务器上的nginx frps.ini配置 由于nginx占用80/443端口,frps.ini中的 v ...

  4. 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+ ...

  5. 2022.9.30 Java第四次课后总结

    1.public class BoxAndUnbox { /** * @param args */ public static void main(String[] args) { int value ...

  6. Upscayl,免费开源的 AI 图像增强软件

    有的时候我们找遍了全网却难以找到一张模糊图片的原图,这时候我们想如果能够一键将图片变成高清的就好了.其实这正是计算机视觉的一大研究反向--图形增强,通过AI计算将模糊的图片增强,将几百kb的低像素图片 ...

  7. String内建函数

    int length():返回字符串的长度: return value.lengthchar charAt(int index): 返回某索引处的字符return value[index]boolea ...

  8. vulnhub靶场之EMPIRE

    准备: 攻击机:虚拟机kali.本机win10. 靶机:EMPIRE: BREAKOUT,地址我这里设置的桥接,下载地址:https://download.vulnhub.com/empire/02- ...

  9. Mybatis组件介绍

    核心组件 SqlSessionFactoryBuilder SqlSessionFactoryBuilder的作用就是通过XML或者Java代码来建造一个工厂(SqlSessionFactory),并 ...

  10. 八、docker compose容器编排

    一. Docker-Compose 1.1. 什么是Docker Compose Compose 项目是 Docker 官方的开源项目,负责实现 Docker 容器集群的快速编排,开源代码在 http ...