找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 191|回复: 17

增强现实原理浅析(一)

[复制链接]
  • TA的每日心情
    难过
    2016-12-5 15:20
  • 签到天数: 42 天

    [LV.5]常住居民I

    168

    主题

    213

    帖子

    1697

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1697
    发表于 2016-5-18 20:50:30 | 显示全部楼层 |阅读模式
    增强现实这货,挺有意思,至少我这种准技术宅对它颇有好感。
    想象你大爱的动漫人物啪的跳到你的桌子上,我找过一个初音跳舞的demo,
    想象你带上类似google glass之类的东西,轻松导航,识人辫物,
    想象你拿着摄像头对着女朋友,啪的长出两只猫耳朵,一个猫尾巴,(好恶趣味,机器人笔记里看到的)
    ,,,
    总之不多想了,增强现实也可以说是混合现实,是将虚拟事物与现实事物的混合,
    相对于沉浸式的完全虚拟世界的虚拟现实,
    增强现实保留了现实这一元素,作为一种桥梁般的存在。

    下面还是简称AR吧,
    这些日子,研究了不少AR的开源库,
    ARToolKit/plus,ARTag,PTAM/M,BazAR,Mixare等等,好多Android上的AR OpenSource,
    总结起来,大概分两类,一种是基于视觉的AR,一种是基于GPS及方向传感器的AR,
    前者又可分为有模板的AR和无模板的AR,
    有模板的AR又可分为固定模板AR和自定义模板AR,
    呼,好多名词,不过都是我根据其特性起的名字,绝不是神马术语,
    固定模板这种模式已经比较成熟了吧,大名鼎鼎的ARToolKit/plus,ARTag都是这方面的佼佼,
    我没有通读它们的代码,因为光是各个坐标系变换的原理已经足够让我头疼,

    我们尝试用最直白的思路来分析下这个事情,
    首先我们考虑下基于固定模板AR要解决的问题是神马?
    无非是,先有一张事先定义好的模板,可能是一张白纸上面画着固定图案,
    OK,我们把这张纸放到桌子上,
    那么这个模板就定义了一个贴着桌子的平面,给平面加个z轴,就成了个三维坐标系,
    我们拿着摄像头照向这个模板,我们期待此时会有一个3D模型活灵活现的出现在这个三维坐标系里,
    以上,需求就说完了。

    那么怎么做呢,
    首先你摄像头照过去了,程序得先找到模板在哪,ok,这一步叫模板检测,
    模板检测你当然希望快准狠,
    所以你的模板设计的要好同时检测算法要好,这一点ARToolKit和ARTag各有千秋,
    ARTag在抗遮挡性上优于ARToolkit,后来的ARToolKitPlus采用的应该时间ARTag的方法。这个暂不详谈。
    刚才提到那个三维坐标系,我们得知道原点在哪,不然,学过Opengl的孩子们都知道,没原点你上哪画模型去。
    所以说,模板图案的设计得是有说道的,你不能是中心对称的吧,
    要不然,我怎么区分你哪个位置是原点,哪个方向是X轴正方向,哪个方向是Y轴正方向。
    ok,一旦你找到了模板,确定了原点,和坐标系各轴,也就确定世界坐标系了。
    有了世界坐标系,我们就可以在世界坐标系里画3D模型来,
    啊,对不起,不小心把自己当成上帝了,我们当然不能突然跃迁到上帝模式,在现实里面的那个模板上画东西,
    作为程序猴,我们只能在我们的手持设备屏幕上创造模型,
    于是这时候,我们需要变换,
    即把你想在世界坐标系里的坐标变换成屏幕上的坐标,
    这样你在这样的屏幕里画的东东,看起来就像是在世界坐标系里一样,
    你可以把这种变换理解成程序猴由猴到伪上帝的进化,
    从一个坐标系到另一个坐标系的变换,怎么做?
    下面是线性代数的show time,
    没错,想变成Gold - mode,你必须会线性代数,

    首先,从世界坐标系到摄像机坐标系的变换,
    需要矩阵[R|t],R是旋转矩阵,t是平移向量,
    矩阵[R|t]怎么来的,稍后说,
    若世界坐标系坐标为X,摄像机坐标系对应坐标为X',
    则X' = [R|t]*X,
    接下来是摄像头坐标系到理想屏幕坐标系的变换,
    这个时候有个叫摄像头内参矩阵的东东用的上,而上面那个R矩阵被称为外参矩阵,
    我们叫它C,
    C包含摄像头焦距,比例因子,光心位置等信息,
    为了不断思路我们还是暂不详述C的求取过程,
    这实际上是摄像头定标过程,
    比较好的描述可见OpenCV的教材,
    OK,我们用C*[R|t]*X便可得到理想屏幕坐标,
    理想屏幕坐标系和现实屏幕坐标系之间由于光学畸变还有不同,
    我们需要稍作变化,在此不谈,
    总的来说就是,世界坐标系X到现实屏幕坐标系S,之间有那么一系列变换,
    我们简单写成,S=T*X。

    好了,我尽量快而简洁的把,从模板所在坐标系到最终屏幕坐标系上的变换讲完了,
    实际在程序里如何操作呢,我们如何获得[R|t]呢,
    大致上就是已知模板几个关键点在世界坐标系中的坐标后,
    先在摄像头捕获的帧里获得模板上对应关键点在屏幕坐标系中的坐标,
    根据坐标通过求解线性方程组,便能得到初步的[R|t],
    再利用非线性最小二乘法迭代求得一个最优变换矩阵[R|t],
    这就是ARToolKit的做法。

    我内个去,我本来想小说几句,谁知道光说AR其中的一个类型 就说了这么晚,
    我还是先睡吧,明天有空补上。

    新的一天又开始了,加油!

    该用户从未签到

    0

    主题

    17

    帖子

    0

    积分

    LV.1

    Rank: 1

    积分
    0
    QQ
    发表于 2016-5-23 03:51:07 | 显示全部楼层
    找到好贴不容易,我顶你了,谢了

    该用户从未签到

    0

    主题

    5

    帖子

    0

    积分

    LV.1

    Rank: 1

    积分
    0
    QQ
    发表于 2016-5-23 03:51:29 | 显示全部楼层
    找到好贴不容易,我顶你了,谢了

    该用户从未签到

    0

    主题

    5

    帖子

    0

    积分

    LV.1

    Rank: 1

    积分
    0
    QQ
    发表于 2016-5-23 04:12:13 | 显示全部楼层
    帮帮顶顶!!

    该用户从未签到

    0

    主题

    5

    帖子

    0

    积分

    LV.1

    Rank: 1

    积分
    0
    QQ
    发表于 2016-5-23 08:01:05 | 显示全部楼层
    学习了,不错,讲的太有道理了

    该用户从未签到

    0

    主题

    5

    帖子

    0

    积分

    LV.1

    Rank: 1

    积分
    0
    QQ
    发表于 2016-5-23 08:59:32 | 显示全部楼层
    我是来刷分的,嘿嘿

    该用户从未签到

    0

    主题

    3

    帖子

    0

    积分

    LV.1

    Rank: 1

    积分
    0
    QQ
    发表于 2016-5-23 09:40:33 | 显示全部楼层
    路过,学习下

    该用户从未签到

    1

    主题

    6

    帖子

    3

    积分

    LV.1

    Rank: 1

    积分
    3
    发表于 2016-9-2 17:19:30 | 显示全部楼层
    楼主辛苦了。。回帖是一种美德

    该用户从未签到

    4

    主题

    16

    帖子

    12

    积分

    LV.1

    Rank: 1

    积分
    12
    QQ
    发表于 2016-9-9 17:37:26 | 显示全部楼层
    楼主辛苦了,帮楼主顶起来

    该用户从未签到

    1

    主题

    10

    帖子

    2

    积分

    LV.1

    Rank: 1

    积分
    2
    QQ
    发表于 2016-9-9 17:40:31 | 显示全部楼层
    嗯,很不错的样子!!
    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    快速回复 返回顶部 返回列表