APAP算法详解和VS代码实现

前段时间由于学习需要好好研究了一下APAP,由于对Matlab不熟悉,并且没有Matlab和C++混合编程的经验,因此看到原作者的代码的时候真的是头疼,我只能一点点的去测试语句,这里很感谢这位博主的详尽文章思路分析,可能有些人看这个就懂了。

https://blog.csdn.net/chentianting/article/details/88869872

这里也要感谢一下这位博主,我们的交流让我对整体的思路有了更清楚的认识,很佩服他的能力
@模式识别实验室主任他的主页

我是结合论文内容、博客和代码,三合一进行学习的,有时候就自己有点混乱。其实整体思路非常明了

1.SIFT得到两幅图像的匹配点对
2.通过RANSAC剔除外点,得到N对内点
3.利用DLT和SVD计算全局单应性
4.将源图划分网格,取网格中心点,计算每个中心点和源图上内点之间的欧式距离和权重
5.将权重放到DLT算法的A矩阵中,构建成新的W*A矩阵,重新SVD分解,自然就得到了当前网格的局部单应性矩阵
6.遍历每个网格,利用局部单应性矩阵映射到全景画布上,就得到了APAP变换后的源图
7.最后就是进行拼接线的加权融合

这里有几个关键点文章和代码有出入的地方。(以下把目标图叫做左图,源图叫做右图)
1.较为常用的想法,我既然是把源图变换到目标图,那么我肯定是求解源图点到目标图点的单应性,但是并不是,代码中求的都是左图到右图,而且左图是目标图
2.代码中是在全景画布上面构建网格,然后在求解权重的时候,网格中心点坐标就需要变换成以(左图左上角)为原点,并与左图的内点计算权重
3.代码在最后的像素映射时,求得右图坐标后,直接取整,取得像素之后就赋值给左图,没有进行我常用的双线性插值,这里应该是叫做(邻近插值)?
4.代码在计算前,进行了Normalise和Condition,归一化即是代码中的T1 T1,能够将所有点均值变成0,标准差变成sqrt(2),而Condition我还是没明白在做什么,有明白的请指教。这两步很重要,不然后面的求解就不太正确
5.数据可能是影响结果的重要问题,我就是被此困扰了很久。代码是利用了Multi-GS的RANSAC改进版进行内点的选取,而我在opencv只是简单的利用RANSAC,而且这个代码分析还要得益于这位博主
https://blog.csdn.net/qq_25352981/article/details/51530751
但是,RANSAC始终没有那么优秀,我得到的内点数据跟作者差别较大,而且也受限于SIFT得到的原始点对只有801对,而论文可是有2100对,因此最开始我设定0.5阈值RANSAC得到的内点根本没法复现。

后来当我把所有点放入使用,竟然得到了较为近似的结果。直到那时候我才明白问题出错的关键所在。

当然,这个结果并不好
当然这个结果并不好,我也还没有进行加权融合,但是整个思路已经明确,收获较大。虽然特别的煎熬,但是也兴致盎然,成果出来的时候兴奋不已

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值