国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

相機校準(zhǔn)—外參矩陣

這篇具有很好參考價值的文章主要介紹了相機校準(zhǔn)—外參矩陣。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

相機校準(zhǔn)—外參矩陣

在本文中,我們將探討攝影機的外參,并通過Python中的一個實踐示例來加強我們的理解。

相機外參

攝像頭可以位于世界任何地方,并且可以指向任何方向。我們想從攝像機的角度來觀察世界上的物體,這種從世界坐標(biāo)系到攝像機坐標(biāo)系的轉(zhuǎn)換被稱為攝像機外參。

相機校準(zhǔn)—外參矩陣

那么,我們怎樣才能找到相機外參呢?一旦我們弄清楚相機是如何變換的,我們就可以找到從世界坐標(biāo)系到相機坐標(biāo)系的基變換的變化。我們將詳細探討這個想法。

具體來說,我們需要知道相機是如何定位的,以及它在世界空間中的位置,有兩種轉(zhuǎn)換可以幫助我們:

  • 有助于確定攝影機方向的旋轉(zhuǎn)變換。

  • 有助于移動相機的平移變換。

讓我們詳細看看每一個。

旋轉(zhuǎn)

通過旋轉(zhuǎn)改變坐標(biāo)

讓我們看一下將點旋轉(zhuǎn)一個角度的變換。讓我們舉一個在?2的簡單例子,對點??逆時針旋轉(zhuǎn)角度?? 得到點??′, 如下圖所示:

相機校準(zhǔn)—外參矩陣

??的坐標(biāo)是(??,??) 以及??′的坐標(biāo)是(??′,??′). 我們需要找到(??′,??′).

從圖來看,
      sinα = y/r , cosα = x/r ? [1]
?    xsinα = ycosα ? [2]
同樣的, x′ = rcos(θ+α)
?    x′ = (x/cosα) ? cos(θ+α) (from [1])
但,  cos(θ+α) = cosθcosα ? sinθsinα
?    x′ = (x/cosα) ? (cosθcosα ? sinθsinα)
?    x′ = xcosθ ? xsinα ? (sinθ / cosα)
?    x′ = xcosθ ? ycosα ? (sinθ / cosα) (from [2])
?    x′ = xcosθ ? ysinθ

同樣地,
      y′ = rsin(θ+α)
?    y′ = (y/sinα) ? sin(θ+α) (from [1])
但,  sin(θ+α) = sinθcosα + cosθsinα
?    y′ = (y/sinα) ? (sinθcosα + cosθsinα)
?    y′ = ycosθ + ycosα ? (sinθ / sinα)
?    y′ = ycosθ + xsinα ? (sinθ / sinα) (from [2])
?    y′ = ycosθ + xsinθ
?    y′ = xsinθ + ycosθ

因此我們有,
      x′ = xcosθ ? ysinθ
      y′ = xsinθ + ycosθ

旋轉(zhuǎn)是一種線性運算,上述方程可以表示為矩陣乘法:

相機校準(zhǔn)—外參矩陣

這個操作是一個線性變換。

擴展到R3

我們可以很容易地將旋轉(zhuǎn)變換擴展到??3. 旋轉(zhuǎn)的變換矩陣??關(guān)于標(biāo)準(zhǔn)X軸、Y軸和Z軸,如下所示:

繞Z軸旋轉(zhuǎn):

相機校準(zhǔn)—外參矩陣

繞X軸旋轉(zhuǎn):

相機校準(zhǔn)—外參矩陣

繞Y軸旋轉(zhuǎn):

相機校準(zhǔn)—外參矩陣

內(nèi)參旋轉(zhuǎn)與外參旋轉(zhuǎn)

上述變換圍繞標(biāo)準(zhǔn)軸執(zhí)行旋轉(zhuǎn)。軸將隨時固定。這就是所謂的外參旋轉(zhuǎn)。還有另一種類型的旋轉(zhuǎn)稱為內(nèi)參旋轉(zhuǎn),我們在每一步都圍繞其相對軸旋轉(zhuǎn)對象,如下所示:

相機校準(zhǔn)—外參矩陣

內(nèi)參旋轉(zhuǎn)很難用歐幾里德代數(shù)來實現(xiàn),我們將堅持外參旋轉(zhuǎn)。

基變換

在基變換中,我們的目標(biāo)是在新的基上找到點的坐標(biāo)。

在下面的示例中???? 軸已經(jīng)旋轉(zhuǎn)了一個角度?? 得到??′??′. 給定在原有XY軸下點??的坐標(biāo) , 我們的目標(biāo)是找到在新軸??′??′下點??的坐標(biāo) .

相機校準(zhǔn)—外參矩陣

XY下點P的坐標(biāo)是(x,y) ,新軸X'Y'下是(??′, ??′). 我們的目標(biāo)是找到(??′, ??′).

從這個圖來看,
      sinα = y′/r , cosα = x′/r ? [1]
?    x′sinα = y′cosα ? [2]
同樣, x = rcos(θ+α)
?    x = (x′/cosα) ? cos(θ+α) (from [1])
但,  cos(θ+α) = cosθcosα ? sinθsinα
?    x = (x′ / cosα) ? (cosθcosα ? sinθsinα)
?    x = x′cosθ ? xsinα ? (sinθ / cosα)
?    x = x′cosθ ? y′cosα ? (sinθ / cosα) (from [2])
?    x = x′cosθ ? y′sinθ

同樣地,
      y = rsin(θ+α)
?    y = (y′/sinα) ? sin(θ+α) (from [1])
但,  sin(θ+α) = sinθcosα + cosθsinα
?    y = (y′/sinα) ? (sinθcosα + cosθsinα)
?    y = y′cosθ + y′cosα ? (sinθ / sinα)
?    y = y′cosθ + x′sinα ? (sinθ / sinα) (from [2])
?    y = y′cosθ + x′sinθ
?    y = x′sinθ + y′cosθ

因此我們有,
      x = x′cosθ ? y′sinθ
      y = x′sinθ + y′cosθ

上述方程式可以矩陣形式表示為:

相機校準(zhǔn)—外參矩陣

我們的目標(biāo)是找到(??′,??′). 因此,我們將矩陣移到另一側(cè),取其逆:

相機校準(zhǔn)—外參矩陣

理解線性變換和基變換變化之間的區(qū)別非常重要。

接下來我們將看到這兩種轉(zhuǎn)換是如何關(guān)聯(lián)的。

線性變換與基變換的關(guān)系

如果你觀察,基矩陣的變化是線性變換矩陣的逆。這意味著,如果我們知道攝像機變換矩陣,即在世界上負(fù)責(zé)旋轉(zhuǎn)和移動攝像機的矩陣,我們可以取其逆矩陣,這可以幫助我們找到攝像機上點的坐標(biāo)。

平移

通過平移改變坐標(biāo)

平移的想法很簡單——只要有一點??, 我們移動它一個偏移量來得到點??′ 如下圖所示:

相機校準(zhǔn)—外參矩陣

在這里,我們移動點?? 坐標(biāo)(??, ??) ,偏移量為(???, ??) ,得到點??′ (??′, ??′).。我們的目標(biāo)是找到(??′, ??′).

從這個圖來看,
      x′ = x - a
      y′ = y + b

我們不能將上述方程表示為矩陣乘法——至少不能用它們當(dāng)前的表示形式。

訣竅是增加一個額外的維度,然后我們可以將平移表示為線性變換,如下所示:

相機校準(zhǔn)—外參矩陣

用額外維度表示的坐標(biāo)稱為齊次坐標(biāo)。

為了從齊次坐標(biāo)中得到歐幾里德坐標(biāo),我們只需除以最后一個元素,如下所示:

[x, y, 1] ? [x/1, y/1] = [x, y]

通常,我們在齊次空間中執(zhí)行所有操作,因為這很容易處理,最后,當(dāng)我們完成時,我們轉(zhuǎn)換回歐幾里德空間。稍后我們將看到更多細節(jié)。

通過平移改變基

就像我們之前看到的,在基變換的變化中,我們變換軸而不是點。在下面的示例中,我們移動???? 坐標(biāo)軸偏移以獲得??′??′. 我們的目標(biāo)是找到??′??′下的點??的坐標(biāo).

相機校準(zhǔn)—外參矩陣

舊軸XY下P的坐標(biāo)是(x,y),新軸??′??′ 下P的坐標(biāo)(??′,??′). 這里的偏移量是(??, ??).

從圖上看,
      x′ = x - a
      y′ = y - b

同樣,為了將上述方程表示為矩陣乘法,我們使用齊次坐標(biāo):

相機校準(zhǔn)—外參矩陣

即使在平移中,線性變換和基變換的變化也是相反的。

攝像機外參矩陣

我們分別研究了旋轉(zhuǎn)和平移;然而,我們可以使用如下所示的矩陣組合一次性執(zhí)行這兩個操作:

相機校準(zhǔn)—外參矩陣

在這里?? 是旋轉(zhuǎn)矩陣,形狀是(3,3)和?? 是偏移量矩陣,形狀是(3,1)。

通過求最終變換矩陣的逆,可以得到基矩陣的變化。我們稱這個矩陣是攝像機外參矩陣E,形狀是(4,4)

使用??, 我們可以找到相機上任何一點的坐標(biāo)。

相機校準(zhǔn)—外參矩陣

自由度

相機外參矩陣自由度是6。三個旋轉(zhuǎn)角度和沿X、Y、Z軸的三個偏移。

簡化矩陣

我們可以看到相機外參矩陣的最后一行是0和1。它不會給轉(zhuǎn)換增加任何價值,它的唯一目的是增加一個額外的維度——這意味著,正如我們將在下面的示例中看到的,我們可以刪除最后一行。

實例

我們舉一個實際操作的例子!

設(shè)置

包含所有代碼的GitHub存儲庫可以在這里找到。

https://github.com/wingedrasengan927/Image-formation-and-camera-calibration

可以通過運行以下命令來設(shè)置環(huán)境:

# create a virtual environment in anaconda
conda create -n camera-calibration-python python=3.6 anaconda
conda activate camera-calibration-python

# clone the repository and install dependencies
git clone https://github.com/wingedrasengan927/Image-formation-and-camera-calibration.git
cd Image-formation-and-camera-calibration
pip install -r requirements.txt

注意:這假設(shè)你已經(jīng)安裝了anaconda。

我們將使用兩個主要的庫:

  • pytransform3d:這個庫進行三維空間中的可視化和轉(zhuǎn)換。

  • ipympl:它使matplotlib繪圖具有交互性。

實例直覺

在本例中,我們將首先創(chuàng)建旋轉(zhuǎn)和平移的變換矩陣,將它們組合成一個矩陣,并使用它來變換相機。

然后,我們將通過對變換矩陣求逆來創(chuàng)建基矩陣的變化,并將其應(yīng)用于一個點,并將其坐標(biāo)從世界幀更改為相機幀。

下面是示例的筆記本,也可以在存儲庫中找到。

https://github.com/wingedrasengan927/Image-formation-and-camera-calibration

%matplotlib widget

import matplotlib.pyplot as plt
from utils import *

創(chuàng)建轉(zhuǎn)換矩陣

# rotate an angle of pi/4 along the standard Y axis
angles = [np.pi/4]
order = 'y'

# transalte by the given offset
offset = np.array([0, -8, 0])

# define parameters for the image plane
f = 2
img_size = (7, 7)
# create rotation transformation matrix
R = create_rotation_transformation_matrix(angles, order)
R_ = np.identity(4)
R_[:3, :3] = R

# create translation transformation matrix
T_ = create_translation_matrix(offset)
R_, T_
(array([[ 0.70710678,  0.        , -0.70710678,  0.        ],
        [ 0.        ,  1.        ,  0.        ,  0.        ],
        [ 0.70710678,  0.        ,  0.70710678,  0.        ],
        [ 0.        ,  0.        ,  0.        ,  1.        ]]),
 array([[ 1.,  0.,  0.,  0.],
        [ 0.,  1.,  0., -8.],
        [ 0.,  0.,  1.,  0.],
        [ 0.,  0.,  0.,  1.]]))

轉(zhuǎn)換并繪制

# create an image grid
xx, yy, Z = create_image_grid(f, img_size)

# convert the image grid to homogeneous coordinates
pt_h = convert_grid_to_homogeneous(xx, yy, Z, img_size)

# transform the homogeneous coordinates
pt_h_transformed = R_ @ T_ @ pt_h

# convert the transformed homogeneous coordinates back to the image grid
xxt, yyt, Zt = convert_homogeneous_to_grid(pt_h_transformed, img_size)
# define axis and figure
fig = plt.figure(figsize=(6, 4))
ax = fig.add_subplot(111,projection='3d')

# set limits
ax.set(xlim=(-10, 5), ylim=(-15, 5), zlim=(0, 10))

# plot the global basis and the transformed camera basis
ax = pr.plot_basis(ax)
ax = pr.plot_basis(ax, R, offset)

# plot the original and transformed image plane
ax.plot_surface(xx, yy, Z, alpha=0.75)
ax.plot_surface(xxt, yyt, Zt, alpha=0.75)

ax.set_title("camera transformation")
ax.set_xlabel("X-axis")
ax.set_ylabel("Y-axis")
ax.set_zlabel("Z-axis")
Text(0.5, 0, 'Z-axis')

相機校準(zhǔn)—外參矩陣

創(chuàng)建基的變換矩陣

E = np.linalg.inv(R_ @ T_)
# remove last row of E
E = E[:-1, :]

進行坐標(biāo)變換

cw = np.array([-1/np.sqrt(2), -8, 1/np.sqrt(2), 1]) # homogeneous coordinates of the point wrt the world
cc = E @ cw.reshape(4, 1) # coordinates of the point wrt the camera
cc = cc.flatten()
cc
array([0., 0., 1.])

讓我們一步一步地分解:

  • 首先,我們導(dǎo)入必要的庫。utils.py文件包含所有必要的幫助函數(shù)。%matplotlib widget啟用了ipympl后端,使我們能夠使用繪圖。

  • 接下來,我們定義必要的參數(shù),如角度、旋轉(zhuǎn)順序、平移偏移、焦距和圖像平面的大小。焦距和圖像平面僅用于演示目的,我們將在下一篇文章中詳細討論它們。

  • 在這里,我們保持簡單,關(guān)于標(biāo)準(zhǔn)Y軸旋轉(zhuǎn)??/4。然而,我們可以圍繞任何軸進行任意數(shù)量的旋轉(zhuǎn)。注意旋轉(zhuǎn)的順序。我們的平移偏移量是[0,-8,0],沿Y軸8個單位。

  • 使用這些參數(shù),我們?yōu)樾D(zhuǎn)和平移創(chuàng)建變換矩陣。

  • 接下來,我們使用變換矩陣轉(zhuǎn)換最初位于原點的相機并繪制它。多虧了ipympl,圖表是互動的。試著擺弄一下圖表,用不同的視角來觀看。

相機校準(zhǔn)—外參矩陣

  • 接下來,我們通過對變換矩陣求逆來創(chuàng)建基矩陣的變化,即相機外參矩陣。

  • 最后,我們?nèi)∫粋€世界坐標(biāo)[-1/√2, -8, 1/√2],然后應(yīng)用基變換的變化,得到相機的坐標(biāo)為[0, 0, 1]。這是有意義的,因為該點位于相機Z軸的正上方。

感謝閱讀!

參考引用

計算機視覺導(dǎo)論——Udacity:https://classroom.udacity.com/courses/ud810

☆ END ☆

如果看到這里,說明你喜歡這篇文章,請轉(zhuǎn)發(fā)、點贊。微信搜索「uncle_pn」,歡迎添加小編微信「 woshicver」,每日朋友圈更新一篇高質(zhì)量博文。

掃描二維碼添加小編↓文章來源地址http://www.zghlxwxcb.cn/news/detail-415411.html

☆ END ☆

如果看到這里,說明你喜歡這篇文章,請轉(zhuǎn)發(fā)、點贊。微信搜索「uncle_pn」,歡迎添加小編微信「 woshicver」,每日朋友圈更新一篇高質(zhì)量博文。

掃描二維碼添加小編↓

到了這里,關(guān)于相機校準(zhǔn)—外參矩陣的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 相機的內(nèi)參和外參介紹

    相機的內(nèi)參和外參介紹

    ? ? ? 注 :以下相機內(nèi)參與外參介紹除來自網(wǎng)絡(luò)整理外全部來自于 《視覺SLAM十四講從理論到實踐 ?第2版》中的第5講:相機與圖像 ,為了方便查看,我將每節(jié)合并到了一幅圖像中 ? ? ? 相機與攝像機區(qū)別:相機著重于拍攝靜態(tài)圖像,光學(xué)變焦不大;攝像機著重于拍攝動態(tài)視

    2024年02月09日
    瀏覽(23)
  • 相機和雷達外參聯(lián)合標(biāo)定

    相機和雷達外參聯(lián)合標(biāo)定

    內(nèi)容: 關(guān)于雷達和相機外參聯(lián)合標(biāo)定的踩坑紀(jì)錄。 Date: 2023/03/19 硬件: 上位機: Jetson ORIN (Ubuntu 20.04, ROS noetic) 雷達: Ouster 32線 相機: Intel D435 一、 標(biāo)定方案 目前流行的 雷達+相機 標(biāo)定方案有五種:Autoware, apollo, lidar_camera_calibration, but_velodyne。 Ubuntu20.04安裝autoware我看bug比較多,因

    2024年02月11日
    瀏覽(31)
  • 關(guān)于相機內(nèi)參與外參的淺讀

    關(guān)于相機內(nèi)參與外參的淺讀

    原文地址:https://tunmx.github.io/posts/CH-Camera-internal-and-external-parameters/ 學(xué)習(xí)人臉3D重建的第一天,在首次接觸3D相關(guān)的內(nèi)容,必須要搞清楚相機的成像原理,如何將真實三維空間中的三維點與顯示器、屏幕和圖像等二維成像的平面映射,以及了解該過程的推導(dǎo)方式和相關(guān)坐標(biāo)系的

    2024年02月15日
    瀏覽(19)
  • 計算機視覺(相機標(biāo)定;內(nèi)參;外參;畸變系數(shù))

    計算機視覺(相機標(biāo)定;內(nèi)參;外參;畸變系數(shù))

    目錄 一、預(yù)備知識 1、坐標(biāo)系變換過程(相機成像過程) (1)相機坐標(biāo)系轉(zhuǎn)換為圖像坐標(biāo)系(透視投影變換遵循的是針孔成像原理) (2)齊次坐標(biāo)的引入原因:(為什么引入齊次坐標(biāo)???) 2、內(nèi)參與外參矩陣的構(gòu)成 3、畸變參數(shù) 二、相機標(biāo)定 1、張正友標(biāo)定法(光學(xué)標(biāo)

    2024年02月07日
    瀏覽(23)
  • (九)相機內(nèi)參、外參、反透視變換python  opencv

    (九)相機內(nèi)參、外參、反透視變換python opencv

    任務(wù)需求:將相機上的一個點投影到真實世界平面上去。 原則上單目相機是不可以的,因為只記錄了二維信息,真實世界是三維的,雙目相機可以通過視差,或者單目+IMU組合,但是 由于特征點在地面上的先驗知識 ,因此可以進行反透視變換。方法有很多種那個,這里采用計

    2024年02月06日
    瀏覽(35)
  • 使用 OpenCV 進行相機校準(zhǔn)

    使用 OpenCV 進行相機校準(zhǔn)

    相機已經(jīng)存在了很長時間。然而,隨著 20 世紀(jì)后期廉價針 孔 相機的推出,它們在我們的日常生活中變得司空見慣。不幸的是,這種廉價是有代價的:嚴(yán)重的失真。幸運的是,這些是常數(shù),通過校準(zhǔn)和一些重新映射,我們可以糾正這一點。此外,通過校準(zhǔn),您還可以確定相機

    2024年04月12日
    瀏覽(32)
  • OpenCV+相機校準(zhǔn)和3D重建

    相機校準(zhǔn)至少需要10個測試圖案,所需的重要輸入數(shù)據(jù)是3D現(xiàn)實世界點集以及圖像中這些點的相應(yīng)2D坐標(biāo)。3D點稱為對象點,而2D圖像點稱為圖像點。 除了棋盤,我們還可以使用圓形網(wǎng)格。 在這種情況下,我們必須使用函數(shù)cv.findCirclesGrid()來找到模式。 較少的圖像足以使用圓形

    2024年02月05日
    瀏覽(16)
  • Opencv實驗合集——實驗八:相機校準(zhǔn)

    Opencv實驗合集——實驗八:相機校準(zhǔn)

    首先,我們來理解一下怎么從相機的角度去看一張圖片,就好比如你用眼睛作為相機來進行攝影,但是比攝影機強的是,你是怎么攝影圖片之后再將它矯正出現(xiàn)在你眼前,將歪歪扭扭的圖片變成一張在你眼前是一張直的圖片 為了輕松理解問題,假設(shè)您在房間中部署了一個攝像

    2024年02月02日
    瀏覽(17)
  • Gocator 3D線掃相機校準(zhǔn)流程說明

    Gocator 3D線掃相機校準(zhǔn)流程說明

    首先清除之前的校準(zhǔn)數(shù)據(jù) 設(shè)定校準(zhǔn)使用的有效數(shù)據(jù)區(qū)域,然后進行校準(zhǔn) 有效區(qū)域的選擇是以(長度+起始點)的方式選擇的,即先設(shè)定軸的有效長度,然后選擇數(shù)據(jù)的起始點 重新選取有效區(qū)域作為圖像輸出的范圍 3D相機會自動根據(jù)校準(zhǔn)后得到的高計算此時的測量寬度,即上圖

    2024年02月11日
    瀏覽(16)
  • OpenCV每日函數(shù) 相機校準(zhǔn)calibrateCamera函數(shù)

    1、概述 ????????估計相機參數(shù)的過程稱為相機校準(zhǔn)。 ????????這意味著我們擁有相機所需的所有信息(參數(shù)或系數(shù)),以確定現(xiàn)實世界中的3D 點與其在該校準(zhǔn)相機捕獲的圖像中對應(yīng)的 2D 投影(像素)之間的準(zhǔn)確關(guān)系。 ????????通常這意味著恢復(fù)兩種參數(shù) ?????

    2024年02月10日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包