转自:http://www.cnblogs.com/polobymulberry/p/5905912.html
看过example后,就会想自己动动手,这里改改那里修修。我们先试着添加自己喜欢的marker/nft进行识别。
比如我做了一个法拉利的marker:
![](https://img.haomeiwen.com/i6271428/47eec305244e6695.png)
还有网上找了一个法拉利logo的图片用于NFT(Natural Feature Tracking):
![](https://img.haomeiwen.com/i6271428/786d2f9fde1e6432.jpg)
对应显示的模型是这样的(仅供参考^_^!)
![](https://img.haomeiwen.com/i6271428/9f4b0b27737c7920.jpg)
0x01 - marker制作流程
1.制作marker图片
首先我们找到doc/patterns/Blank pattern.png,使用这个空白的marker图片制作出自己想要的marker。之所以使用这个blank pattern,是因为这个空白marker图片的符合marker的基本要求:
必须是方形。
必须有连续的边缘(一般来说全是白色或黑色)。另外在marker里面的pattern部分,我们使用差别较大的两种颜色分别表示前后景(比如此处我用黑色表示法拉利logo,白色作为其背景)。默认情况下,边缘的厚度占pattern图片的1/4。
- 被边缘所包围的部分就是我们所称的pattern,其必须具有旋转不对称性。pattern可以是黑白的,也可以是彩色的。
我们将法拉利的logo弄成黑白的,再添加到blank pattern中。得到以下maker:
![](https://img.haomeiwen.com/i6271428/2799cabcbcaee335.png)
2.训练marker图片
我们使用这个在线工具"Tarotaro"进行训练(如果想离线训练,可以使用ARToolKit提供的mk_patt的离线工具)。
a.打开Tarotaro网站并点击下面红框链接。
![](https://img.haomeiwen.com/i6271428/2914fce0e2aed954.png)
b.会打开如下的工具。这时将你需要训练的marker放入摄像头视野中,直到marker边缘出现红色边框。
界面介绍:
Mode Select:有Camera Mode和Load marker image两种方式。我们下面使用的就是Camera Mode方式。Load marker image是直接输入本地的marker图片进行训练。
Marker Segments和Marker Size我还不是很清楚是什么。我们这选择默认参数即可。
![](https://img.haomeiwen.com/i6271428/da55c73d804e81a5.png)
c.当marker边缘出现红色边框后,我们点击Get Pattern按钮,就可以得到下图,我们可以看到marker边框变成绿色了,此时我们选择Save Current按钮就可以得到对应的pattern文件,此处将其命名为ferrari.patt(初始后缀是pat,可以自己修改为patt)。
![](https://img.haomeiwen.com/i6271428/3d206d1c22993857.png)
3.修改配置文件
我们选择example中的ARApp2的配置文件进行更改。主要是更改models.dat和markers.dat文件。
我们先将ferrari.patt文件和网上搜罗来的ferrari模型文件导入到ARApp2中。
![](https://img.haomeiwen.com/i6271428/8657c85b15c145fa.png)
![](https://img.haomeiwen.com/i6271428/d55ed0e7d6498d12.png)
在markers.dat添加
![](https://img.haomeiwen.com/i6271428/18c47acf645f0e28.png)
在model.dat添加
![](https://img.haomeiwen.com/i6271428/7946a1b01d73ea0a.png)
4.编译运行
配置文件修改完成后,我们就可以编译运行了。请看结果:
![](https://img.haomeiwen.com/i6271428/4af65ecae69ff16b.png)
![](https://img.haomeiwen.com/i6271428/e94590453f4af64f.png)
0x02 - NFT制作流程
1.选择图片
NFT其实就是提取图片的Natural Feature(自然特征)然后进行跟踪。ARToolKit中会先对图片进行处理,得到一组数据,后续追踪过程使用的其实是处理得到的数据集。并不是什么图片都可以进行NFT,对于进行NFT的图片,有以下一些要求:
追踪的图片必须是矩形图片。
图片必须是jpeg格式。(大部分商用AR SDK支持多种图片格式,比如EasyAR)
图片本身要有足够多的细节和边缘(自相似度较低,并且空间频率较高)。如果图片带有大量模糊或者细节较少的色块,追踪效果会比较差。
图片分辨率的提升会使ARToolKit提取出更多的特征点,这对于相机接近图片的情况或者使用高精度相机的情况,会大大提升追踪效果。
所以我选择下面这张图片做NFT:
![](https://img.haomeiwen.com/i6271428/845b5b7ee0bb0f00.jpg)
2.提取图片特征
![](https://img.haomeiwen.com/i6271428/e27c5a7dfe92f19f.png)
利用genTexData来生成对应的追踪数据
![](https://img.haomeiwen.com/i6271428/d0b88264bef10787.png)
选择提取图片特征的程度,数值越大提取的特征越多。当相机离图片越近的时候,追踪效果会越好。此处使用默认值。
![](https://img.haomeiwen.com/i6271428/4b3d8cc85aa154ea.png)
使用Photoshop查看该图片:
![](https://img.haomeiwen.com/i6271428/8de507cd680fba31.png)
发现其分辨率是72,所以Enter resolution to use这部分输入72。
而最大最小分辨率范围,根据Training ARToolKit Natural Feature Tracking (NFT) to Recognize and Track an Image文章中提到的,根据不同相机分辨率及相机远近有不同取值,一般使用20~120最为合适。而我们这边最大分辨率只有72,所以我选择20~72。
![](https://img.haomeiwen.com/i6271428/bd2c77db475c75c9.png)
得到image set(ferrari-nft.iset)和featureList(ferrari.fset&ferrari.fset3)两组数据
![](https://img.haomeiwen.com/i6271428/28165999801d65b0.png)
![](https://img.haomeiwen.com/i6271428/ad09a2f337412ae2.png)
我们使用dispFeatureSet工具可以显示一下看看特征点提取情况:
![](https://img.haomeiwen.com/i6271428/391777531048b347.png)
![](https://img.haomeiwen.com/i6271428/891fb5399f8c77e4.png)
3.修改配置文件
我们修改ARAppNFT的配置文件来试验我们的成果。
首先添加对应训练数据:
![](https://img.haomeiwen.com/i6271428/ddcc316a61cba4dc.png)
修改markers.dat
![](https://img.haomeiwen.com/i6271428/9b75fd992ba4faa5.png)
和上面marker图片训练一样,添加法拉利模型,并在models.dat中添加法拉利模型显示信息:
![](https://img.haomeiwen.com/i6271428/0be59aba7c49199f.png)
4.编译运行
![](https://img.haomeiwen.com/i6271428/c446583c0f395625.jpg)
网友评论