文章目录

  • 一、增强现实原理及介绍
    • 1、增强现实介绍
    • 2、增强现实原理介绍
  • 二、增强现实应用
    • 1、应用背景介绍
    • 2、AR应用
      • 2.1、相机矩阵标定
      • 2.2、作为目标背景的图片
      • 2.3、代码部分
      • 2.4、合成结果

一、增强现实原理及介绍

1、增强现实介绍

增强现实,是将物体和相应信息放置在图像数据上的一系列操作的总称。事实上,增强现实在我们生活中的应用已经相当广泛了。比如任天堂的pokeman go,这个产品可以使你看到皮卡丘,杰尼龟出现在现实世界的场景里, 并捕捉他们,这个应该是无数90后小时候的梦想,AR使它变成了现实。

2、增强现实原理介绍

对于背景场景,我们需要首先给定标记,通过计算,获得自己计算机的标定信息,使用获取信息,放置目标模型的图像,获得我们需要的增强现实结果。

二、增强现实应用

1、应用背景介绍

应用目的是将一个茶杯图像放置到一段视频里,下面我们将进行计算机标定,以及目标合成。

2、AR应用

2.1、相机矩阵标定

下面这张是用来进行相机矩阵标定的图片

首先,相机到目标物体的距离d为500mm,计算出书的边长fX,fY。以及相片里书的边长fx,fy
利用
Px=fx/fX∗d
fy=fy/fY∗d
计算出相机的焦距。

2.2、作为目标背景的图片


2.3、代码部分

import math
import pickle
from pylab import *
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import pygame, pygame.image
from pygame.locals import *
from PCV.geometry import homography, camera
from PCV.localdescriptors import siftdef cube_points(c, wid):""" Creates a list of points for plottinga cube with plot. (the first 5 points arethe bottom square, some sides repeated). """p = []# bottomp.append([c[0]-wid, c[1]-wid, c[2]-wid])p.append([c[0]-wid, c[1]+wid, c[2]-wid])p.append([c[0]+wid, c[1]+wid, c[2]-wid])p.append([c[0]+wid, c[1]-wid, c[2]-wid])p.append([c[0]-wid, c[1]-wid, c[2]-wid]) #same as first to close plot# topp.append([c[0]-wid, c[1]-wid, c[2]+wid])p.append([c[0]-wid, c[1]+wid, c[2]+wid])p.append([c[0]+wid, c[1]+wid, c[2]+wid])p.append([c[0]+wid, c[1]-wid, c[2]+wid])p.append([c[0]-wid, c[1]-wid, c[2]+wid]) #same as first to close plot# vertical sidesp.append([c[0]-wid, c[1]-wid, c[2]+wid])p.append([c[0]-wid, c[1]+wid, c[2]+wid])p.append([c[0]-wid, c[1]+wid, c[2]-wid])p.append([c[0]+wid, c[1]+wid, c[2]-wid])p.append([c[0]+wid, c[1]+wid, c[2]+wid])p.append([c[0]+wid, c[1]-wid, c[2]+wid])p.append([c[0]+wid, c[1]-wid, c[2]-wid])return array(p).Tdef my_calibration(sz):row, col = szfx = 2245*col/3120fy = 2173*row/4160K = diag([fx, fy, 1])K[0, 2] = 0.5*colK[1, 2] = 0.5*rowreturn Kdef set_projection_from_camera(K): glMatrixMode(GL_PROJECTION) glLoadIdentity()fx = K[0,0] fy = K[1,1] fovy = 2*math.atan(0.5*height/fy)*180/math.pi aspect = (width*fy)/(height*fx)near = 0.1 far = 100.0gluPerspective(fovy,aspect,near,far) glViewport(0,0,width,height)def set_modelview_from_camera(Rt): glMatrixMode(GL_MODELVIEW) glLoadIdentity()Rx = np.array([[1,0,0],[0,0,-1],[0,1,0]])R = Rt[:,:3] U,S,V = np.linalg.svd(R) R = np.dot(U,V) R[0,:] = -R[0,:]t = Rt[:,3]M = np.eye(4) M[:3,:3] = np.dot(R,Rx) M[:3,3] = tM = M.Tm = M.flatten()glLoadMatrixf(m)def draw_background(imname):bg_image = pygame.image.load(imname).convert() bg_data = pygame.image.tostring(bg_image,"RGBX",1)glMatrixMode(GL_MODELVIEW) glLoadIdentity()glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)glEnable(GL_TEXTURE_2D) glBindTexture(GL_TEXTURE_2D,glGenTextures(1)) glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,width,height,0,GL_RGBA,GL_UNSIGNED_BYTE,bg_data) glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST) glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)glBegin(GL_QUADS) glTexCoord2f(0.0,0.0); glVertex3f(-1.0,-1.0,-1.0) glTexCoord2f(1.0,0.0); glVertex3f( 1.0,-1.0,-1.0) glTexCoord2f(1.0,1.0); glVertex3f( 1.0, 1.0,-1.0) glTexCoord2f(0.0,1.0); glVertex3f(-1.0, 1.0,-1.0) glEnd()glDeleteTextures(1)def draw_teapot(size):glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) glEnable(GL_DEPTH_TEST) glClear(GL_DEPTH_BUFFER_BIT)glMaterialfv(GL_FRONT,GL_AMBIENT,[0,0,0,0]) glMaterialfv(GL_FRONT,GL_DIFFUSE,[0.5,0.0,0.0,0.0]) glMaterialfv(GL_FRONT,GL_SPECULAR,[0.7,0.6,0.6,0.0]) glMaterialf(GL_FRONT,GL_SHININESS,0.25*128.0) glutSolidTeapot(size)width,height = 1000,747
def setup():pygame.init() pygame.display.set_mode((width,height),OPENGL | DOUBLEBUF) pygame.display.set_caption("OpenGL AR demo")    # compute features
sift.process_image('book_frontal.JPG', 'im0.sift')
l0, d0 = sift.read_features_from_file('im0.sift')sift.process_image('book_perspective.JPG', 'im1.sift')
l1, d1 = sift.read_features_from_file('im1.sift')# match features and estimate homography
matches = sift.match_twosided(d0, d1)
ndx = matches.nonzero()[0]
fp = homography.make_homog(l0[ndx, :2].T)
ndx2 = [int(matches[i]) for i in ndx]
tp = homography.make_homog(l1[ndx2, :2].T)model = homography.RansacModel()
H, inliers = homography.H_from_ransac(fp, tp, model)K = my_calibration((747, 1000))
cam1 = camera.Camera(hstack((K, dot(K, array([[0], [0], [-1]])))))
box = cube_points([0, 0, 0.1], 0.1)
box_cam1 = cam1.project(homography.make_homog(box[:, :5]))
box_trans = homography.normalize(dot(H,box_cam1))
cam2 = camera.Camera(dot(H, cam1.P))
A = dot(linalg.inv(K), cam2.P[:, :3])
A = array([A[:, 0], A[:, 1], cross(A[:, 0], A[:, 1])]).T
cam2.P[:, :3] = dot(K, A)Rt=dot(linalg.inv(K),cam2.P)setup()
draw_background("book_perspective.bmp")
set_projection_from_camera(K)
set_modelview_from_camera(Rt)
draw_teapot(0.05)pygame.display.flip()
while True: for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit()

2.4、合成结果

计算机视觉——增强现实(Augmented Reality)相关推荐

  1. 增强现实(Augmented Reality)浅谈

    http://www.86ar.com/?p=1693 随着互联网的不断发展,各种需求不断的被发现和改善,Yahoo.Google.Youtube,Facebook.Twitter等的出现掀起一次又一 ...

  2. AR增强现实 Augmented Reality

    增强现实(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术最早于1990 ...

  3. Human Interface Guidelines - Augmented Reality

    Augmented reality 增强现实 Augmented reality (or AR) lets you deliver immersive, engaging experiences th ...

  4. Unity增强现实初学者指南视频教程 A Beginner’s Guide to Augmented Reality with Unity

    Unity增强现实初学者指南视频教程 A Beginner's Guide to Augmented Reality with Unity MP4 |视频:h264,1280×720 (部分1920X ...

  5. 增强现实(AR:Augmented Reality ) 之介绍及应用

    一.什么是增强现实? 当你想知道今天的天气情况的时候,还是在听新闻联播之后的天气预报吗?当你想知道哪辆公车可以回家的时候,还是要挨个公交站牌去找寻么?当你想认识一个漂亮mm的时候,还是要鼓起勇气跑上前 ...

  6. AR(Augmented Reality)学习

    AR(Augmented Reality)学习 AR硬件概览 AR硬件发展的驱动力源于计算机处理器.显示技术.传感器.移动网络速率.电池续航等多个领域的技术进步. 目前能够确定的AR硬件类型有以下几种 ...

  7. ARVE: Augmented Reality Applications in Vehicle to Edge Networks

    ARVE:车辆到边缘网中的增强现实应用 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文.由于时间仓促 ...

  8. 论文阅读(4)What, How, and Why are Visual Assets used in Industrial Augmented Reality?

    A Systematic Review and Classification in Maintenance, Assembly, and Training (from1997 to 2019) Abs ...

  9. Augmented Reality Law, Privacy, and Ethics

    Augmented Reality Law, Privacy, and Ethics Law, Society, and Emerging AR Technologies Brian D. Wasso ...

最新文章

  1. java设置面板的颜色_java – 修改颜色选择器面板
  2. opencv颜色识别java,Opencv颜色识别与追踪
  3. nyist-组队赛(七)
  4. linux磁盘fio压力测试,fio进行磁盘压力测试
  5. mysql_query mysqli_query_如何在PHP中使用mysqli_query()?
  6. Matplotlib库入门
  7. 3个方法解决百度网盘限速 (2018-07-20)
  8. unix到底有啥用_微信新上线的「拍拍」到底有啥用?
  9. java 神经网络算法_70行Java代码实现深度神经网络算法分享
  10. Unity3D游戏开发学习线路图附全套视频教程2019最新版
  11. 华为手机遮挡html页面,手机知识:华为手机老是显示屏幕被遮挡
  12. 创建uni-app 微信小程序项目
  13. 淘宝天猫页面详情采集API调用展示(APP端商品详情)
  14. 计算机类外文翻译论文,计算机专业毕业论文 外文翻译.doc
  15. QT HTTP接收多个数据包生成图片
  16. 重磅!IEEE Fellow周礼栋担任微软全球资深副总裁
  17. 实时监测文件内容变化,Python
  18. GDKOI2018爆炸记
  19. android 集成分享!!
  20. 什么是ros,为什么使用ros

热门文章

  1. workerman应用ssl
  2. 在HTML中rotate属性,Css3属性RotateX的使用
  3. 更改内存频率导致电脑用不了怎么解决?
  4. Spring 依赖注入详解
  5. Log4j日志脱敏记录一下
  6. 网路游侠:也说“IT和互联网创业”
  7. 自定义Palette(二)
  8. 俄罗斯成功断开全球互联网背后,电力物联网已成为大国斗争“新战场”!
  9. Java内省机制之PropertyDescriptor用法的坑
  10. spring boot修改context path