2017-02-04 147 views
3

我已經從包含對象的圖像中以pixel計算對象大小。我想在現實世界中測量物體的大小。有什麼辦法找出衡量實際大小的乘數?我目前使用python進行實施。如何在像素中測量物體尺寸等物體尺寸等實際物體尺寸,如英寸釐米等?

+0

[計算圖像的像素長度]的可能重複(http://stackoverflow.com/questions/2417148/calculating-pixel-length-of-an-image) –

+0

是的。應該可以用數學來做到這一點。 –

+0

謝謝你的快速反應 我有1200 * 800 我已經檢測到的尺寸199寬度150高度的物體大小的圖像 你能給我說說其他參數的想法來計算物體的大小,讓我們在釐米 –

回答

4

通常情況下,您將通過攝像頭獲取圖像,該攝像頭通過鏡頭將3維場景投影到2維傳感器上。垂直(高度)投影於下圖中表示的(我假設一個直線透鏡):

Lens Scene to Sensor projection (Vertical axis)

你說你在你的圖像150個的像素的像素感興趣對象的高度:

h_{obj} = 150 pixels

你說的圖像尺寸爲800個像素的總高度,假設這是傳感器的分辨率:

h_{sensor} = 800 pixels

你有興趣在尋找的對象H_ {} OBJ是發現自己離相機的距離d的公制真正的高度。

表達弧度角我們可以建立以下關係式:

D \cdot \theta = H_{obj} , f \cdot \theta = h_{obj}

其中˚F是透鏡的焦距。

隔離方面,而代以我們到達 \frac{D}{f}\cdot h_{obj} = H_{obj}

,但你已經表達了像素H_ {} OBJ,你想H_ {} OBJ在公制表示。所以,讓我們先從像素移動到毫米。

h_{obj} (mm) = \frac{h_{obj}(pixels)}{h_{sensor}(pixels)}\cdot h_{sensor} (mm)

讓我們假設你不知道傳感器的高度,所以我們把它作爲暫時的變量。重新排列,表達焦距爲毫米(mm)代入先前的方程,我們有:

D \cdot \frac{h_{obj}(pixels)}{h_{sensor}(pixels)} \cdot \frac{h_{sensor}(mm)}{f(mm)} = H_{obj}

通知的術語: \frac{h_{sensor}(mm)}{f(mm)} = \alpha (radians)

\阿爾法表示查看的垂直視場(因爲我們使用攝像機的傳感器高度),這是通常爲攝像機&鏡頭計算而提供的參數。

3dimensional Field of View

通常它在給定的程度,所以我們只是把它轉換爲弧度。

\frac{V_{fov}º}{180º}\cdot \pi = V_{fov} (radians)

  • 如果你真的知道你的鏡頭的焦距和你傳感器的大小,只需直接計算視場。這給我們留下了下面的公式:

H_{obj} = D \cdot \frac{h_{obj}(pixels)}{h_{sensor}(pixels)} \cdot V_{FOV} (radians)

視場是你缺少能夠完成你的計算參數。爲了完成這個例子,讓我們假定它是90°。

V_{FOV} = \frac{\pi}{2} (radians)

你現在用它來表達你的距離d將定義與該H_ {OBJ}將所表述的單元爲單位對系統

H_{obj} (meters) = D(meters) \cdot \frac{150}{800} \cdot \frac{\pi}{2}


另一種方法是,給定的視場,並且假定直線透鏡,就可以計算出在廣告像素高度和像素寬度距相機有一段距離。在距離d

V_{resolution@D(meters)} \left(\frac{mm}{pixel}\right) = \frac{1000(mm)}{1(meter)} \cdot D (meters) \cdot \frac{V_{FOV}(radians)}{V_{sensor}(pixels)}


垂直分辨率有關的視圖上的字段的更多信息:

+0

這正是我所需要的。 因爲這個問題,我的項目已停止。乾杯! –

+0

我對Vfov可以解釋一些疑惑嗎? –

+0

Vfov是垂直視野,Hfov將是水平視野,而視野本身,通常指的是對角線的視野,但並不總是。我用一些鏈接更新了我的答案,有一個閱讀。 –