簡體   English   中英

OpenCV中實現的立體BM和SGBM算法中的斑點是什么

[英]What is speckle in stereo BM and SGBM algorithm implemented in OpenCV

在應用 OpenCV 中實現的立體聲 BM 和 SGBM 算法時,我遇到了“散斑噪聲”的概念,它由散斑濾波器過濾,由其“散斑窗口大小”和“散斑范圍參數”表征 => 請參閱該 鏈接上的 openCV 文檔 到 OpenCV 文檔

首先,什么是斑點噪聲,它是由什么原因引起的?

其次,在上面的鏈接中,您可以找到以下定義(這些定義並沒有真正解釋任何內容,只是給出了似乎無處不在的范圍):

“speckleWindowSize:平滑視差區域的最大大小,以考慮它們的噪聲斑點並使其無效。將其設置為 0 以禁用斑點過濾。否則,將其設置在 50-200 范圍內的某個位置。”

“speckleRange : 每個連通分量內的最大視差變化。如果你做散斑過濾,將參數設置為正值,它將隱式乘以 16。通常,1 或 2 就足夠了。“

而 Gary Bradski 和 Adrian Kaehler 着名的“Learning OpenCV”一書給出了 spekleWindowSize 的完全不同的范圍:

“基於塊的匹配在對象邊界附近存在問題,因為匹配窗口在一側捕捉前景,在另一側捕捉背景。這會導致局部區域存在大小不一的差異,我們稱之為斑點。為了防止這些邊界匹配,我們可以通過設置斑點窗口大小在斑點窗口(大小范圍從 5×5 到 21×21)上設置斑點檢測器,9×9 窗口的默認設置為 9。在散斑窗口內,只要檢測到的最小和最大視差在散斑范圍內,就允許匹配(默認范圍設置為 4)。”

通過測試,我似乎可以有效地增加 200 個窗口大小,但如果以像素表示,那不是一個巨大的窗口嗎?

另外,上面的文字解釋了什么是散斑。 據我了解,我們認為背景的視差值很小,前景的視差值很大,這正是應該的......? 因此,我不明白為什么它被認為是噪音,為什么我們應該過濾它?

任何幫助,將不勝感激,

謝謝你。

在使用任何提供的視差算法時,如果應用后過濾,可能會獲得更好的結果。 立體圖像視差圖的典型問題區域是物體邊緣陰影區域紋理區域來自視差圖的計算方式。 您可以查看本教程,其中將一種類型的后過濾應用於 BM 視差算法。

“Learning OpenCV”是一本很棒的書,您從中引用的內容為您的問題提供了明確的答案。

這是導致我們稱為散斑的局部區域的大小差異。

沒有過濾和使用它的示例視差圖

我從answers.opencv.org 的問題中獲取了一張圖片。

斑點是一個在計數視差之間具有巨大差異的區域,應將其視為噪聲(並過濾) 斑點很可能出現在問題區域。

手動設置算法散斑相關參數的原因是該參數在不同場景和設置之間會有很大差異。 因此,沒有單一的最佳選擇speckleWindowSizespeckleRange任何開發人員的要求。 您可能會處理靠近相機的大物體(如圖像上)或遠離相機且靠近背景的小物體(鳥瞰道路場景中的汽車)等。因此,您應該設置適合您特定相機設置的參數(或如果相機設置可能會有所不同,請為您的用戶提供調整它們的界面)。 考慮手指周圍和手掌內部的區域。 有斑點(尤其是手掌內的區域)。 在這種情況下,視差的差異是噪聲,應該被過濾掉。 選擇非常大的speckleWindowSize (藍色矩形)會導致手指等小而重要的細節丟失。 選擇較小的speckleWindowSize (紅色矩形)和較大的speckleRange可能更好,因為視差變化似乎很大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM