一、視覺定位系統(tǒng)基礎(chǔ)矩陣的原理介紹基礎(chǔ)矩陣我們先說一下對積幾和
對極幾何一定是對二幅圖像而言,對極幾何實(shí)際上是“兩幅圖像之間的對極幾何”,它是圖像平面與以基線為軸的平面束的交的幾何(這里的基線是指連接攝像機(jī)中心的直線),以下圖為例:對極幾何描述的是左右兩幅圖像(點(diǎn)x和x’對應(yīng)的圖像)與以cc’為軸的平面束的交的幾何!
直線cc’為基線,以該基線為軸存在一個(gè)平面束,該平面束與兩幅圖像平面相交,下圖給出了該平面束的直觀形象,可以看到,該平面束中不同平面與兩幅圖像相交于不同直線;
上圖中的灰色平面π,只是過基線的平面束中的一個(gè)平面(當(dāng)然,該平面才是平面束中最重要的、也是我們要研究的平面);
epipolarpoints極點(diǎn)
每一個(gè)相機(jī)的透鏡中心是不同的,會(huì)投射到另一個(gè)相機(jī)像面的不同點(diǎn)上。這兩個(gè)像點(diǎn)用el和er表示,被稱為epipolarpoints極點(diǎn)。兩個(gè)極點(diǎn)el、er分別與透鏡中心ol、or在空間中位于一條直線上。
epipolarplane極面
將x、ol和or三點(diǎn)形成的面稱為epipolarplane極面。
epipolarline極線
直線ol-x被左相機(jī)看做一個(gè)點(diǎn),因?yàn)樗屯哥R中心位于一條線上。然而,從右相機(jī)看直線ol-x,則是像面上的一條線直線er-xr,被稱為epipolarline極線。從另一個(gè)角度看,極面x-ol-or與相機(jī)像面相交形成極線。
極線是3d空間中點(diǎn)x的位置函數(shù),隨x變化,兩幅圖像會(huì)生成一組極線。直線ol-x通過透鏡中心ol,右像面中對應(yīng)的極線必然通過極點(diǎn)er。一幅圖像中的所有極線包含了該圖像的所有極點(diǎn)。實(shí)際上,任意一條包含極點(diǎn)的線都是由空間中某一點(diǎn)x推導(dǎo)出的一條極線。
如果兩個(gè)相機(jī)位置已知,則:
1.如果投影點(diǎn)xl已知,則極線er-xr已知,點(diǎn)x必定投影到右像面極線上的xr處。這就意味著,在一個(gè)圖像中觀察到的每個(gè)點(diǎn),在已知的極線上觀察到該點(diǎn)的其他圖像。這就是epipolarconstraint極線約束:x在右像面上的投影xr必然被約束在er-xr極線上。對于ol-xl上的x,x1,x2,x3都受該約束。極線約束可以用于測試兩點(diǎn)是否對應(yīng)同一3d點(diǎn)。極線約束也可以用兩相機(jī)間的基本矩陣來描述。
2.如果xl和xr已知,他們的投影線已知。如果兩幅圖像上的點(diǎn)對應(yīng)同一點(diǎn)x,則投影線必然交于x。這就意味著x可以用兩個(gè)像點(diǎn)的坐標(biāo)計(jì)算得到。
二、視覺定位系統(tǒng)基礎(chǔ)矩陣如果已知基礎(chǔ)矩陣f,以及一個(gè)3d點(diǎn)在一個(gè)像面上的像素坐標(biāo)p,則可以求得在另一個(gè)像面上的像素坐標(biāo)p‘。這個(gè)是基礎(chǔ)矩陣的作用,可以表征兩個(gè)相機(jī)的相對位置及相機(jī)內(nèi)參數(shù)。
面具體介紹基礎(chǔ)矩陣與像素坐標(biāo)p和p’的關(guān)系。
以o1為原點(diǎn),光軸方向?yàn)閦軸,另外兩個(gè)方向?yàn)閤,y軸可以得到一個(gè)坐標(biāo)系,在這個(gè)坐標(biāo)系下,可以對p,p1(即圖中所標(biāo)p),p2(即圖中所標(biāo)p‘)得到三維坐標(biāo),同理,對o2也可以得到一個(gè)三維坐標(biāo),這兩個(gè)坐標(biāo)之間的轉(zhuǎn)換矩陣為[rt],即通過旋轉(zhuǎn)r和平移t可以將o1坐標(biāo)系下的點(diǎn)p1(x1,y1,z1),轉(zhuǎn)換成o2坐標(biāo)系下的p2(x2,y2,z2)。
則可知,p2=r(p1-t)(1)
采用簡單的立體幾何知識(shí),可以知道
其中,p,p‘分別為p點(diǎn)的像點(diǎn)在兩個(gè)坐標(biāo)系下分別得到的坐標(biāo)(非二維像素坐標(biāo))。rp’為極面上一矢量,t為極面上一矢量,則兩矢量一叉乘為極面的法向量,這個(gè)法向量與極面上一矢量p一定是垂直的,所以上式一定成立。(這里采用轉(zhuǎn)置是因?yàn)閜會(huì)表示為列向量的形式,此處需要為行向量)
采用一個(gè)常用的叉乘轉(zhuǎn)矩陣的方法,
將我們的叉乘采用上面的轉(zhuǎn)換,會(huì)變成
紅框中所標(biāo)即為本征矩陣e,他描述了三維像點(diǎn)p和p‘之間的關(guān)系
有了本征矩陣,我們的基礎(chǔ)矩陣也就容易推導(dǎo)了,
注意到將p和p‘換成p1和p2式(4)也是成立的,且有
q1=k1p1(6)
q2=k2p2(7)
上式中,k1k2為相機(jī)的校準(zhǔn)矩陣,描述相機(jī)的內(nèi)參數(shù)q1q2為相機(jī)的像素坐標(biāo)代入式(4)中,得
上式中p->q1,p‘->q2
這樣我們就得到了兩個(gè)相機(jī)上的像素坐標(biāo)和基礎(chǔ)矩陣f之間的關(guān)系了
二、不同圖像對的基礎(chǔ)矩陣
代碼
# coding: utf-8
# in[1]:
from pil import image
from numpy import *
from pylab import *
import numpy as np
# in[2]:
from pcv.geometry import homography, camera, sfm
from pcv.localdescriptors import sift
# in[5]:
# read features
im1 = array(image.open('im1.jpg'))
sift.process_image('im1.jpg', 'im1.sift')
im2 = array(image.open('im2.jpg'))
sift.process_image('im2.jpg.', 'im2.sift')
# in[6]:
l1, d1 = sift.read_features_from_file('im1.sift')
l2, d2 = sift.read_features_from_file('im2.sift')
# in[7]:
matches = sift.match_twosided(d1, d2)
# in[8]:
ndx = matches.nonzero()[0]
x1 = homography.make_homog(l1[ndx, :2].t)
ndx2 = [int(matches[i]) for i in ndx]
x2 = homography.make_homog(l2[ndx2, :2].t)
d1n = d1[ndx]
d2n = d2[ndx2]
x1n = x1.copy()
x2n = x2.copy()
# in[9]:
figure(figsize=(16,16))
sift.plot_matches(im1, im2, l1, l2, matches, true)
show()
# in[10]:
#def f_from_ransac(x1, x2, model, maxiter=5000, match_threshold=1e-6):
def f_from_ransac(x1, x2, model, maxiter=5000, match_threshold=1e-6):
robust estimation of a fundamental matrix f from point
correspondences using ransac (ransac.py from
/cookbook/ransac).
input: x1, x2 (3*n arrays) points in hom. coordinates.
from pcv.tools import ransac
data = np.vstack((x1, x2))
d = 10 # 20 is the original
# compute f and return with inlier index
f, ransac_data = ransac.ransac(data.t, model,
8, maxiter, match_threshold, d, return_all=true)
return f, ransac_data['inliers']
# in[11]:
# find f through ransac
model = sfm.ransacmodel()
f, inliers = f_from_ransac(x1n, x2n, model, maxiter=5000, match_threshold=1e-3)
print(f)
# in[12]:
p1 = array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]])
p2 = pute_p_from_fundamental(f)
# in[13]:
print(p2)
print(f)
# in[14]:
# p2, f (1e-4, d=20)
# [[ -1.e+00 1.e+01 5.e+02 4.e+03]
# [ 1.e+01 -9.e+01 -4.e+03 5.e+02]
# [ 2.e-02 3.e-03 -1.e+02 1.e+00]]
# [[ -1.e-07 4.e-06 -2.e-03]
# [ -1.e-06 6.e-07 2.e-02]
# [ 1.e-03 -2.e-02 1.e+00]]
# in[15]:
# triangulate inliers and remove points not in front of both cameras
x = sfm.triangulate(x1n[:, inliers], x2n[:, inliers], p1, p2)
# in[16]:
# plot the projection of x
cam1 = camera.camera(p1)
cam2 = camera.camera(p2)
x1p = cam1.project(x)
x2p = cam2.project(x)
# in[17]:
figure(figsize=(16, 16))
imj = sift.appendimages(im1, im2)
imj = vstack((imj, imj))
imshow(imj)
cols1 = im1.shape[1]
rows1 = im1.shape[0]
for i in range(len(x1p[0])):
if (0<= x1p[0][i]
plot([x1p[0][i], x2p[0][i]+cols1],[x1p[1][i], x2p[1][i]],'c')
axis('off')
show()
# in[18]:
d1p = d1n[inliers]
d2p = d2n[inliers]
# in[19]:
# read features
im3 = array(image.open('im3.jpg'))
sift.process_image('im3.jpg', 'im3.sift')
l3, d3 = sift.read_features_from_file('im3.sift')
# in[20]:
matches13 = sift.match_twosided(d1p, d3)
# in[21]:
ndx_13 = matches13.nonzero()[0]
x1_13 = homography.make_homog(x1p[:, ndx_13])
ndx2_13 = [int(matches13[i]) for i in ndx_13]
x3_13 = homography.make_homog(l3[ndx2_13, :2].t)
# in[22]:
figure(figsize=(16, 16))
imj = sift.appendimages(im1, im3)
imj = vstack((imj, imj))
imshow(imj)
cols1 = im1.shape[1]
rows1 = im1.shape[0]
for i in range(len(x1_13[0])):
if (0<= x1_13[0][i]
plot([x1_13[0][i], x3_13[0][i]+cols1],[x1_13[1][i], x3_13[1][i]],'c')
axis('off')
show()
# in[23]:
p3 = pute_p(x3_13, x[:, ndx_13])
# in[24]:
print(p3)
# in[25]:
print(p1)
print(p2)
print(p3)
# in[26]:
# can't tell the camera position because there's no calibration matrix (k)
得到視覺對位系統(tǒng)基礎(chǔ)矩陣如下
室外
得到基礎(chǔ)矩陣如下
醫(yī)院供應(yīng)室水處理設(shè)備清洗流程
雄鷹塑料拖鏈型號(hào)
生態(tài)環(huán)境檢測用水專題(一):HPLC法檢測水中苯氧羧酸類除草劑
山東省近零碳城市、近零碳園區(qū)、近零碳社區(qū)示范創(chuàng)建實(shí)施方案印發(fā)
應(yīng)急通信市場前景廣闊 產(chǎn)業(yè)升級是必然趨勢
視覺定位系統(tǒng)原理——基礎(chǔ)矩陣
安徽升級“活牛貸”政策支持“秸稈變?nèi)狻濒呷馀U衽d計(jì)劃
Q41F帶限位開關(guān)反饋信號(hào)球閥詳細(xì)參數(shù)和行程開關(guān)產(chǎn)品特點(diǎn)
CMVC系列三款成像系統(tǒng)產(chǎn)品介紹
離心機(jī)的日常保養(yǎng)
小型商業(yè)綜合體廚房垃圾脫水系統(tǒng)價(jià)格表
油煙檢測裝置-路博LB-7020便攜式油煙檢測儀
談夾具如何設(shè)計(jì)可以將六個(gè)工件工次銑削成形加工
西門子觸摸屏的產(chǎn)品特點(diǎn)
耐強(qiáng)酸強(qiáng)堿反應(yīng)釜是一種特殊的反應(yīng)器
實(shí)驗(yàn)用微型噴霧干燥機(jī)廠家,有效的解決某些粘性物料在旋風(fēng)分離器中粘附的問題
淺析垃圾場除臭設(shè)備的特點(diǎn)
直擊環(huán)境分析熱點(diǎn),賽默飛色譜柱讓分析速度飛!
德國寶德Burkert用于角座閥2000的反饋件
潛水?dāng)嚢铏C(jī)過載的原因