APAP算法详解和VS代码实现「建议收藏」

APAP算法详解和VS代码实现「建议收藏」前段时间由于学习需要好好研究了一下APAP,由于对Matlab不熟悉,并且没有Matlab和C++混合编程的经验,因此看到原作者的代码的时候真的是头疼,我只能一点点的去测试语句,这里很感谢这位博主的详尽文章思路分析,可能有些人看这个就懂了。https://blog.csdn.net/chentianting/article/details/88869872这里也要感谢一下这位博主,我们的交流让…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前段时间由于学习需要好好研究了一下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得到的内点根本没法复现。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190768.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mac android 录屏软件,mac录屏怎么录内置声音?详细的解决方案[通俗易懂]

    mac android 录屏软件,mac录屏怎么录内置声音?详细的解决方案[通俗易懂]原标题:mac录屏怎么录内置声音?详细的解决方案mac录屏怎么录内置声音?大家使用Mac电脑最大的问题就是对操作系统的不熟悉,就像是刚接触Windows系统一样,开始都会有一定的不熟悉,其实并没有那么难。很多人会使用QuickTimePlayer工具来操作,但实际上很多人在实际上操作这个方法来录制屏幕的时候会没有声音,这种情况还挺多的。比如现在拥有一个场景:有一个很萌或者很有用的视频,无法下载到…

    2022年4月30日
    78
  • 尺规作图:经过已知直线上的一点作这条直线的垂线_尺规作图过直线外一点作垂线

    尺规作图:经过已知直线上的一点作这条直线的垂线_尺规作图过直线外一点作垂线-

    2022年9月20日
    3
  • JS判断页面是否刷新

    JS判断页面是否刷新判断页面刷新的方式用到了 NavigationTi 这个属性主要是为了评估网站的表现 比如网页加载时间 发送与获取请求的时间 网页渲染时间等等 checkforNavi window performance console info window performancew

    2025年8月4日
    2
  • python程序编写简介

    语句和语法变量的定义和赋值内存管理内存管理引用计数增加引用计数减少引用计数自动回收机制(python独有的)实例:python对象标识符专用下划线标识符_xxx:不能用from

    2022年3月29日
    58
  • SQL岗位30个面试题,SQL面试问题及答案「建议收藏」

    SQL岗位30个面试题,SQL面试问题及答案「建议收藏」SQL岗位30个面试题,SQL面试问题及答案:什么是SQL?SQL(结构化查询语言)是一种设计用于检索和操作数据的数据库。它属于美国国家标准协会(ANSI)的一种标准,可用于执行Select(选择)、Update(更新)、Delete(删除)和Insert(插入)等数据任务。数据库中的表和字段是什么?表是在具有列和行的模型中设计的数据集合。在表中,指定了列数称为字段,但未定义行数称…

    2022年8月27日
    5
  • SpringBoot面试总结「建议收藏」

    SpringBoot面试总结「建议收藏」SpringBoot面试总结一.SpringBoot是什么?Springboot是一个脚手架(而非框架),构建于Spring框架(Framework)基础之上,基于快速构建理念,提供了自动配置功能,可实现其开箱即用特性(创建完一个基本的项目以后,可零配置或者少量配置即可运行我们的项目)。2.SpringBoot的核心特性是什么?起步依赖自动配置健康检查3.SpringBoot项目启动原理?SpringBoot项目在启动时,首先基于启动入口类上的注解描述,进行自动配置并扫描启动类所在

    2022年6月7日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号