0x00 - 前言
PS : 我突然意識到ARToolKit本質可能就是一個可以實時求解相機內外參的解決方案。
拿到一個新的SDK,90%的人應該都會先跑一下Example。拿到ARToolKit的SDK,也不例外。不過本人之前是做iOS開發的,所以從官網下載的是ARToolKit5-bin-5.3.2-iOS.tar.gz。后面的博客內容基本上也都是圍繞這個SDK進行的。當然,如果今年秋季出了ARToolKit6,我也會立馬跟進的,聽說ARToolKit加入了SLAM。
0x01 – 示例簡介
example | pattern | result |
ARApp | ![]() |
![]() 解鎖技能:觸摸該正方體,正方體將會旋轉 |
ARApp2 | ![]() 總共4個marker |
![]() 支持multi markers |
ARAppOSG | ![]() 總共2個marker |
![]() |
ARAppMovie | ![]() |
![]() |
ARAppNFT | ![]() |
![]() |
ARAppNFTOSG | ![]() |
![]() |
ARAppCameraTest | 無 | 主要是為了測試相機的若干功能,比如屏幕分辨率切換、截屏、前后攝像頭切換。 |
ARAppES1 | ![]() |
![]() |
0x02 - Pattern文件
pattern指的是你識別的圖片模板,雖然上述表格使用圖片來表示pattern,但是在ARToolKit中,我們需要對圖片進行訓練,對於marker類型的圖片是輸出”.patt”文件以便ARToolKit進行識別。而NFT(Natural Feature Tracking)自然圖片是輸出FeatureList,比如上述使用的pinball.jpg輸出的FeatureList就是“pinball.fset”、”pinball.fset3”(而pinball.iset表示的是pinball.jpg的image set,即原始的圖片信息)。關於圖片/marker訓練這一部分后面會專門開一章詳解。
pattern的圖片可以打印出來,example中的pattern圖片都是放在doc/patterns文件夾下。比如hiro pattern的pattern文件就是hiro.patt。
打開hiro.patt文件,你可以看到里面全是數字,不過很明顯,這些應該都是顏色值:
考慮到hiro是黑白圖,所以我將這些顏色值當做灰度值進行了圖片輸出,得到了下面這張圖片。敢情hiro.patt的本質其實是這樣的:
而pinball.jpg的pattern文件是這樣的:
pinball.fset &pinball.fset3 |
![]() |
Tip
pattern的圖片存放在doc/patterns文件夾下,hiro pattern有兩張圖片
hiro pattern with border | hiro pattern |
![]() |
![]() |
實際使用中,可以明顯發現hiro pattern with border的識別率遠遠高於hiro pattern,這是因為有了border的對比(注意到border和pattern黑色邊緣的對比明顯),對於pattern的識別率有顯著提高。
0x03 - 其他配置文件
除了pattern文件,每個example都有三個同樣的文件 – camera_para.dat、markers.dat、models.dat。
- camera_para.dat
相機標定獲取到的相機內參。
下圖解釋了內參與外參的含義(來源自知乎機器視覺的相機標定到底是什么?)。
- markers.dat
- models.dat
另外還有TRANSPARENT選項,添加這個字段表示該模型有透明部分。
其實你也可以通過修改程序,增加自己的配置選項,還是很方便擴展的。