三维匹配_机器视觉——双目视觉的基础知识(视差深度、标定、立体匹配)
1
1、雙目視覺的視差與深度
人類具有一雙眼睛,對同一目標可以形成視差,因而能清晰地感知到三維世界。因此,計算機的一雙眼睛通常用雙目視覺來實現(xiàn),雙目視覺就是通過兩個攝像頭獲得圖像信息,計算出視差,從而使計算機能夠感知到三維世界。一個簡單的雙目立體視覺系統(tǒng)原理圖如圖 1 所示。
兩個相機的投影中心的連線的距離為 b,也叫做基線,三維空間任意一點 P 在左相機的成像點為 PL,在右相機的成像點為PR。根據(jù)光的直線傳播的原理可知,三維空間點 P 就是兩個相機的投影中心點與成像點連線的交點。線段L和R分別是左右相機成像點到左成像面的距離,則點 P 在左右相機的視差可以定義如下:
兩個成像點PL和PR之間的距離為:
根據(jù)相似三角形理論可以得出:
則可以得到點 P 到投影中心平面的距離Z
當點 P 在三維空間上移動時,點 P 在左右相機上的成像位置也會改變,從而視差也會發(fā)生相應變化,由上式可知,視差與三維空間上的點到投影中心平面的距離成反比。因而,只要知道某點的視差,就可以知道該點的深度信息。
三維空間點 P 在相機的成像圖如下圖所示。由圖可以看出,根據(jù)相似三角形原理, 有以下關系:
因此,當已知三維空間上任意一點的在不同圖像上的視差,再根據(jù)相機的參數(shù),就可以知道該點的三維坐標。
2
2、雙目相機的相關坐標系
物體的三維信息都是通過二維圖像推導而來的。要想明確物體在三維空間的具體位置,除了圖像的信息,還需知道相機的具體參數(shù)。相機參數(shù)的確定過程就叫做相機的標定。在雙目視覺系統(tǒng)中,除了對每個相機進行標定外,還需要知道相機間的相互關系以及相機與待測物體的坐標關系,這一過程叫做系統(tǒng)的標定。
從圖像上的物體到三維空間上的物體的映射過程實際上是坐標系的變換。圖像上的某一點,經(jīng)過物理關系的轉(zhuǎn)換可以得到現(xiàn)實的物理坐標,然后將圖像平面映射成相機坐標系的某一平面,得到該點在相機坐標系的坐標,最后通過相機坐標系與世界坐標系的旋轉(zhuǎn)平移變換就可以確定該點的實際三維坐標了。所以要想確定點的三維坐標,首先要了解這四個坐標系。
(1) 像素坐標系。在數(shù)字圖像中,一幅圖像就是一個 M 行 N 列的數(shù)組,數(shù)組中的每個數(shù)值就是該點的亮度。在圖像的左上角建立直角坐標系 u、v, 每一像素的坐標(u, v)就是該像素在數(shù) 組中的行和列。以像素作為單位的坐標系就叫做像素坐標系。
(2) 圖像坐標系。要想知道物體在三維空間的具體位置,就需要建立與實際物理單位相關的坐標系,這樣的坐標系叫做圖像坐標系,該坐標系以圖像內(nèi)某一點作為坐標原點,其 x 軸和 y 軸分別與像素坐標系的 u 軸,v 軸平行。圖像上任意一個像素在兩個坐標系的映射關系為:
其中,單個像素在 x 軸和 y 軸的實際物理距離為 dx 和 dy,將上式轉(zhuǎn)換成齊次方程式為:
(3) 相機坐標系。圖像坐標系雖建立起圖像與現(xiàn)實世界的物理關系,但這只是二維關系,因此,需要建立與三維世界相關的相機坐標系。圖像坐標系是相機坐標系的某一平面,相機坐標系 的 x 軸和 y 軸與圖像坐標系對應軸平行,兩個坐標系間的距離就是相機的焦距 f。其以相機光心為坐標原點,光軸為 z 軸,可以用(c, c, c )來表示。
(4) 世界坐標系。相機坐標系是以相機為中心的描述現(xiàn)實世界的三維坐標系。在現(xiàn)實空間中,存在無數(shù)坐標系可以描述三維空間,為了確定三維空間點的具體位置,需要確定唯一一個基準坐標系來表述空間,這就是世界坐標系,用(w, w, w)來表示。
其中,R 為 3×3 單位正交矩陣,表示了坐標系的旋轉(zhuǎn)操作;t 為三維平移向量,代表了坐標系的平移操作;0 表示三維零向量。
四個坐標系之間總的關系
3
3、雙目相機的畸變系數(shù)
上述的線性模型并不能準確描述物體與圖像的對應關系,這是因為光學鏡頭具有透視失真,會導致圖像發(fā)生偏差,這是鏡頭的固有屬性無法消除。為了減少圖像偏差,需要明確鏡頭的畸變系數(shù),對圖像進行校正。常見的畸變主要有徑向畸變和切向畸變。
徑向畸變是指圖像像素以畸變中心為原點,沿著徑向產(chǎn)生位置偏差,從而導致圖像形變。其常用畸變原點周圍的泰勒展開式的前兩項 k1 和 k2 來表示,如果畸變較大,還可以增加使用第三項 k3 來描述,常用的描述公式為:
其中,(x, y)是校正后像素點的位置;(0, 0)是原圖上的像素點位置;r 徑向距離。
切向畸變是由于在安裝時,產(chǎn)生安裝偏差,使鏡頭不完全平行于鏡頭平面而造成的畸變,其可以使用 p1和 p2 兩個參數(shù)來描述:
要消除鏡頭畸變,就是要同時消除徑向畸變和切向畸變,所以要知道以下 5 個畸變參數(shù)的值
這 5 個參數(shù)可以在相機標定的過程中得到。明確這 5 個畸變系數(shù)以及相機的內(nèi)外參數(shù), 就可以完成相機的標定了。
4
4、雙目相機的標定
相機的標定是根據(jù)像素坐標系與世界坐標系的關系,利用一定的約束條件,來求解相機的內(nèi)外參數(shù)以及畸變系數(shù)的過程。相機標定方法可分為兩種,第一種是需要參照物的傳統(tǒng)標定方法;另一種則是不需參照物的相機自標定法。
傳統(tǒng)的標定方法一般以棋盤格作為參照物,其中每個棋盤格的大小,尺寸以及棋盤格的數(shù)量都是已知的。標定過程就是,將棋盤格的頂點與圖像上的對應點建立對應關系,利用棋盤格的已知信息來求得相機模型的內(nèi)外參數(shù)和畸變系數(shù)。這種標定方法通常有張正友標定法和 Tasi 兩步標定法等。這種方法容易受到標定物的制作精度的影響,但精度仍比另一種方法高。
相機自標定法是不需要參照物的,通常有基于 Kruppa 方程的標定法等。其根據(jù)多視圖約束幾何方程,在不同位置采集多幅同場景的圖像,通過相機的約束信息以及對 應點的幾何信息來完成相機參數(shù)的計算。其最大優(yōu)點就是不需要制作標定參考物,比較靈活;但由于缺少標定物,魯棒性和精度都有所欠缺。
張正友標定法
張正友標定法的基本步驟是:在不同角度下,對標定參考物(棋盤格)進行拍攝,然后提取出棋盤格的頂點,接著解析出相機的畸變系數(shù)和內(nèi)外參數(shù),最后再根據(jù)極大似然估計,對參數(shù)進行 優(yōu)化。
其中,M1為相機內(nèi)參矩陣。
設單應性矩陣 H 滿足
,其中 λ 是尺度因子,由 于1和2正交,所以可得以下約束條件:
由以上兩式可以看出,?1和?2是可以通過單應性求解出來的,所以要求解的參數(shù)就變成 1矩陣中的未知的 5 個參數(shù),可以通過三個單應性矩陣來求解這 5 個參數(shù),三個單應性矩陣可以通過三張對同一標定板不同角度和高度的照片獲得。
相機內(nèi)參為:
相機外參為:
上述推導的結(jié)果都是在理想情況下得到的,沒有任何噪聲和干擾,但噪聲是無法避免的。因此,在實際標定中,還需要使用極大似然法來對參數(shù)進行優(yōu)化。至此,單目相機就標定完成,但對于雙目視覺系統(tǒng),不僅要對每個相機進行標定,同時還要明確相機間的相互關系,因此還要對雙目相機進行進一步的標定,即求取相機間的旋轉(zhuǎn)矩陣和平移向量。
由第一式可知左右相機的對應關系,由式第二式和第三式可知,只需要知道每個相機的 外參數(shù),就可以求得雙目相機的旋轉(zhuǎn)矩陣和平移向量。
5、雙目立體匹配
當三維空間與圖像的對應關系確定后,要想對視差進行計算,就必須知道三維空間的點在左右圖像上的對應關系,這就是立體匹配的目的。通過立體匹配技術,就可以明確左右圖像中的點的對應關系,從而得到視差,恢復點的三維信息。
1、立體匹配的基本約束條件
立體匹配技術是雙目立體視覺中的重要技術,研究人員提出了許多實用的算法,其中也提出許多基本的約束條件。將這些約束條件運用到匹配算法中,就可以有效降低匹配的難度,提高立體匹配的速度和精度。常用的約束條件如下:
(1) 極線約束。極線約束是最常用的約束條件。極線約束是指在左圖像中的一點,它在右圖像上的 對應匹配點必定在某一條直線上,這條直線就是極線。使用極線約束就可以讓圖像的搜索范圍由二維下降至一維,只需要在一條直線上進行搜索,這就可以大大減少搜索的復雜度,并提高了匹配的精度。
(2) 相似性約束。在進行立體匹配時,點、線、塊等元素一定具有相同或相似的屬性。
(3) 唯一性約束。對于待匹配圖像,在原圖像中至多對應一個點。一幅圖像上的每個點只能與另一幅 圖像上的唯一一個點一一對應,這樣圖像上的點至多有一個視差值。
(4) 左右一致性約束。若左圖像上的一點 P,其在右圖像上的對應點為 Q,則右圖像上的點 Q 在左圖像上的對應點應該是點 P,如果這兩點不是一一對應的,則匹配會不滿足唯一性條件,說明匹配失敗。在進行立體匹配時,運用基本約束條件對匹配結(jié)果進行檢驗,可以有效排除很多誤匹配的點,減小搜索范圍,降低立體匹配計算的復雜度,提高立體匹配的速度和精度, 獲得最好的匹配效果。
2、半全局立體匹配算法
半全局匹配算法是一種實用的計算視差圖的匹配算法,其較好的中和了局部匹配和全局匹配的優(yōu)缺點,在保持視差圖效果相差不大的前提下,極大地提高了算法的效率,實現(xiàn)了更好的精度和效率的權衡,已廣泛應用在現(xiàn)實中。半全局匹配算法可以得到視差圖,并且可分為匹配代價計算、代價聚合、視差計算和視差優(yōu)化四個步驟。
(1) 代價匹配。代價匹配是待匹配點與候選匹配點之間的相似度的衡量。按照匹配度量方式可以分為互相關性度量方法和差值度量方法。互相關性度量越大,兩個點間的相似度就越高, 兩個像素點為對應匹配點的概率就越大,不然兩個像素點就越不可能是對應匹配點;同樣,差值度量越小,像素點的相似度越高,差值度量越大,像素點的相似度越小。
在搜索匹配點之前,對每個像素都會指定一個視差范圍 D,將搜索范圍局限在 D 內(nèi), 并會使用一個大小為 W×H×D(W, H 為圖像的尺寸)的矩陣來記錄每個像素與視差范圍內(nèi)的像素的匹配代價值。該矩陣存儲了所有的匹配代價值,可以有效減少重復的計算, 提高計算效率。匹配代價計算的方法有很多,如灰度絕對值差,灰度絕對值差之和,歸一化系數(shù), 互信息和 Census 變換等。不同的匹配代價計算算法都有其獨特的優(yōu)點,對數(shù)據(jù)的表現(xiàn)也各不相同,其中,最常用的方法是互信息和 Census 變換。
(2) 代價聚合。在初始代價匹配中,其計算范圍只限于局部窗口中,只考慮了局部的相關性,對噪聲非常敏感。為了得到更優(yōu)的匹配,必須進行代價聚合操作。在代價聚合中,半全局匹配算法采用了全局能量最優(yōu)策略。該方法設定一個全局能量函數(shù),通過對其進行不斷的優(yōu)化,使該函數(shù)逐漸取到最小值,從而保證每個像素是最優(yōu)匹配。該函數(shù)的定義如下:
該函數(shù)分為三部分,第一部分是主要部分,主要是對上一步的代價 進行求和;第二,三部分是為了保證匹配滿足連續(xù)性約束,若像素在一定范圍內(nèi)視差變 化過大,說明匹配出錯概率較大,需要進行懲罰,避免這種情況出現(xiàn)。其中,第二部分 是針對視差變化較小的情況,因而其懲罰的參數(shù) P1 的值較小;第三部分是針對相鄰像素 視差變化較大的情況,因此,需要加大懲罰,P2 的值一般會比較大。
對鄰域內(nèi)不同的視差變化給予不一樣的懲罰,有助于更好地應對各種不同的邊緣情況。但由于視差大于 1 的范圍很大,如果僅僅使用一個常數(shù)項對大視差變化進行懲罰往 往不夠,因此,P2 的值需要動態(tài)調(diào)整,其調(diào)整公式如下:
通常,能量函數(shù)的最優(yōu)化很難求得最優(yōu)解,為了高效解決這個問題,半全局匹配算法提出了路徑代價聚合的方法,只在固定的路徑上計算匹配代價。對于某一像素,在其鄰域內(nèi)存在多條到達該像素的路徑。該方法首先就某一條路徑對匹配代價進行計算,然后對所有路徑的匹配代價求和得到代價聚合值。
(3) 視差計算。在半全局匹配算法中,視差計算的操作較為簡單,其采用贏家通吃的算法,即對每個像素來說,其代表的最優(yōu)視差為最小代價聚合值。在此步驟中,對每個像素都進行了 視差計算,因而可以得到以原圖一樣大小的視差圖,代表了圖像的匹配關系。
(4) 視差優(yōu)化。在視差計算步驟中,僅僅只是對代價聚合值進行選擇,如果代價聚合不準確,會直接影響匹配結(jié)果,因此需要進行視差優(yōu)化步驟,按照匹配的基本約束條件,對錯誤匹配 進行剔除并提高視差精度。視差優(yōu)化常用的操作有剔除錯誤匹配,提高視差精度以及抑制噪聲等。
錯誤匹配是指像素在代價聚合后得到的視差值并不是真實的最小的視差值。這種錯誤匹配的現(xiàn)象在實際中并不少見,圖像的噪聲、遮擋、弱紋理和重復紋理都會導致這一 現(xiàn)象產(chǎn)生。因此,為了提高匹配的精度,必須要對錯誤的匹配進行剔除。目前最常用的錯誤匹配的剔除方法是左右一致性法,它是根據(jù)匹配的唯一性約束條件指定的。匹配的 唯一性指出對于左圖像的某一像素點,在右圖像上至多只有一個像素點與之一一對應。左右一致法就是將左右圖像的對應點的視差值進行比較,若兩個視差值小于一定的閾值, 則認為匹配成功,否則認為該視差不滿足唯一性將被剔除。除了左右一致性法外,常用的匹配剔除方法還有剔除小連通區(qū)和唯一性檢測等方法。連通區(qū)是指連通區(qū)內(nèi)的視差與其鄰域的視差之差小于一定的閾值,剔除小連通區(qū)是指剔 除視差圖中很小的連通區(qū),因為這種連通區(qū)通常是由于誤匹配造成的;唯一性檢測是指 對每個像素,計算其最小代價值和次小代價值,如果它們的差小于一定的閾值,說明匹配不是很準確,應該剔除。每種剔除錯誤匹配方法,都有其無法識別的情況,在實際應 用中,可以將幾種方法結(jié)合使用。
在視差計算中,得到的視差圖都是整像素的,無法滿足精度要求,為了提高視差精度,可以采用子像素優(yōu)化技術,使用二次曲線內(nèi)插的方法獲得子像素。具體做法是首先將像素點的所有視差標注出來,然后找到最優(yōu)視差點,接著確定該點周圍兩個視差點, 按照 3 點確定一條二次曲線的原理,得到過這 3 點的拋物線,該拋物線的頂點就是最優(yōu) 子像素。
在計算像素的視差值時,都是基于小窗口進行的,容易產(chǎn)生噪聲,因此可以使用中值濾波和均值濾波等圖像濾波方式對視差圖進行濾波,如果要保持較好的邊緣精度,也可以考慮使用雙邊濾波。
參考
[1] 視覺SLAM十四講
[2] 張正友算法標定原理詳解(https://blog.csdn.net/u010128736/article/details/52860364)
來自:AI算法修煉營
本文僅作學術分享,著作權歸作者所有,如有侵權,請聯(lián)系后臺作刪文處理。
總結(jié)
以上是生活随笔為你收集整理的三维匹配_机器视觉——双目视觉的基础知识(视差深度、标定、立体匹配)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度高德位置定位服务器,调用百度、高德地
- 下一篇: 云服务器 架设传奇_传奇手游-战神引擎架