官方教程 收藏本版 已有2人收藏 +发表新主题
查看: 19565|回复: 2
打印 上一主题 下一主题

metaio SDK 官方教程--CAD模型跟踪(边缘初始化)

[复制链接]

metaio SDK 官方教程--CAD模型跟踪(边缘初始化)

Luc_metaio 发表于 2014-4-30 11:59:07 浏览:  19565 回复:  2 只看该作者 复制链接


基于CAD信息的3D无标识跟踪技术是SDK 5.0中自带的BETA新功能。此技术可以根据环境中物体的3D模型(例如小物体或一幢楼的3D模型)来准确测算摄像头的姿态。

此技术和扩展跟踪用法相似,它利用3D模型来进行基于边缘的(摄像头)姿态初始化,从而使叠加的虚拟素材之尺寸和位置都更准确。这种跟踪配置只对摄像头的姿态估测一次,然后便转换到无标识3D模式继续跟踪。

基于边缘的初始化过程使用一个独立的空跟踪器或GPS、罗盘或重力传感器信息作为预先的姿态估测,然后系统会在一个规定的范围内继续寻找更准确的摄像头姿态数据。

使用该跟踪方法需要一个需跟踪的环境或实物的表面模型和一个线模型。

跟踪所用的3D模型和跟踪配置文件可以使用Creator 3.0来制作,只需点击Add TrackableObject Tracking3D CAD Model (Beta)。人工制作这些模型和使用此类跟踪配置文件的方法会在相关的SDK教程中做详细讲解。



EdgeBasedInitializationSensorSource的参数与设定

EdgeBasedInitializationSensorSource的配置选项包括很多方面。下面是配置文件的一个基本的框架:

<?xml version="1.0"?>
<TrackingData>
  <Sensors>
    <Sensor Type="EdgeBasedInitializationSensorSource">
      <SensorID>EdgeBasedInitialization</SensorID>
      <Parameters>
        <TriangleMesh>TriangleMesh.obj</TriangleMesh>
        <TrackingConfiguration>InitialPose.xml</TrackingConfiguration>
        <UseSensorsForPoseCreation>off</UseSensorsForPoseCreation>
        <OriginCoordinates>
          <Latitude>0.0</Latitude>
          <Longitude>0.0</Longitude>
        </OriginCoordinates>
        <InitializationTestMode>false</InitializationTestMode>
        <AutoInit> <!-- auto init parameters --> </AutoInit>
        <EdgeAlignment> <!-- edge alignment parameters --> </EdgeAlignment>
        <FeatureTracking> <!-- feature tracking parameters --> </FeatureTracking>
      </Parameters>

其中<EdgeAlignment>(<边缘匹配>)、<AutoInit>(<自动初始化>)和<FeatureTracking>(<特征追踪>)是用来配置跟踪器的不同方面。

  • <TriangleMesh>   (<表面模型路径>)

此参数为指向三角网络模型的路径,并用它作为表面模型来进行遮挡测试和特征点跟踪。它只能由顶点和三顶点图元(三角形)来构成。

  • <TrackingConfiguration>   (<跟踪配置>)

此参数指定(空)跟踪模式的名称,它为每帧画面提供默认的(摄像头)初始姿态。如果用GPS来计算初始姿态,那么此参数将不被使用。

  • <UseSensorsForPoseCreation>   (<使用传感器测算姿态>)

此参数指定使用何种传感器来决定每帧画面的(摄像头)初始姿态。它可以被设置为以下几种模式:

    “off”:不使用任何传感器。这种配置需要单独定义一个空<TrackingConfiguration>来判断(摄像头)初始姿态。

    “gravity”:此模式也使用<TrackingConfiguration>,但(摄像头)姿态会和设备的重力校齐。在转动设备时此参数可使模型扭动或移动,但需要模型预先和重力校齐并使Z轴向上。

    “gravity_compass”:使用此参数可以把<TrackingConfiguration>中姿态的重力和方向替换为设备的重力仪和罗盘读数。此参数只在地压应用中有用,而且要求用户的位置是已知的,并且3D模型向北对齐而其Z轴朝上。

“all”:此参数会调用设备上的GPS、罗盘和重力传感器并使用其读数。此模式下<TrackingConfiguration>不用设置,但模型的<OriginCoordinates>必须设定。模型需要缩放到毫米级别,并且3D模型向北对齐而其Z轴朝上。

  • <OriginCoordinates>   (<初始点坐标>)

此参数指定3D模型在世界大地坐标系(WGS84,详情请见LLA标识跟踪)中的纬度(<OriginCoordinates/Latitude>)和经度(<OriginCoordinates/Longitude>)坐标,并且此参数在使用GPS的情况下(UseSensorsForPoseCreation = "all")才会有用。

  • <InitializationTestMode>   (<初始化测试模式>)

此参数值只能为0(无效,默认值)或1(有效).

如果参数设置为无效,那么跟踪器会在第一次有效的姿态测算后自动生成一个3D特征点环境图,并立刻转换到无标识3D跟踪模式。跟踪器会发出一次ETS_REGISTERED状态的TrackingEvent,然后使用特征点继续进行跟踪。

如果参数设置为有效,那么跟踪器会一直尝试通过所提供的初始姿态估算来测算摄像头姿态,而不会转换成无标识跟踪模式。这种模式可以更有效的调试其他参数。

在测试模式下,跟踪器会在每次从跟踪失败到成功的状态翻转时发出一个ETS_FOUND的TrackingEvent状态信号。同理,跟踪器也会在每次从跟踪成功到失败的状态翻转时发出一个ETS_LOST的状态信号。



边缘匹配(EdgeAlignment)的参数与设定

边缘匹配是基于边缘初始化应用的最核心配置内容。用户应根据应用程序的需要来调试其三个重要参数的数值:

     MinQuality(最低质量) – 设置边缘匹配的精确度

    SearchRange(搜寻范围) – 设置可初始化的范围

    NumFeatures(特征点数量) – 设置所使用特征点数量

  • <LineModel>   (<线模型>)

此参数指定线模型文件名。此模型必须包含顶点和2D图元,并且它必须与<TriangleMesh>在同一坐标系内。有关如何制作线模型,请参阅SDK教程关于模型制作部分的内容。

  • <MinQuality>   (<最低质量>)

跟踪器每帧都会把线模型和观测到的边缘进行比对,从而测定出准确的姿态。然后此次边缘匹配的效果会被评估,从而得出边缘匹配是否成功的结论。

<MinQuality>指定最终平均匹配率的最小值。它的可取范围为0.0到1.0,其数值是在匹配效果与成功率之间找平衡。

它的最常用取值范围为0.55到0.85,具体应根据所使用的模型和(在很小的程度上)相对光线状况而定。若使用有非常明显轮廓的模型(例如,白色边缘的长黑线),您可选用较高的阀值(<MinQuality>),并且错误匹配的可能性小。对于边缘不明显的模型来说,重复的比对或较低的准确度会使边缘匹配效果下降。这时就需要设置一个比较低的阀值,才能让匹配通过。但随之而来的是错误匹配可能性的增加。因此,请根据您的模型和应用的需要来调整这个阀值的数值。

  • <SearchRange>   (<搜寻范围>)

第二个重要的可调参数是在搜寻图像中匹配点时使用线模型所允许的搜索范围,其单位为毫米。设置此参数的目的是在不过度限制搜索范围的情况下,应尽可能选择合适的范围,从而避免对其他平行线的错误检测。如果此参数空缺,搜寻范围是根据摄像头采集画面大小来确定的一个固定值,而不是根据世界标尺的大小来确定的。

  • <NumFeatures>   (<特征数量>)

第三个重要的可调参数是特征的数量。线模型上的特征点越多,姿态测算的结果就越准确也越稳定。但是,这也会导致实物和线模型的匹配耗费更多的资源。

对于简单的模型来说,我们建议使用至少100个样本点来进行匹配。在非常强大的移动设备上使用线模型匹配时,特征点可以增加到500点;而在桌面设备上,几千个特征点也没有问题。

  • <VisibilityTest/Enabled>   (<遮挡测试/启动>)

如果所使用的线模型包含大量内部或后部线条,而且这些线条在表面模型中时而会被遮挡(换句话说,这些线条不会从每个角度都可见),这时需要启动遮挡测试。

其两个选项包括:

    Off: 不使用遮挡测试,默认所有线条在所有角度都可见。

    On: 使用遮挡测试—测试线模型上的特征是否在表面模型中被遮挡,其中表面模型是在<TriangleMesh>中指定的。测试的计算量几乎和特征数量无关,但计算的复杂度和表面模型上的三角图元的数量成正线性关系。

  • <VisibilityTest/TestRate>   (<遮挡测试/测试率>)

此参数指定测试率,其数值范围为0.0001到1.0。小于1.0的参数意味着牺牲准确度来减低计算复杂度。

一般来说,对于包含100条线并使用500个特征点的模型来说,把测试率设定为0.1到0.2是比较合适的。这可以使计算复杂度降低90%的同时保留大约98%的测试灵敏度。



自动初始化(AutoInit)的参数与设定

此参数为可选参数,在边缘匹配中它决定了姿态测算初始化时跟踪器的搜寻方式。使用这个参数可以让跟踪器在初始姿态的周围一个空间范围内搜寻正确的姿态。

  • <PresetType>   (<预设类型>)

    Off: 空间姿态搜寻功能关闭

    Indoor: 预设室内空间姿态搜寻

    Outdoor: 预设室外空间姿态搜寻

    Custom: 自定义空间姿态搜寻,所有参数必须人工设定

PresetType被设为custom时,用户必须自行设定下列Autoinit参数:

  • <COS>   (<坐标系>)

此参数指定空间姿态搜寻所在的坐标系:

    Camera(默认): OpenGL摄像头坐标系

    World: OpenGL世界坐标系。轴变化会从OpenGL坐标系映射到世界坐标系。

    Yr_world_rest_camera: 罗盘旋转会在世界坐标系中实现,而其他的会在摄像头坐标系中实现。

World和yr_world_rest_camera都假定:

    边缘坐标系的Z轴指向上方,也就是说,其相当于OpenGL坐标系的Y轴

    中心原点在(或接近于)重力中心

  • <X>,<Y>, <Z>

子节点<MaxMM>指定本轴(在一个方向上)的变化范围,单位毫米。而子节点<Step>指定在每个方向上的阶数,此数值不包括中心。

例如,当X和Y的MaxMM设为100并且Step设为3时,在这两个轴-1米到1米所构成的方形平面(XZ平面)上会生成7×7个不同的位置

  • <XRotation>, <Compass>, <ZRotation>   (<X旋转>、<Y旋转>、<Z旋转>)

子节点<MaxDeg>指定一个方向上的变化范围,单位度。而子节点<Step>指定变化的阶数,此数值不包括0度。

  • <NumSharedVariationsPerFrame>   (<每帧共享变化数量>)

此参数指定每帧所要计算的变化的最大值。如果设为0,意味着该功能被关闭,那么每帧会进行全程变化的计算。



特征跟踪(FeatureTracking)的参数与设定

此子节点为可选,它包括成功初始化后特征跟踪的参数。此参数只在前面提到的初始化测试模式没有开启的情况下使用。除了其参数不明确指定3D环境图外,(因为3D环境图是在边缘初始化时生成的),其他都和无标识3D跟踪一模一样。

无标识3D传感器的参数可直接在<FeatureTracking>下设定,而SensorCOS的参数要在<FeatureTracking/Parameters>下设定。最重要的参数包括:

  • <FeatureTracking/Parameters/MapExtensionMethod>   (<特征跟踪/参数/扩图方式>)

此参数指定在无标识3D跟踪中新特征的提取位置。此参数是和边缘初始化功能同时加入SDK的新参数。

    Narrow: 把新特征限定在<TriangleMesh>上,这样会提高特征准确度并且允许模型相对于环境做稍微的移动。但是由于跟踪很容易丢失,此模式也限定了跟踪的范围。

    Wide: 默认无标识3D跟踪模式。此模式比narrow的跟踪范围(以初始化为原点)更广,但不允许模型在环境中移动。

  • <FeatureTracking/Parameters/NumExtensibleFeatures>   (<特征跟踪/参数/可扩展特征数量>)

此参数指定在无标识3D跟踪中所能匹配和跟踪的特征点数量最大值。在一般情况下,我们建议使用1000个或以上特征点。根据环境和设备的能力,3000个或更多特征点也可以得到有效的处理。更多的特征点可使跟踪范围扩大,但同时也会使跟踪效率降低。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享至:
| 1 人收藏
回复

使用道具 举报

该用户从未签到

沙发
zhangxin 发表于 2015-4-13 10:30:31 只看该作者
好贴,先浏览一遍,然后实际开发再祥看
回复 支持 反对

使用道具 举报

该用户从未签到

板凳
whyou0806 发表于 2015-9-6 23:01:16 只看该作者
想請問一下
我做出來之後的輪廓都有對準到我模型
但是我一移動我的輪廓位置也跟著跑掉
不會回到螢幕的原點
該怎麼辦?
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2013-2017 ARinChina-增强现实中国技术论坛   All Rights Reserved.