0

我有一個平行三目鏡設置,其中所有3個攝像頭以共線方式進行了對齊,如下所示。合併三目立體的深度圖

左攝像頭------------中攝像頭---------------------------- -----右攝像頭

左攝像頭和中央攝像頭之間的基線(攝像頭之間的距離)最短,左右攝像頭之間的基線最長。

理論上,我可以使用不同的相機組合(L-R,L-C和C-R)獲得3組視差圖像。我可以使用Triangulation爲每個視差圖生成深度圖(3D點)。我現在有3個深度圖。

LC組合具有較高的深度精度(測量距離更精確),因爲對象距離較近(因爲基線較短),而LR組合對遠處的對象具有較高的深度準確度(因爲基線很長)。同樣,C-R組合對於中等距離的物體也是精確的。

在立體聲設置中,通常我們將左(RGB)圖像定義爲參考圖像。在我的項目中,通過閾值深度值,我可以在參考圖像上獲得ROI。例如,我找到深度值在10-20米之間的所有像素,並找到它們各自的像素位置。在這種情況下,我有3D點與其相應的像素位置之間的關係。

由於在正常的立體聲設置中,我們只能根據基線(近和遠)對兩個區域中的一個區域具有更高的深度精度,因此我計劃使用3個攝像頭。這有助於我爲三個區域(近,中,遠)生成更高精度的3D點。

我現在想要合併3個深度圖以獲得全局圖。我的問題如下 -

  1. 如何合併三個深度圖?
  2. 合併後,如何知道哪個深度值對應於參考(左RGB)圖像中的哪個像素位置?

你的幫助,我們將不勝感激:)

回答

0

1)我認爲簡單的深度圖的「合併」(如值的矩陣)是不可能的,如果你正在考慮一個全球性的2D深度圖作爲深度值的圖像或矩陣。您可以考慮將3組3D點與距離等一些相似性標準(提煉點雲)進行合併。如果他們是太接近,刪除(僞)

for i in range(points): 
for j in range(i,points): 
    if distance(i,j) < treshold 
    delete(j) 

主題的一個或刪除2分並加有平均座標

2)從點一個點,這個問題變成了「如何連接指向左圖像中相關像素的3D點「(這是唯一的解釋)。 答案只是:使用投影方程。如果從左側照相機的校準的K(本徵矩陣),R(旋轉矩陣)和t(平移向量),加入R和T在3×4矩陣

[R|t] 

然後連接的M個3D點在4維座標(X,Y,Z,1),爲米點(U,v,W)由它的第三

m = K*[R|t]*M 

鴻溝米座標w和你獲得

m = (u', v', 1) 

U」和v'是左圖像中的像素座標。

+0

非常感謝@marcoresk。 我認爲合併3D點雲可以使用最近鄰或某種形式的距離度量。 但是,我的相機是非靜態的,我有內在矩陣K,但我如何找到R和T?我沒有預定義的世界座標系。請原諒我,如果我聽起來天真,我仍然處於學習的過程中。 –

+0

@Beginner_In_Image_Processing歡迎您,我也在學習的過程中。我認爲「我有一個平行三目鏡設置,其中所有3個相機」意思是「相機的相對位置/方向相對於左相機是固定的」。我還假定一組差距是一個「靜止」的對象,一個「凍結」的時間框架。所以你可以通過執行一些像[this]這樣的立體聲校準程序來檢索R和te(https://github.com/opencv/opencv/blob/master/samples/cpp/stereo_calib.cpp)。如果您必須合併在不同時間點拍攝的點(如果在之前的評論中認爲是僵化的)三目鏡系統,那麼您的世界座標系被設置爲起始於左凸輪 – marcoresk

+0

@Beginner_In_Image_Processing,則情況會變得更加困難。下次請記得指定您的相機是否在移動或不移動。如果您已經讚賞我的回答,請考慮接受它。 – marcoresk