计算机视觉——增强现实(Augmented Reality)
文章目录
- 一、增强现实原理及介绍
- 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)相关推荐
- 增强现实(Augmented Reality)浅谈
http://www.86ar.com/?p=1693 随着互联网的不断发展,各种需求不断的被发现和改善,Yahoo.Google.Youtube,Facebook.Twitter等的出现掀起一次又一 ...
- AR增强现实 Augmented Reality
增强现实(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术最早于1990 ...
- Human Interface Guidelines - Augmented Reality
Augmented reality 增强现实 Augmented reality (or AR) lets you deliver immersive, engaging experiences th ...
- 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 ...
- 增强现实(AR:Augmented Reality ) 之介绍及应用
一.什么是增强现实? 当你想知道今天的天气情况的时候,还是在听新闻联播之后的天气预报吗?当你想知道哪辆公车可以回家的时候,还是要挨个公交站牌去找寻么?当你想认识一个漂亮mm的时候,还是要鼓起勇气跑上前 ...
- AR(Augmented Reality)学习
AR(Augmented Reality)学习 AR硬件概览 AR硬件发展的驱动力源于计算机处理器.显示技术.传感器.移动网络速率.电池续航等多个领域的技术进步. 目前能够确定的AR硬件类型有以下几种 ...
- ARVE: Augmented Reality Applications in Vehicle to Edge Networks
ARVE:车辆到边缘网中的增强现实应用 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文.由于时间仓促 ...
- 论文阅读(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 ...
- Augmented Reality Law, Privacy, and Ethics
Augmented Reality Law, Privacy, and Ethics Law, Society, and Emerging AR Technologies Brian D. Wasso ...
最新文章
- java设置面板的颜色_java – 修改颜色选择器面板
- opencv颜色识别java,Opencv颜色识别与追踪
- nyist-组队赛(七)
- linux磁盘fio压力测试,fio进行磁盘压力测试
- mysql_query mysqli_query_如何在PHP中使用mysqli_query()?
- Matplotlib库入门
- 3个方法解决百度网盘限速 (2018-07-20)
- unix到底有啥用_微信新上线的「拍拍」到底有啥用?
- java 神经网络算法_70行Java代码实现深度神经网络算法分享
- Unity3D游戏开发学习线路图附全套视频教程2019最新版
- 华为手机遮挡html页面,手机知识:华为手机老是显示屏幕被遮挡
- 创建uni-app 微信小程序项目
- 淘宝天猫页面详情采集API调用展示(APP端商品详情)
- 计算机类外文翻译论文,计算机专业毕业论文 外文翻译.doc
- QT HTTP接收多个数据包生成图片
- 重磅!IEEE Fellow周礼栋担任微软全球资深副总裁
- 实时监测文件内容变化,Python
- GDKOI2018爆炸记
- android 集成分享!!
- 什么是ros,为什么使用ros