相关站点

jsartoolkit5 - ARToolkit.js

Talkingdata - 用数据的心智去超越

three.js 系列教程 - 良心之作

JSARToolKit 支持多种标记

本文概述了不同的Marker类型,它们是如何在增强现实应用中使用它们的呢。
这是JSARToolKit Marker的基本概述。
Marker是图像或视频中的功能,JSARToolKit可以跟踪并告知您他们在哪里以及他们指向什么位置方向。
JSARToolKit可以跟踪的标记是平面图像。

在“

JSARToolKit5简介”

文章中,我们将一个可打开的框放在条形码标记之上,这是一种特殊类型的内置方形标记,用于对其模式中的数字进行编码。
JSARToolKit中有两种其他类型的标记:方形图像标记和NFT(自然特征跟踪)标记。
方形图像标记是由黑色和白色轮廓包围的正方形图像。
NFT标记是使用先进的计算机视觉机制跟踪自由形式的图像标记。

我们来详细了解每个标记类型,并附上一些您可以玩的样品。

图案标记

图案标记是具有黑色和白色边框的正方形图像,可用于以最少的CPU使用来跟踪自定义图像。
图案标记应该有一个厚实的黑色边框,被一个厚实的白色边框包围。
正方形内的图像应该是高对比度和旋转非对称的(意思是:如果将其平放在桌子上并旋转90度,180度或270度,则每个角度应该看起来不同)

高对比度要求的原因是ARToolKit的工作原理。
ARToolKit将视频图像转换为黑白阈值图像,然后在该图像中查找矩形。
找到形状后,它会在矩形中采样像素,并将读取的像素与注册的标记进行比较。
如果足够的像素与标记相匹配,ARToolKit会告诉您的应用程序,它会找到一个标记,并计算将一个正方形变成矩形在屏幕上的形状的转换矩阵。

这是一个代码片段,初始化JSARToolKit并加载模式标记。
当视频中看到模式标记时,下面的代码将标记详细信息记录到控制台。

var video = document.querySelector('video');
var ar = new ARController(video.videoWidth, video.videoHeight, 'Data/camera_para.dat');
ar.onload = function() {var markerId;// Load pattern marker.//ar.loadMarker('Data/patt.hiro', function(marker) {markerId = marker;});ar.addEventListener('getMarker', function(ev) {if (ev.data.marker.idPatt === markerId) {console.log('saw marker', ev.data.marker);console.log('transformation matrix', ar.getTransformationMatrix());}});console.log('camera matrix', ar.getCameraMatrix());setInterval(function() {ar.process(video);}, 33);
};复制代码
您可以在此演示中看到模式标记跟踪。

条码标记

条码标记使用二进制码在黑白标记上画一个数字。
它们不需要预先注册并使用非常少的CPU。
认为他们是非常低分辨率的QR码,你有这个想法。

他们在封面下工作的方式很像模式标记。
库读回阈值图像数据,将其转换为二进制,并将位转换为数字。
使用条形码标记比使用图案标记更容易。

所有您需要做的是将ARController的模式检测模式设置为其中一种条形码检测模式,并检查标记对象的idMatrix属性。
arController.setPatternDetectionMode( artoolkit.AR_MATRIX_CODE_DETECTION );arController.addEventListener('getMarker', function(ev) {console.log('saw barcode marker', ev.data.marker.idMatrix);
});复制代码
您可以在

此演示中

看到模式标记跟踪。

混合模式跟踪

使用混合模式标记跟踪,您可以跟踪图案标记和条形码标记。
这比跟踪只有一种类型的标记更容易出错,因为某些图案标记可能被误认为条形码标记。
但是如果你需要这样做,它很简单,只需将ARController的模式检测模式设置为混合模式跟踪。

在混合模式跟踪中,getMarker事件返回的标记分别具有idMatrix或idPatt属性,分别设置为条形码ID或模式标记ID。
不匹配的id设置为-1。

以下是如何做到这一点:
arController.setPatternDetectionMode( artoolkit.AR_TEMPLATE_MATCHING_COLOR_AND_MATRIX );arController.addEventListener('getMarker', function(ev) {if (ev.data.marker.idMatrix !== -1) {console.log('saw barcode marker', ev.data.marker.idMatrix);}if (ev.data.marker.idPatt !== -1) {console.log('saw pattern marker', ev.data.marker.idPatt);}
});复制代码
您可以在

此演示中

看到混合模式标记跟踪

NFT标记

NFT(自然特征跟踪)标记用于跟踪自定义矩形图像,并且不需要标记为正方形或在图像周围具有粗边框。
例如,如果您想在架构书中弹出交互式3D模型来构建照片,则可以在每张建筑照片中创建一个NFT标记。

要使用NFT,您需要事先创建标记(参见

关于NFT标记训练的ARToolKit文档

)。

NFT标记包含不同尺度的多个版本的标记图像。
这样,跟踪器可以进行快速的自上而下的图像匹配,从尝试低分辨率匹配开始,并将其下降到相机分辨率匹配。

尚未在JSARToolKit5中实现NFT标记。

多标记跟踪

您可以组合方形图像标记和条形码标记来进行多标记跟踪。
在多标记跟踪中,您已经在单个平面上打印了几个标记,即使某些标记不可见,也可以跟踪表面。
以这种方式,多标记跟踪可以以更加鲁棒的方式跟踪表面,而牺牲了一些额外的CPU使用。

多标记跟踪的另一个优点是您可以将小标记放在非标记内容周围,并使非标记内容的行为像标记。
例如,如果您将地图图像打印在一张纸上,并在其周围印有小标记,则可以将AR内容放在地图的顶部,只要任何多标记图像可见,它就可以工作。

在这个意义上,多标记跟踪的行为有点像NFT跟踪。
多标记与NFT的缺点是您需要使用方形标记图像进行跟踪。
这些优点是,多标记对于将跟踪表面部分遮挡起来更加坚固,并且它们在CPU使用方面更便宜。

var markerId;
var markerCount = 0;// Load multimarker.
//
arController.loadMultiMarker('Data/multi-barcode-4x3.dat', function(marker, subMarkerCount) {markerId = marker;markerCount = subMarkerCount;
});arController.addEventListener('getMultiMarker', function(ev) {if (ev.data.multiMarkerId === markerId) {console.log('saw multimarker', ev.data.multiMarkerId);console.log('transformation matrix', arController.getTransformationMatrix());}
});arController.addEventListener('getMultiMarkerSub', function(ev) {if (ev.data.multiMarkerId === markerId) {console.log('saw submarker', ev.data.markerId, ev.data.marker);}
});
复制代码
您可以在

此演示中

看到多标记跟踪。

结论

我们已经了解了JSARToolKit中可用的不同类型的标记以及如何使用它们。
您可以跟踪的不同类型的标记是方形图像标记,条形码标记,NFT标记和多标记。

选择使用哪种类型的标记取决于您的要求。
如果您需要快速跟踪,请使用方形标记。
如果您需要自定义标记图形,则可以使用方形自定义标记或NFT标记。
如果您需要非正方形标记,则需要使用NFT标记或多标记跟踪。
对于强大的跟踪,请使用多标记跟踪。

使用JSARToolKit5 开发AR应用 (2) Marker相关推荐

  1. 使用JSARToolKit5 开发AR应用 (1) 简介

    相关站点 jsartoolkit5 - ARToolkit.js Talkingdata - 用数据的心智去超越 three.js 系列教程 - 良心之作 介绍 本文是使用JSARToolKit5构建 ...

  2. 3D开发-AR.js 自定义Marker

    创建自定义Marker AR.js Marker Training 上传一张识别图片,然后下载Marker和及图片. 代码 ARjs/three.js/examples/mobile-performa ...

  3. 如何使用JavaScript开发AR(增强现实)移动应用 (一)

    本文封面配图是去年Jerry看的一部电影<异形:契约>的剧照. 所谓AR(Augmented Reality), 即增强现实,是一种将通过计算机渲染出的虚拟图像与真实世界巧妙融合的手段,背 ...

  4. 用 Unity easyAR 开发 AR 发布 Android ios遇到的问题(包括easyAR recording 录屏 用法和问题)(图文详情)

    用 Unity easyAR 开发 AR 发布 Android ios遇到的问题(包括easyAR recording 录屏 用法和问题)(图文详情) 前言 软件环境 发布Android 配置 发布i ...

  5. 受《Pokémon Go》鼓舞,EA要开发“AR+社交”游戏

    EA不但没有受到<Pokémon Go>打击,反而受到这款AR游戏的鼓舞,士气大涨. 前段时间,有传言称任天堂联合Pokémon公司.Niantic开发的手机游戏<Pokémon G ...

  6. 用android studio测量距离,Android studio 百度地图开发(6)Marker绑定事件、计算两点距离...

    Android studio 百度地图开发(6)Marker绑定事件.计算两点距离 email:chentravelling@163.com 开发环境:win7 64位,Android Studio, ...

  7. Rock Paper将为圣地亚哥教士棒球队开发AR游戏

    7月18日青亭网报道,联想.摩托罗拉,以及Rock Paper Reality,将联合圣地亚哥教士棒球队开发一款棒球主题的AR游戏. 很显然,目前高通骁龙Spaces XR开发套件就是基于上述硬件:摩 ...

  8. 如何在Unity中使用WebXR开发AR/VR应用

    WebXR是一种具有巨大潜力的技术,但是目前,它提供的开发工具比独立VR开发差得多,在独立VR开发中,我们使用Unity和Unreal Engine.Mozilla 为沉浸式Web做了大量工作,为Un ...

  9. 使用高通Vuforia开发AR增强现实游戏(开篇)

    @废话在前 之前想做暴风魔镜的VR游戏,最后来香港学习设备没带过来就没继续做,现在开始学习研究做一下AR游戏开发,毕竟对设备的要求比较低,很方便,看了不少资料,最后还是选了Vuforia这个经典的AR ...

最新文章

  1. cgroup限制oracle,Yarn 使用 Cgroup 实现任务资源限制
  2. 音视频技术开发周刊 | 165
  3. rxjs 怎么使用_使用RxJS Observables进行SUPER SAIYAN
  4. cmake 学习笔记
  5. vim打开出现的文档^M什么
  6. django 1.8 官方文档翻译: 3-1-4 视图装饰器
  7. STL之Deque容器
  8. Linux一键编译,linux下一键编译安装MariaDB10.0.12
  9. 天书夜读:从汇编语言到Windows内核编程
  10. 关于H5页面的测试总结与分析
  11. Linux netstat 命令安装
  12. Pdf转Word用Python轻松实现
  13. 如何申请注册微软邮箱(支持海外apple ID注册)亲测
  14. 13年android手机top,2013年安卓ROOT工具大盘点(一键ROOT工具Top10)
  15. fiddler抓取谷歌浏览器的包_fiddler抓不到chrome浏览器的请求
  16. App.config提示错误“配置系统未能初始化”
  17. MinGW-w64在windows下的离线安装
  18. 计算机理论基础知识书面形式,计算机基础知识ord.doc
  19. 什么是闭包?闭包的工作原理、优缺点、使用场景和对页面的影响
  20. 【色度学】颜色的显色系统

热门文章

  1. 浏览器同源策略以及跨域请求时可能遇到的问题
  2. 调用存储过程时报错:There is no ‘username’@'host’ registered
  3. 使用MyEclipse开发第一个Web程序
  4. 深入理解java虚拟机之类文件结构以及加载
  5. html防止iOS将数字识别为电话号码
  6. Android Scroller与computeScroll方法的调用关系
  7. 【结果很简单,过程很艰辛】记阿里云Ons消息队列服务.NET接口填坑过程
  8. linux shell编程(三) if 和 for
  9. 自己动手编写tomcat服务器(三)
  10. 天天动听 悬浮歌词(迷你歌词)效果解读