主頁 >  其他 > 立體視覺入門指南(1):坐標系與相機引數

立體視覺入門指南(1):坐標系與相機引數

2021-02-03 10:50:14 其他

親愛的同學們,我們的世界是3D世界,我們的雙眼能夠觀測三維資訊,幫助我們感知距離,導航避障,從而翱翔于天地之間,而當今世界是智能化的世界,我們的科學家們探索各種機器智能技術,讓機器能夠擁有人類的三維感知能力,并希望在速度和精度上超越人類,比如自動駕駛導航中的定位導航,無人機的自動避障,測量儀中的三維掃描等,都是高智機器智能技術在3D視覺上的具體實作,

立體視覺是三維重建領域的重要方向,它模擬人眼結構用雙相機模擬雙目,以透視投影、三角測量為基礎,通過邏輯復雜的同名點搜索演算法,恢復場景中的三維資訊,它的應用十分之廣泛,自動駕駛、導航避障、文物重建、人臉識別等諸多高科技應用都有它關鍵的身影,

本課程將帶大家由淺入深的了解立體視覺的理論與實踐知識,我們會從坐標系講到相機標定,從被動式立體講到主動式立體,甚至可能從深度恢復講到網格構建與處理,感興趣的同學們,來和我一起探索立體視覺的魅力吧!

本課程是電子資源,所以行文并不會有太多條條框框的約束,但會以邏輯清晰、淺顯易懂為目標,水平有限,若有不足之處,還請不吝賜教!
個人微信:EthanYs6,加我申請進技術交流群 StereoV3D,一起技術暢聊,
CSDN搜索 :Ethan Li 李迎松,查看網頁版課程
隨課代碼,將上傳至github上,地址:StereoV3DCode:https://github.com/ethan-li-coding/StereoV3DCode

文章目錄

      • 針孔模型Pinhole mode
      • 坐標系簡介
        • 影像坐標系
        • 相機坐標系
          • 內參矩陣
        • 世界坐標系
          • 外參矩陣
          • 投影矩陣
        • 總結
        • 練習作業

針孔模型Pinhole mode

在科學研究中,一個現象內部的程序總是復雜而難以清晰看透,而聰明的學者們總會用最簡單的模型去做初始描述,提出一個相對簡單的模型,成像程序亦不例外,他們將三維世界中的坐標點映射到二維影像平面的程序用一個幾何模型進行描述,這個模型有很多種,其中最簡單的稱為針孔模型,

針孔成像的原理大家都學過,現實世界中源于某個物體的光線穿過針孔,會在底板上投影成一幅倒立的影像,如圖1所示:

圖1 針孔模型1

將針孔模型對應到成像程序中,現實世界的物體即為三維空間的成像目標,針孔為攝像機中心,倒影成像平面則為二維影像平面,如圖二(左)所示,我們用簡單的線條來繪制這樣的關系,攝像機中心到成像平面之間的距離我們稱之為焦距 f f f,但是倒立的成像總感覺別扭,因此轉換一下,將成像平面拿到相機前方來,保持焦距為 f f f,由成像程序可知,影像此時不再是倒立的了,解放了大家的脖子,見圖2(右)所示,

圖2 針孔模型2

從針孔模型中,我們可以找到一個特征,那就是現實世界的任一點、其在成像平面上的投影點、相機中心在一條直線上,這種特征稱為中心投影或者透視投影,也是做成像分析的基礎,透視投影將三維空間投影到二維平面上,是一種降秩空間透射變換(三維空間降成了二維空間),

坐標系簡介

通過針孔模型,我們了解了成像程序,似乎非常簡單,但它此時只是一張圖片,給你感官上的理解,要基于它完成復雜的3D測量,必須借用那一連串噼里啪啦讓人又愛又恨的數學公式,而公式建立的基礎,就是一個個坐標系,具體來說,是一個個笛卡爾坐標系,如果你不知道什么是笛卡爾坐標系,我想你也不會點開我的博客看到這里,所以介紹就此略過,

我認為你們已經掌握了一個前提知識:立體視覺的三個關鍵坐標系是影像坐標系、相機坐標系、世界坐標系,如果沒有,那我就強塞給你這個概念,

影像坐標系

影像坐標系是一個二維坐標系,是在影像內建立的坐標系,描述像素點在影像中的位置,分為以像素為單位的 ( u , v ) (u,v) (u,v)坐標系以及以物理尺寸為單位的 ( x , y ) (x,y) (x,y)坐標系,在計算機視覺中, ( u , v ) (u,v) (u,v)坐標系以左上角位置為原點, u u u軸和 v v v軸分別平行于影像平面的兩條垂直邊( u u u軸朝右, v v v軸朝下),如圖3左所示; ( x , y ) (x,y) (x,y)坐標系以像主點 ( u 0 , v 0 ) (u_0,v_0) (u0?,v0?)為原點, x x x軸和 y y y軸分別與 u u u軸和 v v v軸平行且方向一致,如圖3右所示,

圖3 影像坐標系

上面提到像主點,特別說明一下,它是攝影中心到成像平面的垂點,它是一個非常重要的點位,

如果我們知道像素到物理尺寸的轉換關系,即一個像素的物理尺寸,也就是像元尺寸為 d x ? d y dx*dy dx?dy x x x方向尺寸為 d x dx dx y y y方向尺寸為 d y dy dy),就可以在兩類坐標系之間相互轉換:
在這里插入圖片描述
為了便于矩陣運算,我們會寫成矩陣形式:
在這里插入圖片描述
公式兩邊的三維矢量是一種齊次表達方式,即把第三維設定為1來用三維矢量表示二維矢量,這樣做的好處是可以用矩陣運算的方式完成三維到二維的變換,為什么要做這個轉換呢?是因為 x y xy xy坐標系和相機坐標系的緊密聯系,同學們往后看,

相機坐標系

相機坐標系是一個三維空間坐標系,是非常關鍵的一個坐標系,它承擔著建立影像坐標系和世界坐標系之間聯系的重任,所以前人們在建立相機坐標系時,有一個很關鍵的考量是如何能更好的把影像坐標系和世界坐標系之間聯系起來,

兩個三維坐標系(相機和世界)之間的轉換用旋轉和平移就可以方便表達,重點是三維的相機坐標系和二維的影像坐標系之間如何更好轉換,方案是這樣的:相機坐標系的原點在相機中心, X Y XY XY軸和影像 x y xy xy坐標系的 x y xy xy軸平行, Z Z Z軸垂直于像平面且朝向像平面, Z Z Z軸和像平面的交點正是影像 x y xy xy坐標系的原點(像主點),如圖4所示,

圖4 相機坐標系

在此方案下,像平面上的所有像素點在相機坐標系下的 Z Z Z坐標等于焦距 f f f X Y XY XY坐標和影像 x y xy xy坐標系下的值相等,即若像素點 p p p在影像 x y xy xy坐標系下的坐標為 ( x , y ) (x,y) (x,y),則其在相機坐標系下的坐標為 ( x , y , f ) (x,y,f) (x,y,f)

根據中心投影的特征,假設像素點 p p p是空間點 P P P的投影點,那么如何建立兩兄弟之間的坐標關系呢?

圖5 相機坐標系2

我們假設像素 p p p在相機坐標系下的坐標為 ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc?,Yc?,Zc?)(下標c是camera的意思),若兩點位于從坐標系原點發出的同一條直線上,那么他們的坐標有什么關系?答案是等比例關系,即
在這里插入圖片描述
為了便于矩陣運算,我們會寫成矩陣形式:
在這里插入圖片描述
還記得上一節,我們把 x y xy xy坐標系轉換成 u v uv uv坐標系,結合上式,便可以把相機坐標系轉換成 u v uv uv坐標系,即
在這里插入圖片描述
通常把 Z c Z_c Zc?稱為尺度因子 λ λ λ,把中間的3x3矩陣叫做內參矩陣 K K K,顯然內參矩陣 K K K描述的是相機坐標系到 u v uv uv坐標系的轉換關系,簡單的運算式如下
在這里插入圖片描述

內參矩陣

內參矩陣 K K K是相機的關鍵引數之一 f d x \frac f{d_x} dx?f? f d y \frac f{d_y} dy?f?實際是將以物理尺寸為單位的焦距 f f f轉換成像素為單位的焦距值,記 f x = f d x f_x=\frac f{d_x} fx?=dx?f? f y = f d y f_y=\frac f{d_y} fy?=dy?f? f x f_x fx? f y f_y fy?分別是焦距在兩個像元方向上的像素單位值,最終得到內參的矩陣表達:
在這里插入圖片描述
額外需要了解的一點是,由于制造工藝的偏差,像素不是絕對的矩形(圖6左),而是一個平行四邊形(圖6右),

圖6 傾斜像素

這時候像素的縱向邊界和 y y y軸并不平行而是傾斜一定的角度,于是在 K K K矩陣中引入一個傾斜因子 s s s(實際上可以推導 s = f x t a n ( a ) s=f_xtan(a) s=fx?tan(a),這里就不展開了,感興趣的可以查資料自己推導下),此時 K K K矩陣表示為
在這里插入圖片描述
最后相機坐標到 u v uv uv坐標的轉換公式為:
在這里插入圖片描述

世界坐標系

世界坐標系是一個固定的三維坐標系,是一個絕對坐標系,它旨在將空間中的所有點都統一到同一個坐標系下表達,在不同的應用場景中,世界坐標系的定義并不一樣,比如大地測量中,將水準原點當做世界坐標系的原點;在相機標定中,將標定板的某個角點作為世界坐標系,
在這里插入圖片描述

圖7 世界坐標系

世界坐標系和相機坐標系都是三維坐標系,它們之間可以用旋轉平移來做轉換在這里插入圖片描述

圖8 坐標系之間的旋轉平移

假設空間點P在世界坐標系中的坐標為 ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw?,Yw?,Zw?),則可以通過一個3x3的單位正交旋轉矩陣 R R R 和3x1的平移矢量 t t t 來轉換成相機坐標系坐標 ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc?,Yc?,Zc?)
在這里插入圖片描述
或者寫成另一種形式:
在這里插入圖片描述
我們把旋轉矩陣 R R R 和平移矢量 t t t 稱為相機的外參矩陣

外參矩陣

外參矩陣也是相機的關鍵引數之一,由一個3x3的單位正交旋轉矩陣 R R R 和3x1的平移矢量 t t t 組成,它們描述的是世界坐標系到相機坐標系之間的轉換關系,需要提一點的是,在不同學科中外參矩陣會有一些定義區別,比如在攝影測量學科中,將相機坐標系轉換到世界坐標系的旋轉矩陣 R R R 以及攝影中心在世界坐標系中的位置 C C C 作為外參,它們目的一致,都是為了描述相機和世界坐標系之間的轉換關系,

同樣用一個簡單運算式來描述世界坐標系到相機坐標系的變換:
在這里插入圖片描述

投影矩陣

雖然我們花很多篇幅介紹了相機坐標系,但是在實踐程序中,最直接接觸的卻是影像 u v uv uv坐標系和世界坐標系,在影像三維重建中,通常前者是輸入,后者是輸出,所以將世界坐標系轉換成 u v uv uv坐標系是很關鍵的轉換,

上文已經得到了世界到相機,相機到 u v uv uv的轉換公式,因此世界到 u v uv uv并沒有什么難度:
在這里插入圖片描述
世界坐標系到影像坐標系的轉換實際上表達的是透視投影中空間點到像點的投影關系,所以把該轉換矩陣叫做投影矩陣 M M M,通過矩陣運算可知投影矩陣是一個3x4的矩陣,它是內參矩陣和外參矩陣的乘積,

同樣用一個簡單運算式來表達這種轉換:
在這里插入圖片描述

總結

本節我們通過針孔模型引入以透視投影為基本原理的相機成像模型,并對一切公式推導的源頭:三大坐標系(影像/相機/世界) 做了詳細的介紹,在深入了解坐標系的程序中,幾類關鍵的相機引數(內參/外參)也緩緩而出,用圖示加公式推導,讓大家直觀且有邏輯性的掌握這方面的知識,希望能夠給入門的同學一些幫助,下一節我們再見,

練習作業

這里為大家準備了一些練習題,可以通過實踐加深理解:

練習:寫一個Camera類(基于Eigen庫 ),用內參矩陣K、旋轉矩陣R、平移矩陣t(或相機中心C)來構造
實作介面:

  1. 世界坐標系到相機坐標系的轉換 W2C
  2. 相機坐標系到世界坐標系的轉換 C2W
  3. 相機坐標系到影像坐標系的轉換 C2I
  4. 世界坐標系到影像坐標系的轉換 W2I
  5. 有深度作為引數,影像坐標系到相機坐標系的轉換I2C
  6. 有深度作為引數,影像坐標系到世界坐標系的轉換I2W

參考答案地址:https://github.com/ethan-li-coding/StereoV3DCode

Ethan Li 李迎松 CSDN認證博客專家 立體視覺 工學博士 博客專家
武漢大學 攝影測量與遙感專業 博士
主方向立體匹配、三維重建
2019年國家測繪科技進步一等獎

個人微信號:EthanYs6,歡迎交流

我正在做一些立體視覺的代碼開源作業,歡迎訪問我的GitHub :
https://github.com/ethan-li-coding(歡迎follow和star)

知識的傳播是無邊界的,愿遠隔千里的我們成為朋友!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/255902.html

標籤:其他

上一篇:[Python影像處理] 三十六.OpenCV影像幾何變換萬字詳解(平移縮放旋轉、鏡像仿射透視)

下一篇:C語言編程>第二十二周 ⑦ 下列給定程式中函式fun的功能是:從低位開始取出長整型變數a中奇數位上的數,依次構成一個新數放在b中。

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more