泊松融合-无缝融合

发布时间 2023-12-22 15:35:37作者: 澳大利亚树袋熊

最近,在构思一篇文章,要用fake image的方法,突然想到了以前学到的泊松融合方法。

参考文献:https://zhuanlan.zhihu.com/p/96777721?utm_id=0

https://blog.csdn.net/TracelessLe/article/details/113270697

该方法就是在泊松边界(目标图像f与合成图像f*的边界像素值相等)条件下,保持原图像的梯度特征v,和目标图像f进行融合。本质上就是求拉普拉斯方程。

 也就是下面的式子,上三角意为拉普拉斯算子,下三角就是梯度(矢量):

 考虑到目标图像f与原图像的图像矢量v应该尽可能贴近,又可改写为:

最后,贴一份C++的opencv代码:

#include <opencv2\opencv.hpp>
 #include <iostream>
 #include <string>
 
 using namespace std;
 using namespace cv;
 
 void main()
 {
     Mat imgL = imread("data/apple.jpg");
     Mat imgR = imread("data/orange.jpg");
 
     int imgH = imgR.rows;
     int imgW = imgR.cols;
     Mat mask = Mat::zeros(imgL.size(), CV_8UC1);
     mask(Rect(,, imgW*0.5, imgH)).setTo();
     cv::imshow("mask", mask);
     Point center(imgW*0.25, imgH*0.5);
 
     Mat blendImg;
     seamlessClone(imgL, imgR, mask, center, blendImg, NORMAL_CLONE);
 
     cv::imshow("blendimg", blendImg);
     waitKey();
 }