[论文阅读] 颜色迁移-Automated Colour Grading

news2024/9/22 23:31:18

[论文阅读] 颜色迁移-Automated Colour Grading

文章: Automated colour grading using colour distribution transfer, [paper], [matlab代码], [python代码]

1-算法原理

本文算法分为2个大步骤, 首先使用IDT(Iterative Distribution Transfer)方法得到初步的结果, 这个结果里面可能会将噪声放大了, 因而第二大步是进行后处理, 减少伪影, 保留原图的梯度.

具体地:

  1. IDT方法, 得到初始结果, 详细原理可以查看本文描述, 也可以查看作者的另外一篇文章 N-Dimensional Probability Density Function Transfer and its Application to Colour Transfer, 或者也可以查看这篇博客 [论文阅读] 颜色迁移-N维pdf迁移
  2. 后处理, 减少伪影, 保留原图的梯度, 如下所示, 本文使用优化方法, J J J为最后需要得到的图像, I I I为原图, t ( I ) t(I) t(I)为第一步IDT结果, ∇ \nabla 表示梯度计算, ϕ \phi ϕ ψ \psi ψ 分别为权重系数
    优化公式

上述公式中, 第一部分用来保留梯度, 如果仅有这部分, 最后的结果就是原图, 第二部分用来保证与目标图像颜色接近.

2-算法核心

第一部分这里不再说明, 详见 [论文阅读] 颜色迁移-N维pdf迁移.

对于第二部分, 文中进行了简单化调整, 过程如下, 这里直接复制文中的说明, 数学不好就不做解释了
简化过程
公式局部可能写错了, 根据作者提供的代码实现进行调整并简化, 保持公式与代码实现保持一致, 方便理解, 如下所示:

I 0 = I ( x , y ) I 1 = I ( x , y − 1 ) I 2 = I ( x , y + 1 ) I 3 = I ( x − 1 , y ) I 4 = I ( x + 1 , y ) J 0 = J ( x , y ) J 1 = J ( x , y − 1 ) J 2 = J ( x , y + 1 ) J 3 = J ( x − 1 , y ) J 4 = J ( x + 1 , y ) \begin{aligned} &I_0 = I(x,y)\\ &I_1 = I(x,y-1)\\ &I_2 = I(x,y+1)\\ &I_3 = I(x-1,y)\\ &I_4 = I(x+1,y)\\ &J_0 = J(x,y)\\ &J_1 = J(x,y-1)\\ &J_2 = J(x,y+1)\\ &J_3 = J(x-1,y)\\ &J_4 = J(x+1,y)\\ \end{aligned} I0=I(x,y)I1=I(x,y1)I2=I(x,y+1)I3=I(x1,y)I4=I(x+1,y)J0=J(x,y)J1=J(x,y1)J2=J(x,y+1)J3=J(x1,y)J4=J(x+1,y)

公式中a6可能存在问题, 这个根据代码实现简化后的公式:

a 1 ( x , y ) = − ψ ( x , y − 1 ) + ψ ( x , y ) 2 a 2 ( x , y ) = − ψ ( x , y + 1 ) + ψ ( x , y ) 2 a 3 ( x , y ) = − ψ ( x − 1 , y ) + ψ ( x , y ) 2 a 4 ( x , y ) = − ψ ( x + 1 , y ) + ψ ( x , y ) 2 a 5 ( x , y ) = ϕ ( x , y ) − a 1 ( x , y ) − a 2 ( x , y ) − a 3 ( x , y ) − a 4 ( x , y ) a 6 ( x , y ) = ϕ ( x , y ) I 0 + a 1 ( x , y ) ( I 1 − I 0 ) + a 2 ( x , y ) ( I 2 − I 0 ) + a 3 ( x , y ) ( I 3 − I 0 ) + a 4 ( x , y ) ( I 4 − I 0 ) \begin{aligned} a_1(x, y)=&-\frac{\psi(x, y-1)+\psi(x, y)}{2} \\ a_2(x, y)=&-\frac{\psi(x, y+1)+\psi(x, y)}{2} \\ a_3(x, y)=&-\frac{\psi(x-1, y)+\psi(x, y)}{2} \\ a_4(x, y)=&-\frac{\psi(x+1, y)+\psi(x, y)}{2} \\ a_5(x, y)=&\phi(x, y) - a_1(x, y) - a_2(x, y) - a_3(x, y) - a_4(x, y) \\ \\ a_6(x, y)=& \phi(x, y) I_0 \\ & +a_1(x, y)(I_1 - I_0) \\ & +a_2(x, y)(I_2 - I_0) \\ & +a_3(x, y)(I_3 - I_0) \\ & +a_4(x, y)(I_4 - I_0) \\ \end{aligned} a1(x,y)=a2(x,y)=a3(x,y)=a4(x,y)=a5(x,y)=a6(x,y)=2ψ(x,y1)+ψ(x,y)2ψ(x,y+1)+ψ(x,y)2ψ(x1,y)+ψ(x,y)2ψ(x+1,y)+ψ(x,y)ϕ(x,y)a1(x,y)a2(x,y)a3(x,y)a4(x,y)ϕ(x,y)I0+a1(x,y)(I1I0)+a2(x,y)(I2I0)+a3(x,y)(I3I0)+a4(x,y)(I4I0)

公式19简化为:

a 1 ( x , y ) J 1 + a 2 ( x , y ) J 2 + a 3 ( x , y ) J 3 + a 4 ( x , y ) J 4 + a 5 ( x , y ) J 0 = a 6 ( x , y ) (19) \begin{aligned} &a_1(x, y) J_1+a_2(x, y) J_2+a_3(x, y) J_3+a_4(x, y) J_4+a_5(x, y) J_0 =a_6(x, y) \end{aligned} \tag{19} a1(x,y)J1+a2(x,y)J2+a3(x,y)J3+a4(x,y)J4+a5(x,y)J0=a6(x,y)(19)

将J0单独放到方程的一边, 可以得到:

a 5 ( x , y ) J 0 = ϕ ( x , y ) I 0 a 1 ( x , y ) ( I 1 − I 0 ) − a 1 ( x , y ) J 1 a 2 ( x , y ) ( I 2 − I 0 ) − a 2 ( x , y ) J 2 a 3 ( x , y ) ( I 3 − I 0 ) − a 3 ( x , y ) J 3 a 4 ( x , y ) ( I 4 − I 0 ) − a 4 ( x , y ) J 4 = ϕ ( x , y ) I 0 − A 1 − A 2 − A 3 − A 4 \begin{aligned} a_5(x, y) J_0=&\phi(x, y) I_0 \\ & a_1(x, y)(I_1 - I_0) - a_1(x, y) J_1\\ & a_2(x, y)(I_2 - I_0) - a_2(x, y) J_2 \\ & a_3(x, y)(I_3 - I_0) - a_3(x, y) J_3\\ & a_4(x, y)(I_4 - I_0) - a_4(x, y) J_4\\ & = \phi(x, y) I_0 - A_1- A_2 - A_3 - A_4 \end{aligned} a5(x,y)J0=ϕ(x,y)I0a1(x,y)(I1I0)a1(x,y)J1a2(x,y)(I2I0)a2(x,y)J2a3(x,y)(I3I0)a3(x,y)J3a4(x,y)(I4I0)a4(x,y)J4=ϕ(x,y)I0A1A2A3A4

A 1 = a 1 ( x , y ) ( J 1 − I 1 + I 0 ) A 2 = a 2 ( x , y ) ( J 2 − I 2 + I 0 ) A 3 = a 3 ( x , y ) ( J 3 − I 3 + I 0 ) A 4 = a 4 ( x , y ) ( J 4 − I 4 + I 0 ) A_1 = a_1(x, y)(J_1 - I_1 + I_0) \\ A_2 = a_2(x, y)(J_2 - I_2 + I_0) \\ A_3 = a_3(x, y)(J_3 - I_3 + I_0) \\ A_4 = a_4(x, y)(J_4 - I_4 + I_0) A1=a1(x,y)(J1I1+I0)A2=a2(x,y)(J2I2+I0)A3=a3(x,y)(J3I3+I0)A4=a4(x,y)(J4I4+I0)

在公式2边除以a5, 可以得到公式20, 即为最后的图像

J 0 = ϕ ( x , y ) I 0 − A 1 − A 2 − A 3 − A 4 a 5 ( x , y ) (20) J_0=\frac{\phi(x, y) I_0 - A_1- A_2 - A_3 - A_4}{a_5(x, y)} \tag{20} J0=a5(x,y)ϕ(x,y)I0A1A2A3A4(20)

最后, 代码实现时, 对结果进行了加权, 即:

J 0 k + 1 = ϕ ( x , y ) I 0 k − A 1 k − A 2 k − A 3 k − A 4 k a 5 ( x , y ) ∗ ( 1 − ρ ) + J 0 k ∗ ρ (20) J_0^{k+1}= \frac{\phi(x, y) I_0^{k} - A_1^{k}- A_2^{k} - A_3^{k} - A_4^{k}}{a_5(x, y)} * (1 - \rho) + J_0^{k} * \rho \tag{20} J0k+1=a5(x,y)ϕ(x,y)I0kA1kA2kA3kA4k(1ρ)+J0kρ(20)

3-算法效果

文中给出的算法结果如下:

结果示例
结果示例

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

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

相关文章

优雅的springboot参数校验(二)

7. 集合校验 有这样一种场景,前端请求后端接口时,需要传递的是一个数组,数组的元素是一个对象,并且希望后台收到参数后可以对数组集合中的元素元素对象的属性进行校验,如果后台直接以List的来接收参数,约束…

[附源码]计算机毕业设计基于springboot的云网盘设计

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

linux网络编程之tcp

相关函数 int socket(int domain,int type,int protocol);参数: domain: AF_INET AF_INET6 AF_UNIX,AF_LOCAL AF_NETLINK AF_PACKET type: SOCK_STREAM: 流式套接字,唯一对应于TCP SOCK_DGRAM:数据报套接字,唯一对应着…

【第七章 MySQL体系结构、存储引擎、InnoDB、MyISAM、Memory、存储引擎特点及选择】

第七章 MySQL体系结构、存储引擎、InnoDB、MyISAM、Memory、存储引擎特点及选择 1.MySQL体系结构: ①连接层: 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连…

[Power Query] 日期和时间处理

Power Query查询编辑器为日期和时间数据提供了强大而快捷的处理方式 例1: 从日期中提取年、月份、日、季度、周、天等信息 数据源 步骤1:将数据源导入到Power BI Desktop,单击【转换数据】选项,进入Power Query查询编辑器界面 步骤2:选中"日期&qu…

【概念】数据仓库和数仓建模

数据仓库 数仓主要特征 面向主题:每个需求和表都属于一个主题,可以用主题来对数仓的表分门别类集成性:将异构数据源,比如MySQL和服务器埋点日志,统一转换成结构化的hive表数据存储到ODS层非易失性:对历史…

Flink系列文档-(YY12)-窗口计算

1 窗口基本概念 1.1 概述 窗口,就是把无界的数据流,依据一定规则划分成一段一段的有界数据流来计算; 既然划分成有界数据段,通常都是为了"聚合"; Keyedwindow重要特性:任何一个窗口&#xff0…

游戏开发36课 cocoscreator scrollview优化

在cocoscreator内,ScrollView控件封装的挺完美的了,不过对于一些对性能要求比较高的场景,会存在问题,以top100排行榜排行榜举例子 1、应用卡顿甚至崩溃 按照官方用例使用ScrollView,插入100个玩家的item,理…

离线安装harbor容器镜像仓库(harbor-v2.3.5)

记录:354 场景:在CentOS 7.9操作系统上,离线部署harbor容器镜像仓库集群,使用Redis为外部缓存、使用PostgreSQL为外部数据库、使用Ceph为共享存储、使用nginx为harbor的负载均衡、使用Keepalived为集群高可用、使用docker-ce操作…

【专业术语】(计算机 / 深度学习与目标检测 / 轨道交通)

专业术语-计算机 / 深度学习与目标检测 / 轨道交通一、 计算机1 IDE2 API3 CUDA Driver API3.1 cuInit - 驱动初始化3.2 关于context,有两种:3.3 CUcontext4 RuntimeAPI5 Memory5.1 关于内存,有两大类:5.1.1 CPU内存,称…

[附源码]Python计算机毕业设计Django考试系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

FISCO BCOS(二十五)———多机部署

一、基础环境搭建 1、查看当前是否安装了ssh-server服务 dpkg -l | grep ssh2、安装ssh-server服务 sudo apt-get install openssh-server3、修改配置文件"/etc/ssh/sshd_config" 4、重启openssh-server root@FISCOBCOS01:~# sudo /etc/init.d/ssh restart5、查看…

高数 |【2020数一真题】部分错题及经典题自用思路整理

T1:积分限与被积函数都等价为无穷小 T2:不连续一定不可导 T3:可微的定义 T4:收敛半径 T6:空间直线与向量 法一:

WINDOWS7-11磁盘分区教程

首先,打开计算机管理界面 以windows11为例,在任务栏搜索框内,输入“计算机管理界面” 点击打开。 然后选择存储-》磁盘管理 到这里之后,我们需要选中一个磁盘,压缩卷分出来一部分空间。为新分区做准备。 以E盘为例&a…

MapStruct与lombok加载顺序问题与annotationProcessorPaths的关系?

MapStruct是什么? MapStruct is a code generator that greatly simplifies the implementation of mappings between Java bean types based on a convention over configuration approach.——https://mapstruct.org/ 从官方定义来看,MapStruct类似于我…

C语言Socket编程,实现两个程序间的通信

文章目录server和client通信流程图实现两个程序间的通信1.服务端server2.客户端client3.怎么运行呢?4.重写代码已剪辑自: https://www.cnblogs.com/fisherss/p/12085123.html server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的…

17-JavaSE基础巩固练习:Math类API两道数学算法水题

两道算法水题(一) 一、判断质数 判断一个数是否为一个质数。 1、以前的写法 package com.app.demo26_math_api;public class Test1 {public static void main(String[] args) {/*判断n(任意整数)是否为一个质数:以前的写法:是用n对2~n之间…

JavaWeb Filter 过滤器

参考:JavaWeb过滤器(Filter)详解 1、简介 顾名思义就是对事物进行过滤的,在Web中的过滤器,当然就是对请求进行过滤,我们使用过滤器,就可以对请求进行拦截,然后做相应的处理,实现许多特殊功能。…

阿里云部署应用

安装jdk 查看已安装版本 rpm -qa | grep java yum命令查找JDK1.8软件包 yum -y list java-1.8* 安装列表中的JDK1.8软件包 yum -y install java-1.8.0-openjdk-devel.x86_64 java -version 配置环境变量 vim /etc/profile JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.…

三、内存管理 (二)虚拟存储器

目录 2.1虚拟内存的基本概念 2.2内存分配策略 2.2.1驻留集大小 2.2.2固定分配局部置换 2.2.3可变分配全局置换 2.2.4可变分配局部置换 2.3地址变换机构 2.3.1页表机制 2.3.2预调页策略和请求调页策略 2.3.3缺页中断机构 2.3.4对换区与文件区 2.3.5页面置换算法 …