日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机视觉编程——照相机模型

發布時間:2025/4/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机视觉编程——照相机模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 照相機模型
    • 1 針孔照相機模型
      • 1.1 照相機矩陣
      • 1.2 三維點的投影
      • 1.3 照相機矩陣的分解
      • 1.4 計算照相機中心
    • 2 照相機標定
    • 3 以平面和標記物進行姿態估計
    • 4 總結

照相機模型

1 針孔照相機模型

針孔照相機模型是計算機視覺中廣泛使用的照相機模型。該相機從一個小孔采集射到暗箱內部的光線。在真空照相機模型中,在光線投射到圖像平面之前,從唯一一個點經過。

圖1 針孔照相機模型
在圖中示出了與針孔相機映射有關的幾何形狀。該圖包含以下基本對象:

  • 一個原點在O點的三維正交坐標系,這也是相機光圈的位置。坐標系的三個軸被稱為X1、X2、X3。X3軸指向相機的觀察方向,稱為光軸、主軸或主射線。由軸X1和X2張成的平面是相機的正面,或稱主平面。
  • 一個像平面,其中三維世界通過相機光圈進行投影。像平面平行于軸X1和X2,并且在X3軸的負方向上與原點O距離為f,其中f是針孔相機的焦距。針孔相機的實際實現意味著像平面的位置應使與X3軸在坐標-f處相交,其中f>0。
  • 在光軸和像平面相交處的點R,該點稱為主點或圖像中心。
  • 真實世界中的某一點P,有相對于軸X1、X2、X3的坐標(x1,x2,x3)。點P在相機中的投影線。也就是圖中穿過點P和點O的綠線。點P在像平面上的投影,記作點Q。這個點由投影線(綠色)與像平面的交點表示。在任何實際情況下,我們可以假設x3>0,這意味著交點是定義良好的。
  • 在像平面上也有一個二維坐標系:原點在R,軸Y1和Y2分別平行于X1和X2。點Q相對于這個坐標系的坐標是(y1,y2)。

具體相關信息參考:https://zhuanlan.zhihu.com/p/124298599;https://blog.csdn.net/lsh_2013/article/details/47615309

1.1 照相機矩陣

照相機矩陣可以分解為:

其中,R是描述照相機方向的旋轉矩陣,t是描述照相機中心位置的三維平移向量,內標定矩陣K描述照相機的投影性質。標定矩陣僅和照相機自身的情況相關,通常情況下可以寫成:

圖像平面和照相機中心的距離稱為焦距f。當像素數組在傳感器上偏斜的時候,需要用到傾斜參數s。在大多數情況下s可以設置為0。

縱橫比例α是在像素元素非正方形的情況下使用的,通常情況下可以默認設置α=1。

除焦距之外,標定矩陣中剩余的唯一參數為光心,即主點,也就是光線坐標軸和圖像平面的交點。因為光心通常在圖像的中心,并且圖像的坐標是從左上角開始計算的,所以光心的坐標常接近于圖像高度和寬度的一半。

1.2 三維點的投影

創建一個照相機類,用來處理對照相機和投影建模所需要的全部操作:

from scipy.import linalgclass Camera(object):def _init_(self, p):self.p = pself.K = Noneself.R = Noneself.t = Noneself.c = Nonedef project(self, x):x = dot(self.P, X)for i in range(3):x[i] /= x[2]return x

下邊的例子將三維中的點投影到圖像視圖中:

from PIL import Image from pylab import * from numpy import * import camerapoints = loadtxt('house.p3d').T points = vstack((points, ones(points.shape[1])))P = hstack((eye(3), array([[0], [0], [-10]]))) cam = camera.Camera(P) x = cam.project(points)figure() plot(x[0], x[1], 'k.') show()

首先使用齊次坐標表示這些點,然后使用一個投影矩陣來創建Camera對象將這些三維點投影到圖像平面并執行繪制操作,得到的結果如下圖所示:

圖2 圖像視圖投影后的點
下邊的代碼圍繞這個隨機的三維變量進行增量旋轉的投影,使用rotation_matrix()函數創建了一個進行三維旋轉的旋轉矩陣,可以運行代碼多次進行不同的隨機旋轉并觀察結果。
圖3 照相機旋轉后的三種投影軌跡

1.3 照相機矩陣的分解

如果給定一個照相機矩陣P,需要恢復內參數K以及照相機的位置t和姿勢R,這種矩陣分塊操作稱為因子分解。

下面的代碼使用RQ銀子分解的方法。但這種分解方法的結果并不是唯一的,分解的結果存在二義性。由于需要限制旋轉矩陣R為正定的,所以如果需要可以在求解的結果中加入變換T來改變符號。

def factor(self):K, R = li.rq(self.P[:, :3])T = diag(sign(diag(K)))if li.det(T) < 0:T[1, 1] *= -1self.K = dot(K, T)self.R = dot(T, R)self.t = dot(li.inv(self.K), self.P[:, 3])return self.K, self.R, self.t

1.4 計算照相機中心

給定照相機投影矩陣P,可以計算出空間上照相機的所在位置。照相機中心為C,是一個三維點,滿足約束條件PC=0。對于投影矩陣為P=K[R|t]照相機可以通過下述式子計算C:

下面的代碼可以按照上述公式返回機選照相機的中心:

def center(self):if self.c is not None:return self.celse:self.factor()self.c = -dot(self.R.T, self.t)return self.c

2 照相機標定

標定照相機是指計算出該照相機的內參數。

具體步驟如下:

  • 測量你選定矩形標定物體的變長dX和dY;
  • 將照相機和標定物體放置在平面上,使得照相機的背面和標定物體平行,同時物體位于照相機圖像視圖的中心;
  • 測量標定物體到照相機的距離dZ;
  • 拍攝一幅圖像來檢驗該設置是否正確,即標定物體的邊要和圖像的行和列對齊;
  • 使用像素數來測量標定物體圖像的寬度和高度。

測量到的數據寫入一個輔助函數:

def my_calibration(sz):row, col = szfx = 3158 * col / 4032fy = 3019 * row / 3024K = diag([fx, fy, 1])K[0, 2] = 0.5 * colK[1, 2] = 0.5 * rowreturn K

該函數的輸入參數為表示圖像大小的元組,返回參數為標定矩陣。

3 以平面和標記物進行姿態估計

使用下面的代碼提取兩幅圖像的SIFT特征,然后使用RANSAC算法穩健地估計單應性矩陣:

sift1.process_image('qinghai1.jpg', 'im0.sift') l0, d0 = sift.read_features_from_file('im0.sift')sift1.process_image('qinghai2.jpg', 'im1.sift') l1, d1 = sift.read_features_from_file('im1.sift')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[ndx, :2].T)model = homography.RansacModel() H = homography.H_from_ransac(fp, tp, model)

該單應性矩陣將一幅圖像中標記物上的點映射到另一幅圖像中的對應點。定義相應的三維坐標系,使標記物在X-Y平面上,原點在標記物的某位置上。

為了檢驗單應性矩陣結果的正確性,需要將一些簡單的三維物體放置在標記物上,下邊的函數用來產生立方體上的點:

def cube_points(c, wid):p = []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])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])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

接下來可以實現兩個視圖間的相對變換:

K = my_calibration((747, 1000))box = cube_points([0, 0, 0.1], 0.1)cam1 = camera.Camera(hstack((K, dot(K, array([[0], [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)box_cam2 = cam2.project(homography.make_homog(box))

第一個產生的標定矩陣就是在該圖像分辨率大小下的標定矩陣,cube_points()函數產生的前五個點對應與立方體底部的點。

使用下邊的代碼來可視化這些投影后的點:

im0 = array(Image.open('qinghai1.jpg')) im1 = array(Image.open('qinghai2.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()

為了能夠之后再次使用,可以使用Pickle將這些照相機矩陣保存起來:

import picklewith open('ar_camera.pkl', 'w') as f:pickle.dump(K, f)pickle.dump(dot(linalg.inv(K), cam2.P), f)

圖4 使用計算出的照相機矩陣變換立方體

4 總結

這一部分從計算給定平面場景物體的照相機矩陣入手,結合特征匹配和單應性矩陣以及照相機標定技術,完成在一幅圖像上放置一個立方體。有了照相機姿態估計技術,就可以學習如何創建簡單增強現實應用的基本技術。

總結

以上是生活随笔為你收集整理的计算机视觉编程——照相机模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费看的一级片 | 91传媒理伦片在线观看 | 久久久久1 | 日韩三区在线 | 夜夜狠狠擅视频 | 伊人精品影院 | 奇米一区二区三区 | 亚洲国产小视频 | 亚洲一二三区在线 | 灌篮高手全国大赛电影 | 美女av网| bl动漫在线观看 | 国产欧美精品在线观看 | 日本熟妇浓毛 | 中文字幕一区二区三区乱码不卡 | 91丨九色丨蝌蚪丨老版 | 久久激情网站 | 国产三级三级三级 | 国产在线视频一区二区 | 无码人妻aⅴ一区二区三区有奶水 | 欧美毛片在线 | 在线观看亚洲国产 | 国产无套视频 | 欧美日韩国产精品一区二区三区 | 成人欧美一区二区三区 | 91网址在线观看 | 女女互慰揉小黄文 | 久久视| 日本国产在线观看 | 日韩一卡二卡在线 | 午夜xxxx| 亚洲蜜臀av乱码久久精品蜜桃 | 乳色吐息在线观看 | 中文字幕无码不卡免费视频 | 五月天六月色 | 亚洲av成人精品一区二区三区 | 成人区人妻精品一区 | 国产真人无遮挡作爱免费视频 | 美妇湿透娇羞紧窄迎合 | 日韩在线第一区 | 欧美亚一区二区三区 | 精品久久久久久亚洲综合网站 | 日本特级黄色 | 亚洲精品视屏 | 亚州精品国产精品乱码不99按摩 | 久草一本 | 视频免费在线观看 | 国产在线h | 亚洲欧美bt| 老子影院午夜伦不卡大全 | 中国女人内谢69xxxx免费视频 | 久久精品国产99精品国产亚洲性色 | 国产精品亚洲二区 | 国产精品刘玥久久一区 | 一区二区三区四区人妻 | 91pron在线 | 一道本av| aaaaa级少妇高潮大片免费看 | 伊人动漫| 日本热久久 | 一级片一区| 91精品婷婷国产综合久久竹菊 | 成人啪啪网站 | 久久成 | 一级肉体全黄毛片 | 永久免费在线 | 国产jk精品白丝av在线观看 | 国产综合内射日韩久 | 成人性生交大片免费看中文 | 精品人妻一区二区三区日产乱码 | 三上悠亚人妻中文字幕在线 | 影音先锋婷婷 | av资源免费看 | 黄色在线观看国产 | 亚洲视频中文字幕 | 麻豆出品 | 日韩成人在线观看 | 亚洲视频一区二区三区四区 | 成人a毛片久久免费播放 | 日韩av一区二区三区在线观看 | 奇米四色网 | 久久久久久久久久综合 | 日韩欧美一区在线 | 中文字幕第九页 | 国产操人 | 原创真实夫妻啪啪av | 精品理论片| 欧美第一精品 | 成年人的视频网站 | 日韩一区二区在线观看视频 | 伊人久久大香线蕉成人综合网 | 日本中文字幕在线观看视频 | 色热热 | 成人黄色一级视频 | 国产高清露脸 | 狼人综合伊人 | 亚洲欧美日韩一区二区三区四区 | 国产人妻一区二区三区四区五区六 | 日韩福利小视频 |