[论文阅读] 颜色迁移-Linear Monge-Kantorovitch(MKL)

news2024/12/23 12:53:08

[论文阅读] 颜色迁移-Linear Monge-Kantorovitch(MKL)

文章: The Linear Monge-Kantorovitch Linear Colour Mapping for Example-Based Colour Transfer, [paper], [matlab代码]

1-算法原理

本文将颜色迁移变成数据分布的转换问题, 因而本文需要解决2个方面的问题, 如何描述图像颜色分布, 二是如何对数据分布进行变换.

对于数据分布, 本文使用均值和协方差来对数据分布进行描述, 对于分布变换, 本文使用线性变换进行处理.

数据的均值和协方差比较简单, 因而本文的重点在于寻找变换方法. 本文使用的线性变换如下所示:

{ t ( u ) = T ( u − μ u ) + μ v T Σ u T T = Σ v (5) \left\{\begin{array}{l} t(u)=T\left(u-\mu_u\right)+\mu_v \\ T \Sigma_u T^T=\Sigma_v \tag{5} \end{array}\right. {t(u)=T(uμu)+μvTΣuTT=Σv(5)

式中, u u u 为原始图像, v v v 为目标图像, μ \mu μ 为均值, Σ \Sigma Σ 为协方差, T T T 为需要求解的线性变换.

Σ u = A A T \Sigma_u = AA^T Σu=AAT , Σ v = B B T \Sigma_v = BB^T Σv=BBT, 则

T ( A A T ) T T = B B T ( T A ) ( T A ) T = B B T T A = B T = B A − 1 T(AA^T)T^T = BB^T \\ (TA)(TA)^T = BB^T \\ TA = B \\ T = BA^{-1} T(AAT)TT=BBT(TA)(TA)T=BBTTA=BT=BA1

只要知道了A和B即可知道线性变换T.

2-算法核心

本文的核心就是寻找A和B. 文中主要使用的方法是矩阵分解, 介绍了几种方法.

2.1-Independent Transfer(IT)

首先介绍的是每个通道单独进行转换时, 协方差变成了对角矩阵, 对角元素为每个通道的方差的平方根, 这样变换公式为:

T = ( var ⁡ ( v 1 ) var ⁡ ( u 1 ) 0 0 ⋱ var ⁡ ( v N ) var ⁡ ( u N ) ) (11) T=\left(\begin{array}{ccc} \sqrt{\frac{\operatorname{var}\left(v_1\right)}{\operatorname{var}\left(u_1\right)}} & & 0 \\ 0 & \ddots & \\ \tag{11} & & \sqrt{\frac{\operatorname{var}\left(v_N\right)}{\operatorname{var}\left(u_N\right)}} \end{array}\right) T=var(u1)var(v1) 00var(uN)var(vN) (11)

这种变换方式可以使用如下公式等价, 即为 Color transfer between images 中描述的方法

C i = σ t i σ s i ( C s i − μ s i ) + μ t i C^i = \frac{\sigma_t^{i}}{\sigma_s^{i}}(C_s^{i} - \mu_s^{i}) + \mu_t^{i} Ci=σsiσti(Csiμsi)+μti

式中, i为通道, s表示源图像, t表示目标图像. 这种方法需要假设图像各颜色通道分布是独立可分离的, 但实际情况可能不满足这种情况, 因而实际效果可能不好. 需要先将图像转换到不相关的颜色空间, 一般在Lab颜色空间效果较好.

rgb和lab空间结果比较
上图中, 依次为原始图像, 参考图像, rgb空间结果, lab空间结果.

2.2-Cholesky Decomposition(CD)

关于 Cholesky Decomposition 可以参考:

  1. 三十分钟理解:矩阵Cholesky分解,及其在求解线性方程组、矩阵逆的应用_大饼博士X的博客-CSDN博客_cholesky分解法求解线性方程组
  2. Cholesky分解 - 知乎 (zhihu.com)

Cholesky Decomposition 可以将矩阵分解为 A = L L T A=LL^T A=LLT 形式, 这样变换公式为:

T = L v L u − 1 (12) T = L_vL_u^{-1} \tag{12} T=LvLu1(12)

文中说这种方法对于通道的顺序有一定的要求, 不同的颜色通道顺序结果不一样, 如RGB与BGR的结果很有可能不一样.

rgb和bgr结果比较
上图中, 依次为原始图像, 参考图像, rgb结果, bgr空间结果.

2.3-Square Root Decomposition(SRD)

这种方法是对 Cholesky Decomposition 方法的一种改进, 分解公式为:

Σ u = P u T D u P u , Σ u 1 / 2 = P u T D u 1 / 2 P u Σ v = P v T D v P v , Σ v 1 / 2 = P v T D v 1 / 2 P v \Sigma_u = P_u^T D_u P_u, \Sigma_u^{1/2} = P_u^T D_u^{1/2} P_u \\ \Sigma_v = P_v^T D_v P_v, \Sigma_v^{1/2} = P_v^T D_v^{1/2} P_v Σu=PuTDuPu,Σu1/2=PuTDu1/2PuΣv=PvTDvPv,Σv1/2=PvTDv1/2Pv

这样变换公式为:

T = Σ v 1 / 2 Σ u − 1 / 2 (15) T = \Sigma_v^{1/2}\Sigma_u^{-1/2} \tag{15} T=Σv1/2Σu1/2(15)

Square Root Decomposition 分解后, D为特征值的对角矩阵, 特征值从大到小排列, 可以实现主方向对齐, 类似PCA处理, 可以减少对颜色通道顺序的依赖, 这样在不同的颜色空间下结果类似.

这种矩阵分解的方法可能的问题是, 局部出现颜色变化不一致的问题, 应该是与 [论文阅读] 颜色迁移-Correlated Color Space 中描述的问题一样.

SRD结果
上图中, 依次为原始图像, 参考图像, SRD结果.

2.4-Linear Monge-Kantorovitch(MKL)

将分布变换的问题转换为最优传输的问题, 关于 Monge-Kantorovitch 可以参考: 最优传输–Monge-Kantorovich理论_asforking的博客-CSDN博客

这样变换公式为:

T = Σ u − 1 / 2 ( Σ u 1 / 2 Σ v Σ u 1 / 2 ) Σ u − 1 / 2 (25) T = \Sigma_u^{-1/2}(\Sigma_u^{1/2}\Sigma_v\Sigma_u^{1/2})\Sigma_u^{-1/2} \tag{25} T=Σu1/2(Σu1/2ΣvΣu1/2)Σu1/2(25)

这个算法在 Square Root Decomposition 基础上进一步进行了改进, 对变换进一步约束了位移, 这样可以最小化颜色的变化.

regrain结果
上图中, 依次为原始图像, 参考图像, regrain结果.

3-参考

  1. The Linear Monge-Kantorovitch Linear Colour Mapping for Example-Based Colour Transfer 论文理解_玉兔金兔的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kettle BIGNUMBER TIMESTAMP 类型格式处理

一、问题描述 Kettle默认的格式化处理对BIGNUMBER列 ,把0 会强行写成0.0;对TIMESTAMP列强行写成如2021/12/31 16:51:55.000000000格式。从而引起不必要错误。 二、解决方案 最新的Kettle下载地址:https://udomain.dl.sourceforge.net/project/pentaho/Pentaho-9.3/client…

算法常见技巧 -快速幂及其相关应用

快速幂 题目 快速幂 典型题例: 给定 n 组 aia_iai​, bib_ibi​, pip_ipi​,对于每组数据,求出 aiba_i^baib​ modmodmod pip_ipi​的值。 示例 : 2 3 2 5 4 3 9思路 代码: /* 核心思路:反复平方法 …

【大数据入门核心技术-Hadoop】Hadoop非高可用集群搭建

目录 目录 一、Hadoop部署的三种方式 1、Standalone mode(独立模式) 2、Pseudo-Distributed mode(伪分布式模式) 3、Cluster mode(集群模式) 二、准备工作 1、/etc/hosts 2、关闭防火墙和禁用swap交…

计算机软考高项(信息系统项目管理师)、中项(系统集成项目管理工程师),统计师中级的一些备考经验

软考高项及中项 对于因各种原因需要拿工程系列职称的朋友,计算机软考高项和中项可能是性价比最高的副高级职称和中级职称,没有学历和工作经验的要求,是水平考试,即可以跳过初级、中级,直接考高级,也可以考…

[附源码]JAVA毕业设计九宫格日志网站(系统+LW)

[附源码]JAVA毕业设计九宫格日志网站(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&a…

# 智慧社区管理系统-核心信息管理-02物业收费管理

一 后端 1:entity package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class PropertyInfo {private int id;private int typeId;private Doub…

制作php的composer包

目录 1、初始化包 2、将代码推送到github远程仓库 3、为写好扩展包打上tag标签标记当前代码版本 4、将包发布到包管理平台 初始化包,生成 创建配置文件composer.json composer init composer init 按照引导就可以生成了 , 详细的引导解释如下 This command wil…

计算机图形学中的曲线问题——拉格朗日插值曲线绘制实践

拉格朗日插值曲线的绘制 限于篇幅,我们将在这篇文章中介绍拉格朗日插值曲线绘制实践,主文章链接: GGN_2015 计算机图形学中的曲线问题 在主文章中我们已经介绍了拉格朗日插值函数的绘制方法。给定一个函数必须通过的点的集合,保证…

学习spring源码的意义是什么呢?有什么高效的源码学习方式吗?

这不是准备跳槽了,所以最近摸鱼比较多一些,老大默许了,我觉得我老大还是很好的。也在网上看了一些资料,但是,我发现很多讲解注解的时候,对于一些可以直接点击源码查看的内容讲解的占多数,但是授…

【学习笔记】《Python深度学习》第六章:深度学习用于文本和序列

文章目录1 处理文本数据1.1 单词和字符的one-hot编码1.2 使用词嵌入1.3 从原始文本到词嵌入2 循环神经网络2.1 Keras中的循环层2.2 LSTM层和GRU层2.3 实例:使用 LSTM 进行 IMDB 电影评论分类3 循环神经网络的高级用法3.1 温度预测问题3.2 准备数据3.3 基于常识、非机…

eclipse导入svn项目,项目有红色的感叹号/叉号

eclipse导入svn项目,项目左下角有红色的感叹号/叉号 1.首先调出Problems ( window -> show view-> Problems ) 查看报错信息 其次,看看Project是否开启了项目自动构建(Build Automatically) 2.根据报错信息逐一解决 3.…

【Linux内核代码分析1】Linux时间子系统及HRTIMER实现

Linux时间子系统软件架构 (1)嵌入式设备需要较好的电源管理策略。传统的linux会有一个周期性的时钟,即便是系统无事可做的时候也要醒来,这样导致系统不断的从低功耗(idle)状态进入高功耗的状态。这样的设计…

从 Nauty 数据结构出发认识群论

在阅读本文前,强烈建议有志入门群论的同学观看 3blue1brown 魔群 视频。 对于计算机方向同学,可以尝试从数据结构的角度理解。本文主要基于文档、网站 Nauty 和 Nauty 的 python binding, pynauty(github.com) 展开。 Nauty 数据结构 本小节截选自 Na…

字节跳动虚拟数字人技术与应用

导读:火山引擎正在打造完善的虚拟数字人技术和应用体系,那么火山引擎是如何定义虚拟数字人的呢?火山引擎 2D 虚拟数字人和 3D 数字人采用了怎样先进的技术?火山引擎数字人有哪些应用和前景展望?今天我们就来一起探秘火…

[附源码]计算机毕业设计基于SpringBoot的毕业生就业系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

浅谈操作系统和进程

前言 操作系统是一个软件,对下要管理硬件设备,对上要给软件运行提供稳定的运行环境。操作系统是软硬件及用户之间交互的媒介。最常见的操作系统有Windows 98,2000,xp,vista,win7,win8&#xff…

# 智慧社区管理系统-核心业务功能-04保修信息

一 后端 1:entity package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class Repair {private int id;private String comId;private String co…

[附源码]计算机毕业设计springboot医院挂号住院管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LeetCode 441. 排列硬币

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 441. 排列硬币 ,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 LeetCode 441. …

Java基于springboot+vue的游戏物品销售购物商城系统 前后端分离

随着时代和计算机的发展,出现了越来越多的网络游戏,相对应的也拥有了越来越多的玩家,这些玩家在玩了一段游戏之后,可能会有游戏交易的需求。如果直接在私下个人交易很不安全,容易被骗。为了能够让广大游戏爱好者拥有一…