主要实现了 Pérez 等人在 2003 年发表的论文 Poisson Image Editing 中的基本算法。
我们可以在目的图片上确定一个感兴趣区域,把这个区域用一张源图片中的区域替代。由于两张图片的差异,直接把源图片中的区域粘贴到目的图片,得到的结果可能会很不协调。为此,我们增加一些修改目的图片的约束:第一,目的图片中感兴趣区域的边界像素和外部周边的像素没有显著差异,第二,目的图片中感兴趣区域内部的像素的梯度变化趋势符合源图片的对应像素的梯度变化趋势。见上述论文公式 (7)。这样就达到了无缝内容复制,即 seamless cloning 的目的。
本质上说,该算法是用一组特定的梯度变化图作为引导,在确保边界不变的情况下,修改一张图片某个封闭区域的像素值。
实现方法参见 SparseSolve.cpp。代码的编译和链接仅依赖 OpenCV,可选 2.4.5 及以上的版本。代码测试图片的来源参见注释。
泊松图像融合算法需要求解一个线性方程组 cv::Mat
去表示
源图片、源图片蒙版和目的图片来自 http://cs.brown.edu/courses/csci1950-g/results/proj2/pdoran/
2015 年 6 月看到了这个算法,我很感兴趣,就利用空闲时间做了下。其实也没什么用,呵呵。