这两个为啥不是映射两个允许

ORB单目模式的初始化过程可以分为鉯下四个阶段:

1 通过匹配选取两个可以作为起始两帧的初始帧

2 根据匹配计算两帧之间的位姿

3 三角化测量初始的特征点云深度进而获得点雲地图。

在初始化后单目模式和双目及RGBD模式一样,都是通过PNP来计算位姿

下面,说一下初始化算法的步骤:

这一阶段做的工作是选取昰两个特征点数目大于100的两个连续帧,并进行匹配

只有当前后帧匹配点对比较多时(代码>100),才认为这两帧可以进行初始化并记录下来兩帧的匹配关系

接下来开始尝试求取两帧之间的位姿。

否则从头开始重新开始尝试初始化。

ORB实现的是自动初始化也就是,无论场景岼面还是普通场景,都能完成初始化工作

其做法是同时计算适用于平面场景的单应性矩阵(H)和适用于普通场景的基础矩阵(F),

首先,由抽样点对计算出单次抽样的H和F矩阵(DLT,八点法);通过若干次RANSAC抽样

计算出最优的H和F矩阵;

然后,通过一定机制比较H和F矩阵选择最优嘚矩阵,恢复出来帧间位姿

   在两个线程上并行计算单映射两个允许矩阵模型和基础矩阵模型 :

为了使两个模型的计算流程尽量一样,用於计算H和F矩阵的迭代循环次数预先设置成一样(代码中为200次)

每次用迭代计算的匹配特征点对也是一样的。基础矩阵是8个特征点对单映矩阵是其中的4个特征点对。

从若干次RANSAC中计算出最优的H和F矩阵

每次迭代中,给每个模型M(H表示单映射两个允许F表示基本矩阵)计算┅个分值SM:

TM是无效数据的排除阈值,

它的依据是卡方测试的95%(TH=5.99, TF=3.84假设在测量误差上有1个像素的标准偏差)。

 TM等于TH这样,对于同一个重投影误差d两个模型求取的分值相同。

模型M越准所有匹配点对的重投影误差越小,SM的值就越大

因此SM的值反映了一个这样的问题,当其越夶时模型M越准确。

我们从单映射两个允许矩阵和基本矩阵的计算中选择分值最高的分别记作为SH和SF,

但如果两个模型分值都不高(意味著没有足够的局内点)就重新选择第二帧,重新匹配并尝试初始化

模型选择(用基础矩阵还是用单应性矩阵?)

       如果场景是平面***面戓存在低视差的情况,则可以通过单映矩阵来求解

同样地,我们也可以找到一个基础矩阵但问题是基础矩阵不能够很好的约束该问题,而且从基础矩阵中计算得到的运动结果是错误的在这种情况下,我们应该选择单映矩阵才能保证地图初始的正确性或者如果检测到低视差的情况则不进行初始化工作。

       另一方面对于非平面场景且有足够的视差的情况则可以通过基础矩阵来计算,

而在这种情况下单映矩阵只有基于平面点或者低视差的匹配点才能找到因此,

在这种情况下我们应该选择基础矩阵我们利用如下强大的启发式进行计算:

洳果RH>0.45 ,这表示二维平面和低视差的情况,我们将选择计算单应矩阵其他的情况,我们选择基础矩阵

   一旦选择好模型,我们就可以获得相應的运动状态如果选择单映矩阵,我们按照Faugeras等人发表的论文中提到的方法提取8种运动假设,该方法提出用cheriality测试来选择有效解

    然而,洳果在低视差的情况下这些测试就会失效,因为云点很容易在相机的前面或后面移动会导致选解错误。我们提出的方法是直接按这8种解将二维点三角化然后检查是否有一种解可以使得所有的云点都位于两个相机的前面,且重投影误差较小如果没有一个最优的解,我們就不执行初始化否则重新选择第二帧,重新匹配并尝试初始化

这种方法使初始化程序在低视差和两个交叉的视图情况下更具鲁棒性,这也是我们整个算法体现鲁棒性的关键所在

在基本矩阵的情况下,我们使用标定矩阵K用下式将其转换为本证矩阵:

然后奇异值***方法计算4个运动解然后就像上文中叙述的一样,我们将四个解用于三角化特征点以选择正解。

      一旦恢复出两帧之间位姿(单目无尺度)就可以求解匹配点对的深度(无尺度),求解时可以以任意一帧为基坐标系由于这里是要以做SLAM,所以以第一帧为世界坐标系代码中采用多视图几何书中11.2线性三角形法中的齐次方法(DLT)进行三角测量恢复匹配点对应的三维信息。

      基本原理如下已知一组匹配点分别在两幅图像中的二维坐标,利用叉乘为0可以代表共线的几何属性和帧间位姿构建一个AX=0的方程,其中X是大小4x1向量是该匹配点对所对应的三维點的齐次表示。然后通过SVD***来求方程AX=0对此方程SVD***本身具有最小二乘效果,可以解决在解方程时由位姿噪声带来的问题。其基本思想和一致

最后执行一个全局BA,以优化初始重构得到的点云地图

以上内容来自于ORBSLAM论文和源码。

jpa 的映射两个允许不能一个两个属性同时对应一个字段吗? [问题点数:20分结帖人qingzhe2008]

用JPA,不能实体类的两只属性同时映射两个允许表的同一字段吗

我把实体的两个属性映射两個允许到同一字段后,一直抱错:


呵呵这位同学不对,@JoinTable才会映射两个允许成三个表(中间表)@JoinColumn不可能的

unpayOrders和paiedOrders两个属性是不可映射两个允许到表中的,只能与User表生成关系但这种关系却是重复的,因此没有意义我建议将此两个属性设为非持久的,再在逻辑层通过条件查询为此兩个属性赋值示例如下:

@ManyToOne 如果使用上 @JoinColumn的话,在数据库中映射两个允许成的是三个表其中中间表中的字段分别以

两张表的名字+"_"+"ID"命名。JoinColumn修改的只是中间表中的一个字段并不是原来的表。

这就是两张表中有同名字段了

呵呵,这位同学不对@JoinT……

对我弄错了 是@JoinTable 一对多默认是影射成三个表,如果使用@JoinColumn的话就成了使用外健了。多谢

两个表中的关系只是:t_orders中有个user_id的字段。

所以我希望通过映射两个允许嘚配置,在查询的时候就直接把这两个集合初始化了避免去对较大的结果集进行遍历分类

不过还是觉得同一个表中两个相同字段,字段裏存不相同的值。 听起来怎么那么别扭呢为什么非要自己给自己找难题呢

不过还是觉得同一个表中两个相同字段,字段里存不相同嘚值。 听起来怎么那么别扭呢为什么非要自己给自己找难题呢

是实体类里有两个类型一样的属性,这两个属性的值将来自于同一张表只是两个集合中的数据是通过一个标识位来区分开!!!

所以,我希望通过映射两个允许的配置在查询的时候就直接把这两个集合初始化了,避免去对较大的结果集进行遍历分类

貌似iBatis框架可以实现但它似乎没有完全兼容JPA规范。建议在逻辑层实现吧

所以,我希望通過映射两个允许的配置在查询的时候就直接把这两个集合初始化了,避免去对较大的结果集进行遍历分类
貌似iBatis框架可以实现但它似乎沒有完全兼容JPA规范。建议在逻辑层实现吧

恩,谢谢了我自己在研究下吧。有结果了就来告诉大家

匿名用户不能发表回复!

如果是一对多的话就不叫映射两個允许了

它可以称做 是一种对应

也许楼主以后可以研究一下这方面的问题

近代数学主要研究的就是映射两个允许这种特殊的对应

我当初学嘚时候就没有想过这样的问题

你对这个回答的评价是

设两个集合A和B,和它们元素之间的对应关系R如果对于A中的每一个元素,通过R在B中嘟存在唯一一个元素与之对应则该对应关系R就称为从A到B的一个映射两个允许。其中A称为原象B称为象。

你对这个回答的评价是

你对这個回答的评价是?

定义 !! 因为它是这样定义的,你不是这样就不是了

你对这个回答的评价是

就像平行线不能相交一样

你对这个回答的评价是?

参考资料

 

随机推荐