泊松融合原理浅析 |
您所在的位置:网站首页 › 泊松方程推导过程 › 泊松融合原理浅析 |
前言
图像融合是图像处理领域的一个子领域,主要目的是将不同图像的一部分放在一起,融合得到一张新的图像。结果越自然,说明该融合算法就越好。常见的融合算法有Alpha blending、Laplacian Pyramid blending(拉普拉斯金字塔融合/多频带融合)和Poisson Blending。 泊松融合(Poisson Blending)是图像处理领域著名的图像融合算法,自从2003年发表以来,有很多基于此算法的应用和改进研究出现。泊松融合无需像Alpha blending一样的精确抠图就可以得到很自然的结果。 数学知识预备梯度,拉普拉斯,散度: 二维拉普拉斯方程如下: 泊松融合的核心思想不是让需要融合的两张图像直接叠加,而是让目标图像(dst)在融合部分根据源图像(src)的引导场(实际是梯度场 gradient field )“生长”出新的图像。 也就是说,只需要提供源图像的梯度场,让目标图像根据自身特点,按照源图像对应的梯度场生成融合部分。由于目标图像是按照自身特点出发生成融合区域,所以融合结果会显得更加自然。
在示意图图一中, S S S是二维实数集 R 2 \Bbb{R}^2 R2的闭合子集, Ω \Omega Ω是 S S S的边界为 ∂ Ω \partial\Omega ∂Ω闭合子集。 f ∗ f^* f∗是集合 S − Ω S-\Omega S−Ω 部分的函数(如果是图像的话就是指所有像素的像素值), f f f是集合 Ω \Omega Ω 的函数(也就是需要靠解泊松方程来求的函数)。 v \bold v v是集合 Ω \Omega Ω的向量场(构建泊松方程所需)。 最简单的插值结果是如下最小化问题的解: 在图像融合中,这种简单的插值方法会产生不连续、模糊的插值效果。这时候可以通过引入集合
Ω
\Omega
Ω的向量场
v
\bold v
v来改善。以此方式构建的最小化问题如下: 需要注意的是上述过程的求解是针对图像单个通道的,如果是RGB通道则需要构建三个泊松方程求解。 对于图像而言,像素点是离散点,因此上述连续空间的偏微分方程可以改写为离散空间的偏微分方程: 等式(6)的解满足如下联立线性方程: 关于泊松方程的求解,原论文中有如下描述: 另外梯度场V不仅可以是源图像的梯度场,还可以是其他。对引导场进行设计可以将泊松编辑应用到各种场景中: NORMAL CLONE MIXED CLONE MONOCHROME TRANSFER Local illumination changes 泊松融合的目的是将源图像的一部分无缝融合到目标图像上。其本质是在保持目标图在融合边界的像素的同时以源图像的该部分的梯度场作为指导来生成融合区域内的像素。整体原则是保持融合区域内的生成像素的梯度场与源图像融合部分的像素的梯度场尽可能一致,反映到方程求解中则是梯度差异尽可能小。也就是让生成区域的拉普拉斯结果和源图像的拉普拉斯结果一致,且生成区域边界的的值和目标图像在融合区域的边界值一致。 可以列出: 矩阵求解: 融合结果如下: OpenCV已经有泊松融合(编辑)的实现代码,接口如下: xingye.jpg: [1] OpenCV Docs - Seamless Cloning [2] OpenCV GitHub - opencv/modules/photo/src/seamless_cloning.cpp [3] OpenCV GitHub - opencv/modules/photo/src/seamless_cloning_impl.cpp [4] csdn - 图像处理(十二)图像融合(1)Seamless cloning泊松克隆-Siggraph 2004 [5] 知乎 - 12. 泊松图像编辑 [6] 图像融合之泊松融合(Possion Matting) - 一度逍遥 - 博客园 [7] 盲解卷积和泊松图像融合 - 哔哩哔哩 [8] OpenCV Docs - Image Filtering [9] OpenCV Docs - cv::dft [10] OpenCV Docs - cv::cuda::createLaplacianFilter [11] OpenCV Docs - cv::cuda::DFT [12] OpenCV GitHub - opencv_contrib/modules/cudaarithm/src/arithm.cpp [13] Poisson equation, solving with DFT - Algowiki [14] Numerical Analysis of Boundary-Value Problems (AMATH 585) [15] 矩阵计算 [16] Opencv中使用cuda进行 dft 与 idft滤波运算 | YangYouji’s WebSite [17] OpenCV Docs - cv::filter2D [18] OpenCV Docs - Discrete Fourier Transform [19] 快速傅里叶变换 - 维基百科,自由的百科全书 [20] opencv之Mat数据类型 - feifanren - 博客园 [21] python - OpenCV cv2.seamlessClone中的错误 - 堆栈内存溢出 [22] python - bug on bounds in OpenCV cv2.seamlessClone - Stack Overflow [23] seamlessClone bug · Issue #15294 · opencv/opencv [24] epock / epock / issues / #48 - terminate called after throwing an instance of ‘std::length_error’ — Bitbucket [25] opencv/pyopencv_cuda.hpp at master · opencv/opencv [26] 计算机视觉:泊松融合 [27] 松弛法求解给定边界条件的泊松方程 [28] 泊松融合笔记 [29] FFT解泊松方程 [30] 拉普拉斯方程 - 维基百科,自由的百科全书 [31] 泊松方程 - 维基百科,自由的百科全书 [32] Discrete Poisson equation - Wikipedia [33] OpenCV: samples/cpp/tutorial_code/photo/seamless_cloning/cloning_demo.cpp [34] 图像融合之多波段融合(Multiband Blending)/拉普拉斯金字塔融合(Laplacian Pyramid Blending) [35] An Intuitive Explanation of using Poisson Blending for Seamless Copy-and-Paste of Images |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |