图像融合的方式有alpha融合,拉普拉斯金字塔融合。

同样是基于拉普拉斯算子,我们可以直接用求解的方式得到融合后的图像。因为人眼对二阶导是更敏感的,所以只要我们指定了融合区域内部的梯度值,并且知道融合边界处的值,理论上就可以求解出来。这个理论对应的数学表达式就是泊松方程。

泊松方程形式上就是Ax=b的线性方程组,所以求解也可以套用线性方程组的解法,用雅可比迭代法或者高斯赛德尔迭代法来求解就 OK 了。

泊松方程

我们主要来看泊松方程是怎么构造的,从而理解为什么这样得到的解可以保证融合得到的图像是平滑的。

opencv 泊松融合python 泊松融合 改进_人工智能

 从上图中可以看出,平滑首先要满足的一点是在边界处的值要等于背景,这就是边界一致;既然要将参考图覆盖过来,其实更关注的是参考图的梯度,所以还要使得融合后内容的梯度尽可能和参考图一致。

opencv 泊松融合python 泊松融合 改进_线性方程组_02

结合上图,以上两点的数学表达就是:

opencv 泊松融合python 泊松融合 改进_线性方程组_03

 我们要求的就是f的值,要求其梯度尽可能接近参考图v在对应位置的梯度,所以v也称为引导向量场。二维图像的拉普拉斯算子是一个3x3大小的滤波模板,所以是线性方程,比较好求解。这样解出来的融合区域的值和参考图不一致,但是梯度近似,且具体的值是基于边界和梯度求解出来的,所以整体会和背景处于同一亮度/颜色水平。

梯度(Gradient):

opencv 泊松融合python 泊松融合 改进_人工智能_04

,念做nabla;拉普拉斯算子:

opencv 泊松融合python 泊松融合 改进_计算机视觉_05

,念做Delta,也写做

opencv 泊松融合python 泊松融合 改进_计算机视觉_06

opencv 泊松融合python 泊松融合 改进_算法_07

 

这里的边界属于Dirichlet 边界,狄利克雷边界,因为直接给出边界处函数在边界处的实际值。

引导场

刚才提到的引导向量场使用参考图自身的梯度,这种引导向量场称为保守场,因为这样尽可能保留了参考图的信息。但如果参考图对应的mask不够精细,参考图本身的梯度和背景图仍然差异过大,这样的引导场得到的融合效果还是不佳。所以可以对引导场进行改进,同时参考参考图和背景图:

opencv 泊松融合python 泊松融合 改进_人工智能_08

 上图d使用了参考图和背景图的极大值,相比于b的保守引导场,尽可能保留了更多的纹理信息,不至于在融合区域保留参考图的背景而造成突兀。

求解

虽然最终的形式可以化为线性方程组,但是优化目标函数表面看暂时还是最小化问题。通过泛函可以表示将目标函数表示为函数的函数(自变量函数是\Delta f)。这样,要使泛函取极值,就要满足欧拉-拉格朗日函数:

opencv 泊松融合python 泊松融合 改进_人工智能_09

opencv 泊松融合python 泊松融合 改进_opencv 泊松融合python_10

 

这样从一阶导到了二阶导。因为v本身就是一阶导,它的散度也是二阶导。 

Reference:

1.

2.从泊松方程的解法,聊到泊松图像融合 - 知乎

3.【变分计算1】欧拉-拉格朗日方程 - 知乎