# 照相机模型与增强现实

• kdx
了解作者
• Python
开发工具
• 1.2MB
文件大小
• 7z
文件格式
• 0
收藏次数
• 6 积分
下载积分
• 0
下载次数
• 2022-06-28 15:43
上传日期

ch04.7z
• ch04
• .idea
• dictionaries
200B
• inspectionProfiles
• Project_Default.xml
1KB
• profiles_settings.xml
235B
• scopes
• scope_settings.xml
139B
• ch04.iml
286B
• misc.xml
1.4KB
• other.xml
187B
• workspace.xml
19.9KB
• testrunner.xml
248B
• .name
4B
• encodings.xml
166B
• modules.xml
262B
• vcs.xml
166B
• im0.sift
1.3MB
• im1.sift
723.1KB
• ch4_ar_cube.py
3.3KB
• siftWin32.exe
92KB
• sift
44KB
• tmp.pgm
729.5KB

from pylab import * from PIL import Image # If you have PCV installed, these imports should work from PCV.geometry import homography, camera from PCV.localdescriptors import sift """ This is the augmented reality and pose estimation cube example from Section 4.3. """ def cube_points(c, wid): """ Creates a list of points for plotting a cube with plot. (the first 5 points are the bottom square, some sides repeated). """ p = [] # bottom 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]) #same as first to close plot # top 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]) #same as first to close plot # vertical sides 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]) p.append([c[0]+wid, c[1]-wid, c[2]-wid]) return array(p).T def my_calibration(sz): """ Calibration function for the camera (iPhone4) used in this example. """ row, col = sz fx = 2555*col/2592 fy = 2586*row/1936 K = diag([fx, fy, 1]) K[0, 2] = 0.5*col K[1, 2] = 0.5*row return K # compute features sift.process_image('../data/book_frontal.JPG', 'im0.sift') l0, d0 = sift.read_features_from_file('im0.sift') sift.process_image('../data/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) # camera calibration K = my_calibration((747, 1000)) # 3D points at plane z=0 with sides of length 0.2 box = cube_points([0, 0, 0.1], 0.1) # project bottom square in first image cam1 = camera.Camera(hstack((K, dot(K, array([[0], [0], [-1]]))))) # first points are the bottom square box_cam1 = cam1.project(homography.make_homog(box[:, :5])) # use H to transfer points to the second image box_trans = homography.normalize(dot(H,box_cam1)) # compute second camera matrix from cam1 and H 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) # project with the second camera box_cam2 = cam2.project(homography.make_homog(box)) # plotting im0 = array(Image.open('book_frontal.JPG')) im1 = array(Image.open('book_perspective.JPG')) figure() imshow(im0) plot(box_cam1[0, :], box_cam1[1, :], linewidth=3) title('2D projection of bottom square') axis('off') figure() imshow(im1) plot(box_trans[0, :], box_trans[1, :], linewidth=3) title('2D projection transfered with H') axis('off') figure() imshow(im1) plot(box_cam2[0, :], box_cam2[1, :], linewidth=3) title('3D points projected in second image') axis('off') show()

相关推荐
• Python
Python Boto3代码
• Python
python程序
• Python
Python
• python
Python，就在这里。
• Python
Python-
• Python
完整的python 其中包含用于学习python的代码，注释和微型项目。
• Python
项目Python
• Python
Pythonpython3中使用乌龟库的简单pong游戏 贡献 拉请求是欢迎的！ :) 执照
• Python
Python Dit是Mijn储存库van Python
• python
Python 基本的python编程