泊松融合是个经典问题,网上已经有很多材料介绍了,自己以前也有做过笔记:poisson方程组矩阵

前段时间,项目中用了泊松融合,为了能在产品使用,对性能有一定要求,通用的解法基本是不满足要求的。后来网上看到了一个关于poisson的优化材料,code实现了下,性能优化非常明显,可见数学优化还是非常重要。

材料链接:Solving the Discrete Poisson Equation using Jacobi, SOR, Conjugate Gradients, and the FFT

各种算法复杂度:

poisson快速算法

poisson快速算法

泊松方程的DST优化解法流程,看上去非常的简单。

 

1. 优化原理其实就是x grad与y grad分别等价于右乘和左乘一个特定矩阵,然后这个特定矩阵是非常特殊的,可以进行特征分解,而恰好其特征分解是sin形式,可以通过DST变换来加速这个矩阵向量乘法,
将其复杂度由n*n优化为n*logn。体现在整个算法上就是最终复杂度变为S*logS,其中S为图像size大小
2. 材料中是使用正方形区域,事实上实现过程很容易直接扩展为任意矩阵区域,区别就是由于行列不一致导致的左右两边乘上的矩阵变为nxn与mxm有所区别,体现的区别就是做的DST行是n,列是m的,推导过程类似。
3. 至于如何进一步扩展为任意边界,这点我没想到什么好方法,所以用的比较傻的方法就是,任意区域弄个bounding box转化为矩形区域进行处理,这样多的区域就是origion的信息,转化为这样的一个问题来求解,虽然两者求解的问题并不等价,但只是条件有所区别,预计是没问题的,实际表现也是。
4. 看上去 opencv应该也是按照这个思路进行处理的, 具体我还没去看opencv,我自己也只按照Numerical Recipes in C书里的实现了2的幂次的实数优化方法,任意阶也有材料,但实在是没精力去弄了。
5. 实现完后性能还是提升非常明显的,回想起几年前最开始实现的poisson融合,当时没考虑矩阵的特殊性,用的方法也很简单,就用了个预分解,先crout分解n^3复杂度,然后后续拖动框随时改变位置看效果n^2复杂度,
与现在优化的nlogn复杂度比,简直天壤之别。
6.同事也有实现了多重网格的求解方法,是O(n)线性复杂度,效果看上去也没啥问题,看上去速度更快,似乎是迭代解,迭代次数会影响效果与性能。(多重网格还没搞,所以没法确切分析;想去实现,没什么看的比较满意的严谨证明材料,暂时没去实现)
7.实际体验:纯C代码只在部分模块代码作了简单的4线程,1M图是可以hold住的。在分析性能时会发现,实现时为方便里面列方向的是直接转置后行处理,有一些大头比如好几次转置相关冗余的地方完全可以去除,同时大矩阵转置没去做优化,性能好像还占了整个求解快一半...
后续可以1.去除冗余2.转置优化3.上指令集,甚至直接GPU。

8. 实现过程使用了FFT(实际上只用了DST),主要代码参考了Numerical Recipes in C这本书(里面也有配套sample code,这本书实在是很赞)。  Numerical Recipes in C里面有许多优化,关于FFT,DST,DCT以及各种优化比如实函数优化等,太赞了!然后里面还有多重网格的章节,预计也是可以去实现的,不过没继续花时间在这上面了。

 

在实际使用上,很多时候效果还是很惊艳的,但也是有出现一些问题a.平坦区域好像会出现过渡性的水波纹b.使用环境经常会是:多张图贴到一张图,并且贴图边界特别不规则,零零散散,而且图像对齐也没对的特别牢(导致结构性差异比较大?),亮度差异也比较大会达到128。
c.结果会出现,求解出来的的图像内容,亮度从边界到中间变化特别明显,显得怪异不正常,反回去的残差倒是极小,说明解的是没问题的,不知道是不是求解图像亮度结构差异太大导致边界差异过大?或者数值稳定性方面问题?毕竟求解达到了1024*1024级别。
d.当然,感觉更大可能性是求解图像亮度结构差异太大导致的,毕竟一些正常没那么复杂的图好像都没出什么问题,效果还不错。比较容易出错看上去都是一些有边框亮度差异比较大或者天空树枝特别细长的地方。
e.可以考虑图像对的更齐后做 或者 亮度差异过大时grad进行调整后再迁移,这部分的影响暂时实验还没去做。

 

预计后续短时间内不会再继续优化了,今天有点空,凭印象做些记录,作为阶段性总结备份。

 

 

相关文章:

  • 2022-01-23
  • 2021-08-29
  • 2021-10-06
  • 2021-10-19
  • 2021-11-09
  • 2022-01-21
猜你喜欢
  • 2022-12-23
  • 2022-02-03
  • 2021-05-15
相关资源
相似解决方案