2011-08-17 178 views
9

我想用opencv測量使用3d立體照相手機的物體的距離。我正在尋找能夠測量距離測量精確度的公式,具體取決於焦距,兩臺攝像機之間的距離,圖像分辨率以及被測物體的大小。 谷歌搜索一點,我發現這個公式:opencv深度圖精度

d = Z^2 * P /(F * B)

ž - 距離爲對象,對 - 視差精度,F - 焦距,B - 基線(相機之間的距離)。

我知道基線和焦距,但我不知道差異的準確性。 這個公式是我需要的嗎?如果是這樣,我如何找到差異的準確性?

謝謝。

回答

5

如果您看中的公式8之後的段落,您可以看到它們的差異精度爲0.18 * 10^-6m。進一步閱讀,我得出結論,他們使用的視差精度是所用相機的CCD上兩個像素之間的距離。對於分辨率爲640X480(非常老的VGA相機)的1/4「CCD(尺寸爲3.2mm×2.4mm),這將是5 * 10^-6。我不知道LG Optimus 3D的傳感器尺寸但假設1/4英寸CCD和2592像素水平分辨率,視差精度的基線將爲:1.23 * 10^-6,在10米處的深度精度爲0.85米。這對我來說看起來很合理。如果CCD較小,則它會改善(即準確度值降低)。

這是假設兩個立體圖像之間的特徵完美匹配的最低可能值。該值僅代表立體聲對的物理限制。

+0

謝謝。我試圖粗略估計這個值,看看我的項目是否可行。我目前使用的手機是LG Optimus 3d。它的焦距爲6毫米,基線爲24毫米。我想計算10米處的距離測量誤差。即使我假設視差誤差只有1個像素,這是沒有意義的(或者它是什麼?) d = 10000^2 * 1 /(24 * 6)=〜694米... 我是什麼做錯了? – barisdad

+0

好的,我的第一個錯誤是,這不是米。但我仍然不明白這意味着什麼。 – barisdad

+0

...我的第二個錯誤是,這個值明顯低於1(這是一個比例,而不是一個像素值)。什麼可以估計一輛10米的汽車的差距值? – barisdad

11

我意識到這是一年後,但以防萬一有人發現這一點。

的公式是這樣的:

dD = dd * D^2/fB

其中:

  • dd =視差誤差
  • dD =深度誤差
  • D =深度
  • f =焦距
  • B =基線

f = 6mm = 0.006m如果,B = 24mm = 0.024mD = 10mdd是1個像素[讓我們稱之爲P現在,但它通常是約1.4um。

封堵所有的數字中得出:

dD = P * 10^2/(0.006 * 0.024) ~ 694444 P

對於P=1.4um, dD = 0.97 m(約爲9.7%)。

現在假定您的對應關係給出了單像素錯誤。你可以做子像素搜索,根據圖像中的噪聲水平和紋理,你可以得到亞像素精確的對應關係。在這種情況下,你的準確性會好一點。

請注意,此公式適用於錯誤。視差和深度之間的映射如下:

d = fB/D

其中:

  • d =視差
  • D =深度
  • f =焦距
  • B =基線

同樣,插入數字給出:

d = (0.006 * 0.024/10) m = 0.0000144 m = 0.0144 mm = 14.4 um

如果您認爲您的像素大小約爲1.4um,那麼14.4um約爲10像素。這與上面的錯誤一致 - 意味着1像素誤差約佔10%。

10米以外的車在左右傳感器之間移動10個像素。

我希望有幫助。

+0

嗨@thang,我的問題是關於差異的錯誤。它是作爲一個典型值使用還是通過傳感器參數的已知知識來計算? –