[论文阅读] 颜色迁移-梯度保护颜色迁移

news/2024/5/4 15:48:05/文章来源:https://blog.csdn.net/j05073094/article/details/128050760

[论文阅读] 颜色迁移-梯度保护颜色迁移

文章: [Gradient-Preserving Color Transfer], [代码未公开]

本文目的: 如题所示为梯度保护的颜色迁移方法.

1-算法原理

人类的视觉系统对局部强度差异比强度本身更敏感, 因而, 保持颜色梯度是场景保真度的必要条件, 因而作者认为: 一个好的颜色迁移算法需要保持颜色梯度.

颜色梯度从字面意思理解就是要保持颜色和梯度, 颜色迁移就是要保持源图像中的细节(梯度)和目标图像中的颜色.

因而本文就是从2这个方面进行设计算法的, 最小化如下所示公式, 即可得到输出图像.
在这里插入图片描述
式中, H(∗)H(*)H() 为直方图, ∇\nabla 为梯度算子

  • 第一部分是直方图, 用于获取目标/参考图像颜色, 输出图像的直方图和目标/参考图像的直方图尽可能的接近
  • 第二部分是梯度, 用于保留源图像梯度, 输出图像的梯度和源图像的梯度尽可能的接近
  • 参数λ是用于平衡目标图像颜色和源图像梯度的系数

但上述公式1很难优化, 主要原因函数 H(∗)H(*)H() 是作用于图像整体的统计运算, 而梯度算子 ∇\nabla 是应用于图像中的每个像素.

1.1-方法简化

针对公式难以优化问题, 作者对公式进行了简化:

  • 公式1的第一部分作用是尽可能的使输出图像的直方图接近目标图像的直方图, 其功能就相当于直方图匹配
  • 可以先将源图像和目标图像进行直方图匹配, 得到中间图像f
  • 输出图像尽可能的接近中间图像f, 相当于输出图像直方图尽可能接近目标图像直方图

因而上述公式可以更改为:
在这里插入图片描述
进一步地, 使用矩阵方式表示, 并求导可以得到:
在这里插入图片描述
式中, ooo 输出的图像, DxD_xDx , DyD_yDy 为梯度算子, 文中使用sobel算子, 关于sobel算子, 可以戳这里: Sobel算子

2-算法核心

2.1-关于公式简化

比较难以理解的是公式2到公式3的变换, 这里做个简单说明, 可能不太正确.

要求公式2的最小值, 就要求其导数=0时的解, 为了方便理解, 这里去除下标, 对单个像素进行说明, 对公式2求导:

2(o−f)+λ[2(Dx∗o−Dx∗s)∗Dx+2(Dy∗o−Dy∗s)∗Dy]=0o+λ(Dx2∗o+Dy2∗o)=f+λ(Dx2∗s+Dy2∗s)[1+λ(Dx2+Dy2)]o=f+λ(Dx2+Dy2)s2(o-f)+\lambda [2(D_x*o-Dx*s)*Dx + 2(D_y*o-Dy*s)*Dy ] = 0 \\ o+ \lambda (D_x^2*o+D_y^2*o) = f + \lambda (D_x^2*s+D_y^2*s) \\ [1+ \lambda (D_x^2+D_y^2)]o = f + \lambda (D_x^2+D_y^2)s 2(of)+λ[2(DxoDxs)Dx+2(DyoDys)Dy]=0o+λ(Dx2o+Dy2o)=f+λ(Dx2s+Dy2s)[1+λ(Dx2+Dy2)]o=f+λ(Dx2+Dy2)s

当对于所有像素, 使用矩阵表示时, Dx2D_x^2Dx2DxTDxD_x^TD_xDxTDx, 这样就可以得到公式3.

这样就可以通过求解线性方程得到输出图像o:

o=A−1bA=I+λ(DxTDx+DyTDy)b=f+λ(DxTDx+DyTDy)so = A^{-1}b \\ A = I + \lambda (D_x^TD_x + D_y^TD_y) \\ b = f + \lambda (D_x^TD_x + D_y^TD_y)s o=A1bA=I+λ(DxTDx+DyTDy)b=f+λ(DxTDx+DyTDy)s

2.2-关于参数λ

算法中的唯一控制参数为λ, 文中也进行了讨论.

文中使用了 MSE 来对颜色迁移后的图像进行定量评估, MSE 计算方式如下:
在这里插入图片描述
MSE的值随 λ 变化为变化, 经过文中例子进行测试, λ在1附近时, MSE的值最小(越小越好).

如下所示为不同λ时的结果对比.
在这里插入图片描述

3-算法复现

这里使用matlab对算法进行了复现, 结果如下所示:

RGB颜色空间
在这里插入图片描述
HSV颜色空间
在这里插入图片描述
Lab颜色空间
在这里插入图片描述
依次为源图像, 目标/参考图像, 结果.

4-参考

  • Gradient-Preserving Color Transfer_铿锵的玫瑰的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何批量查询谷歌PR权重是多少?谷歌PR权重怎么批量查询

权重是就是网站在搜索引擎心目中的位置,如果一个网站在搜索引擎心目中的位置高的话,当然容易获得较好的排名,今天不是来跟大家聊如何提升网站权重的,而是教大家如何去看一个网站的权重,做网站的朋友都要知道要做关键词…

数据库面试题1-数据库基本概念、常用SQL语言

题1:什么是数据库 数据库(Database) 是保存有组织的数据的容器(通常是一个文件或一组文件),是通过 数据库管理系统(DataBase- Management System,DBMS) 创建和操纵的容器…

Metal每日分享,波动滤镜/涂鸦滤镜效果

本案例的目的是理解如何用Metal实现图像波动效果滤镜,还可类似涂鸦效果,主要就是对纹理坐标进行正余弦偏移处理; Demo HarbethDemo地址 实操代码 // 波动效果 let filter C7Fluctuate.init(extent: 50, amplitude: 0.003, fluctuate: 2.5…

自动驾驶两大路线对决,渐进式玩家为何更容易得人心?

HiEV消息(文/长海)对自动驾驶赛道而言,2022年的冬天格外冷冽。寒潮袭来,从各家的应变方式看,不同路径的玩家呈现“冰火两重天”,进化的趋势也越来越清晰。 以Waymo为代表、持续研发L4级无人驾驶的跨越式路线…

Python实现房产数据分析与可视化 数据分析 实战

Python库的选择 话说,工欲善其事,必先利其器,虽然我们已经选择Python来完成剩余的工作,但是我们需要考虑具体选择使用Pytho的哪些利器来帮助我们更快更好地完成剩余的工作。 我们可以看一下,在这个任务中&#xff0c…

UIAutomator测试框架介绍

uiautomator简介 UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点…

【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?

通过前面的学习,我们已经知道,怎么将本地自己制作的镜像发布到阿里云远程镜像仓库中去。但是在实际工作开发中,一般,我们都是将公司的镜像发布到公司自己搭建的私服镜像仓库中,那么一个私服的镜像仓库怎么搭建&#xf…

【云原生】Kubernetes(k8s)Istio Gateway 介绍与实战操作

文章目录一、概述二、Istio 架构三、通过 istioctl 部署 Istio1)安装istioctl 工具2)通过istioctl安装istio3)检查四、Istio Gateway五、Istio VirtualService 虚拟服务六、示例演示(bookinfo)1)安装bookin…

笔试强训(四十一)

目录一、选择题二、编程题2.1 Emacs计算器2.1.1 题目2.1.1 题解一、选择题 (1)某主机的IP地址为180.80.77.55,子网掩码为255.255.252.0.若该主机向其所在子网发送广播分组,则目的地址可以是(D) A.180.80.7…

制作移动端整页滚动动画

制作移动端整页滚动动画 需要用到 rem7.5.js(rem适配) pageSlider.js(控制动画的js文件) 基于zepto&#xff0c;引入zepto.js文件 animate.css(动画样式) base.css(公共样式) 下面看一下页面结构 <div class"section sec1"style"background-image:url(./ima…

ASP.NET微信快速开发框架源码【源码分享】

ASP.NET微信快速开发框架源码 微信公众平台快速开发框架源码 需要源码学习&#xff0c;查看文末卡片获取&#xff0c;或私信我。 框架主要技术&#xff1a; ASP.NET MVC5、ASP.NET Identity、Bootstrap、KnockoutJs、Entity Framework等。 主要特色&#xff1a; 1、快速迭代开…

​创新不是公司的救命良药

阅读本文大概需要1.06 分钟。之前问说当整个大环境都差的时候&#xff0c;公司还有项目可做就不错了&#xff0c;不要觉得只能赚点小钱就看不上&#xff0c;现在已经从伸手抓钱&#xff0c;变成弯腰捡钱的时代了。 开始赚的钱是不多&#xff0c;但能验证方向&#xff0c;先把跑…

【Keras+计算机视觉+Tensorflow】生成对抗神经网络中DCGAN、CycleGAN网络的讲解(图文解释 超详细)

觉得有帮助麻烦点赞关注收藏~~~ 一、生成对抗网络简介 生成对抗网络(GANs&#xff0c;Generative Adversarial Nets),由Ian Goodfellow在2014年提出的,是当今计算机科学中最有趣的概念之一。GAN最早提出是为了弥补真实数据的不足&#xff0c;生成高质量的人工数据。GAN的主要思…

Java项目中集成Redis提升系统的性能

概述 安装Redis 安装 启动Rocky Linux 9.0&#xff0c;在浏览器中打开web console. 如果没有安装Web console&#xff0c;按以下步骤安装启用&#xff1a; 安装命令&#xff1a; # dnf install cockpit 启用并运行服务 # systemctl enable --now cockpit.socket 开通防火墙&…

【每日小技巧】如果Tomcat的端口被占用,怎么处理该报错

苦恼的问题&#xff1a;当我们在用Tomcat时&#xff0c;发现我们要用的端口被其他程序占用了&#xff0c;如图&#xff1a; 解决办法&#xff1a; ①winR&#xff0c;输入cmd&#xff0c;打开命令行 输入命令netstat -ano&#xff0c;列出所有的端口号使用情况 ②查看PID&#…

Linux命令_ps 进程管理

简介 ps通过读取 /proc 中的虚拟文件来工作&#xff0c;不需要 setuid kmem 或有任何特权来运行。 CPU使用率目前表示为进程整个生命周期中运行所花费时间的百分比。这是不理想的&#xff0c;它不符合ps在其他方面所符合的标准。CPU使用率加起来不太可能达到100%。 SIZE和RSS字…

E. DS哈希查找--Trie树

目录 题目描述 思路分析 AC代码 题目描述 Trie树又称单词查找树&#xff0c;是一种树形结构&#xff0c;如下图所示。 它是一种哈希树的变种。典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;&#xff0c;所以经常被搜索引擎…

HTML列表与表格详解_高效学习攻略

HTML列表与表格HTML篇_第六章、HTML列表与表格一、列表1.1定义1.2列表的分类1.3列表的对比二、表格2.1表格的定义2.2表格的边框2.3表格的表头单元格2.4表格标题 <caption>2.5表格的高度和宽度2.6表格背景2.7表格空间2.8合并单元格2.9表格头部、主题和页脚2.10表格的嵌套H…

【C++常用容器】STL基础语法学习queue容器

目录 ●queue的基本概念 ●queue常用接口 ●构造函数 ●赋值操作 ●数据存取 ●大小操作 ●queue的基本概念 简要介绍&#xff1a;queue是一种先进先出的的数据结构&#xff0c;它有两个出口。队列容器允许从一端新增元素&#xff0c;从另一端移除元素。队列中只有队…

【Java基础篇】基础知识易错集锦(一)

在学习的路上&#xff0c;我们只记得学习新的知识&#xff0c;却忽略了一切新知识都是在旧知识的基础上&#xff1b;努力奔跑的过程中&#xff0c;也要记得常回头看看&#xff1b; 题目展示&#xff1a; 解析&#xff1a; abstract是抽象的意思&#xff0c;在java中&#xff0…