图像处理6-图像泊松编辑
背景
比较火热的短视频绿布特效其实就是用到了图像融合技术,将其中一幅图加入另一幅图中形成合成视频。一般情况下,两幅图像或多幅图像若直接涂像素融合,比较突兀感官体验上不是一体,有一种图像技术可以较为自然的将两种图像融合,它就是泊松图像编辑技术。这是一个微分方程在图像中的一个重要应用,首先提出该应用的是SIGGRAPH 2003,该文章对现在的图像编辑技术有着非常重要的影响。下面我们拆解一下其中的原理,为提高图像处理技术提供支持。本人能力有限,有错误请批评指正。
数学模型
问题描述:原图图像 g g g 所占的区域为 Ω \Omega Ω,根据原图的梯度和目标图嵌入位置的边界结构,构建过渡区域的图像像素值无缝融合至右侧图像 T T T 中,右侧融合部分的图像值未知需要求解,如下图所示。
符号说明:原图图像 g g g ,梯度图是 ∇ g \nabla g ∇g,,图像 g g g 的区域范围是 Ω \Omega Ω,其边界为 ∂ Ω \partial \Omega ∂Ω。合并后 Ω \Omega Ω内的像素用 f f f表示, Ω \Omega Ω外用 f ∗ f^* f∗表示。即:
合 成 像 素 值 F = { f x ∈ Ω f ∗ x ∉ Ω 合成像素值F=\begin{cases} f & x\in \Omega \\ f^* & x \notin \Omega \end{cases} 合成像素值F={ff∗x∈Ωx∈/Ω
对于一幅图像来说,宏观意义体现在纹理特征上,所以要让两幅图恰当无缝融合,需要将两幅图的融合部位的纹理做成一致。而纹理体现在梯度上,所以需要融合区域与原图区域梯度保持一致性。融合的纹理一致意味着 Ω \Omega Ω 内外区域变化差异达到极小,也就是E(f)取极小值。
用公式表示为能量函数:
E ( f ) = m i n ∬ Ω ∣ ∣ ∇ f − ∇ g ∣ ∣ 2 d x d y E(f)= min\iint_\Omega \mid\mid \nabla f-\nabla g \mid\mid^2dxdy E(f)=min∬Ω∣∣∇f−∇g∣∣2dxdy
边界条件为: f ∣ ∂ Ω = f ∗ ∣ ∂ Ω f|_{\partial \Omega}=f^*|_{\partial \Omega} f∣∂Ω=f∗∣∂Ω
上式积分不容易直接求解,需要做一些简化,有2个途径,本质是相同的。
方法1:
直接使用欧拉-拉格朗日变分,对于能量 E E E
E ( u ) = ∬ Ω ∣ ∣ ∇ u − ∇ g ∣ ∣ 2 d x d y = ∬ Ω ∣ ∣ ∇ ( u − g ) ∣ ∣ 2 d x d y = ∬ Ω ( u x − g x ) 2 + ( u y − g y ) 2 d x d y = ∬ Ω M d x d y \begin{aligned} E(u)=& \iint_\Omega \mid\mid \nabla u-\nabla g \mid\mid^2dxdy \\ =&\iint_\Omega \mid\mid \nabla (u-g) \mid\mid^2dxdy \\ = &\iint_\Omega (u_x-g_x)^2+(u_y-g_y)^2dxdy \\ =&\iint_\Omega Mdxdy \end{aligned} E(u)====∬Ω∣∣∇u−∇g∣∣2dxdy∬Ω∣∣∇(u−g)∣∣2dxdy∬Ω(ux−gx)2+(uy−gy)2dxdy∬ΩMdxdy
这是个泛函变分问题, u u u在泛函空间取值,使得E为极小值,其中 M = ( ( u x − g x ) 2 + ( u y − g y ) 2 M=((u_x-g_x)^2+(u_y-g_y)^2 M=((ux−gx)2+(uy−gy)2。由Euler-Lagrange变分公式:
M u − d d x ∂ M ∂ u x − d d y ∂ M ∂ u y = 0 ⟹ d d x 2 ( u x − g x ) + d d y 2 ( u y − g y ) = 0 ⟹ u x x − g x x + u y y − g y y = 0 ⟹ △ u = △ g = ∇ ⋅ ∇ g \begin{aligned} &M_u-\frac{d}{dx}{\frac{\partial M}{\partial u_x}}-\frac{d}{dy}{\frac{\partial M}{\partial u_y}}=0 \\ \Longrightarrow &\frac{d}{dx}{2(u_x-g_x)}+\frac{d}{dy}{2(u_y-g_y)}=0 \\ \Longrightarrow &u_{xx}-g_{xx}+u_{yy}-g_{yy}=0 \\ \Longrightarrow &\triangle u=\triangle g=\nabla\cdot\nabla g \end{aligned} ⟹⟹⟹Mu−dxd∂ux∂M−dyd∂uy∂M=0dxd2(ux−gx)+dyd2(uy−gy)=0uxx−gxx+uyy−gyy=0△u=△g=∇⋅∇g
方法2:
由于梯度算子是个线性算子,并将被积函数用内积表示,切向量作为度量,颇有几何意义,所以有:
E ( f ) = m i n ∬ Ω ∣ ∣ ∇ ( f − g ) ∣ ∣ 2 d x d y = m i n ∬ Ω ⟨ ∇ ( f − g ) , ∇ ( f − g ) ⟩ d x d y \begin{aligned} E(f)=&min\iint_\Omega \mid\mid \nabla (f-g) \mid\mid^2dxdy \\ =&min\iint_\Omega \langle\nabla (f-g),\nabla(f-g)\rangle dxdy \end{aligned} E(f)==min∬Ω∣∣∇(f−g)∣∣2dxdymin∬Ω⟨∇(f−g),∇(f−g)⟩dxdy
对任意实数 ϵ > 0 \epsilon>0 ϵ>0,取边界 ∂ Ω \partial \Omega ∂Ω上取值为0的函数 h ∈ C 0 ∞ ( Ω ) h\in C^{\infty}_0(\Omega) h∈C0∞(Ω) 构成函数族 { f + ϵ ∗ h } \{f+\epsilon*h\} {f+ϵ∗h},在 ϵ → 0 \epsilon\rightarrow0 ϵ→0时,能量 E E E取极小值。
d d ϵ ∣ ϵ → 0 E ( f + ϵ ∗ h ) = d d ϵ ∣ ϵ → 0 ∬ Ω ⟨ ∇ ( f + ϵ ∗ h − g ) , ∇ ( f + ϵ ∗ h − g ⟩ ) d x d y = d d ϵ ∣ ϵ → 0 ∬ Ω ⟨ ∇ ( ( f − g ) + ϵ ∗ h ) , ∇ ( ( f − g ) + ϵ ∗ h ) ⟩ d x d y = 2 ∬ Ω ⟨ ∇ ( f − g ) , ∇ h ⟩ d x d y = 0 \begin{aligned} \frac{d}{d\epsilon}\bigg|_{\epsilon\rightarrow0}E(f+\epsilon*h)=& \frac{d}{d\epsilon}\bigg|_{\epsilon\rightarrow0}\iint_\Omega \langle \nabla(f+\epsilon*h-g),\nabla(f+\epsilon*h-g\rangle) dxdy \\ =& \frac{d}{d\epsilon}\bigg|_{\epsilon\rightarrow0}\iint_\Omega \langle \nabla((f-g)+\epsilon*h),\nabla((f-g)+\epsilon*h)\rangle dxdy \\ =&2\iint_\Omega \langle \nabla(f-g), \nabla h\rangle dxdy \\ =&0 \end{aligned} dϵd∣∣∣∣ϵ→0E(f+ϵ∗h)====dϵd∣∣∣∣ϵ→0∬Ω⟨∇(f+ϵ∗h−g),∇(f+ϵ∗h−g⟩)dxdydϵd∣∣∣∣ϵ→0∬Ω⟨∇((f−g)+ϵ∗h),∇((f−g)+ϵ∗h)⟩dxdy2∬Ω⟨∇(f−g),∇h⟩dxdy0
由微分运算关系:
∇ ⋅ ( h ∇ ( f − g ) ) = ⟨ ∇ ( f − g ) , ∇ h ⟩ + h ∇ ⋅ ∇ ( f − g ) \nabla \cdot (h\nabla (f-g))=\langle \nabla(f-g), \nabla h\rangle+h\nabla\cdot\nabla (f-g) ∇⋅(h∇(f−g))=⟨∇(f−g),∇h⟩+h∇⋅∇(f−g)
将此式带入上式得:
∬ Ω ⟨ ∇ ( f − g ) , ∇ h ⟩ d x d y = ∬ Ω ∇ ⋅ ( h ∇ ( f − g ) ) − h ∇ ⋅ ∇ ( f − g ) d x d y \begin{aligned} &\iint_\Omega \langle \nabla(f-g), \nabla h\rangle dxdy \\ =&\iint_\Omega \nabla \cdot (h\nabla (f-g))-h\nabla\cdot\nabla (f-g) dxdy \end{aligned} =∬Ω⟨∇(f−g),∇h⟩dxdy∬Ω∇⋅(h∇(f−g))−h∇⋅∇(f−g)dxdy
由Stokes定理(求导与边界对偶), 又由于 h ∈ C 0 ∞ ( Ω ) h\in C^{\infty}_0(\Omega) h∈C0∞(Ω) , 其实梯度与切向量正交,所以被积函数第一项为0:
∬ Ω ∇ ⋅ ( h ∇ ( f − g ) ) d x d y = ∫ ∂ Ω ( h ∇ ( f − g ) ) d s = 0 \iint_\Omega \nabla \cdot (h\nabla (f-g))dxdy=\int_{\partial \Omega}(h\nabla(f-g))ds=0 ∬Ω∇⋅(h∇(f−g))dxdy=∫∂Ω(h∇(f−g))ds=0
由 h h h 在空间 C 0 ∞ ( Ω ) C^{\infty}_0(\Omega) C0∞(Ω) 的任意性,进一步有,
∬ Ω h ∇ ⋅ ∇ ( f − g ) d x d y = 0 ⟹ h ∇ ⋅ ∇ ( f − g ) = 0 ⟹ h △ ( f − g ) = 0 ⟹ △ f = △ g = ∇ ⋅ ∇ g \begin{aligned} &\iint_\Omega h\nabla\cdot\nabla (f-g) dxdy=0 \\ \Longrightarrow &h\nabla\cdot\nabla(f-g)=0 \\ \Longrightarrow &h\triangle(f-g)=0 \\ \Longrightarrow &\triangle f=\triangle g=\nabla\cdot\nabla g \end{aligned} ⟹⟹⟹∬Ωh∇⋅∇(f−g)dxdy=0h∇⋅∇(f−g)=0h△(f−g)=0△f=△g=∇⋅∇g
================================================================================
数值求解
待更新
图像处理6-图像泊松编辑相关推荐
- 图像融合之泊松编辑(Poisson Editing)(1):简略语言概述算法
http://blog.csdn.net/u011534057/article/details/68922197 原作者:Chris Tralie 简介 泊松图像编辑是一种全自动的"无缝融合 ...
- 4.图形图像素材编辑
4.图形图像素材编辑 图形.图像是人类视觉所感受到的一种具象化的信息,是多媒体信息的主要类型,也是信息传递最基本.最常见的方式.它可以形象.生动和直观地表达大量的信息,具有文字和声音无可比拟的优点.图 ...
- OpenCV图像处理(十一)---图像梯度
安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...
- 【学习体会】图像泊松融合
图像融合后: 参考博文:从泊松方程的解法,聊到泊松图像融合 - 知乎 参考论文:Pérez P, Gangnet M, Blake A. Poisson image editing[M]//ACM S ...
- 数字图像处理:图像的灰度变换(Matlab实现)
数字图像处理:图像的灰度变换(Matlab实现) (1)线性变换: 通过建立灰度映射来调整源图像的灰度. k>1增强图像的对比度:k=1调节图像亮度,通过改变d值达到调节亮度目的:0 i = i ...
- Java OpenCV-4.0.0 图像处理22 图像模板匹配
Java OpenCV-4.0.0 图像处理22 图像模板匹配 参考链接:https://blog.csdn.net/qq_34814092/article/details/95813654 Java ...
- 数字图像处理之图像基础
最近在学数字图像处理,图像基础包括以下部分: 导入库 import numpy as np import matplotlib.pyplot as plt import cv2 as cv 图片展示函 ...
- 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))
目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...
- 图像处理傅里叶变换图像变化_傅里叶变换和图像床单视图。
图像处理傅里叶变换图像变化 What do Fourier Transforms do? What do the Fourier modes represent? Why are Fourier Tr ...
最新文章
- tomcat启动前端项目
- 【DBMS 数据库管理系统】数据仓库中 数据追加 ( 时标方法 | DELTA 文件法 | 前后映像文件法 | 日志文件法 )
- 数据库元数据数据字典查询_10_列出数据库里的所有对象
- 请问在allegro中如何在铜箔上单独放置过孔?
- php parseint,JavaScript parseInt() 函数
- Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)
- IBM 推出世界最小电脑,应用区块链技术防偷骗!
- 【Vegas原创】xp_sendmail提示“邮件已发送”但收不到邮件的解决方法
- HG255D刷flash记录
- 卡巴斯基2010激活码
- JS框架_(JQuery.js)夜晚天空满天星星闪烁动画
- 微信小程序图片加载太慢;uni-app微信小程序加载图片优化;微信小程序图片image加载成功事件@load;图片加载成功触发@load事件
- Refined Architecture阶段
- Matlab中产生门函数----Heaviside函数的调用方法
- 在警察领域高级人脸识别技术的一致性
- JavaCV - 图像色温调整
- 2019 年百度之星·程序设计大赛 - 初赛一 解题报告
- java设计模式之门面模式
- 编程之美 - 烙饼问题
- 读论文-Control of Memory, Active Perception, and Action in Minecraft