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得到的内点根本没法复现。

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • radis简单理解

    radis简单理解radis简单理解

  • jdbc和数据库连接池_常用的数据库连接池

    jdbc和数据库连接池_常用的数据库连接池数据库连接池JDBC数据库连接池的必要性在使用开发基于数据库的web程序时,传统的模式基本是按照以下步骤:在主程序(如servlet beans)中建立数据库连接进行sql操作断开数据库连接这种模式开发,存在的问题:普通的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证用户名和密码(大概花费0.05s-1s),需要数据库连接的时候,就向数据库要求一个,执行完成后再断开。这样的方式将会消耗大量的时间。数据库的

  • R语言入门-安装R和Rstuido软件

    R语言入门-安装R和Rstuido软件安装R和Rstuido软件R语言是用于统计分析,图形表示和报告的编程语言和软件环境;Rstudio是编辑、运行R语言的最为理想的工具之一。1、官网下载R安装包  下载地址为:https://cran.r-project.org  进入链接,如下图所示,在页面顶部提供了三个下载链接,分别对应三种操作系统:Windows、Mac和Linux。请选择自己操作系统对应的链接,接下来我将以wi…

  • 计算机网络谢希仁第七版 课后答案

    计算机网络谢希仁第七版 课后答案谢希仁计算机网络第七版课后答案第一章概述1-01计算机网络向用户可以提供那些服务?答:连通性和共享1-02简述分组交换的要点。答:(1)报文分组,加首部(2)经路由器储存转发(3)在目的地合并1-03试从多个方面比较电路交换、报文交换和分组交换的主要优缺点。答:(1)电路交换:端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高。(2)报文交换:无须预约传输带…

  • Javascript childNodes用法

    Javascript childNodes用法//定义函数getInfo(),用于获取小节的详细信息functiongetInfo(){//使用getElementById()方法获取元素以及元素varlist=document.getElementById(“list”); //使用childNodes数组导航到相应的小节 varnode=list.childNodes; alert(node.

    2022年10月23日
  • 好玩的单机游戏_附近哪里好玩

    好玩的单机游戏_附近哪里好玩Drone2Map

发表回复

您的电子邮箱地址不会被公开。

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