當前位置:
首頁 > 知識 > 如何測算出任一副圖片中的物體的實際尺寸?

如何測算出任一副圖片中的物體的實際尺寸?

Q:

比如我想知道這個書架每一格的高寬,有辦法嗎?沒有什麼神奇的軟體可以幫忙?

A:

從一幅圖像中無法測出物體的長度,因為缺乏參照物,但可以測出兩個平行物體的長度比例。

如果已知一個物體的實際大小(比如在圖片中放上一枚1元硬幣或者知道某個柜子有多高),那麼就可以通過長度比和參照物的已知長度測出物體長度。

具體方法見文獻[1],因為需要一些矩陣運算和攝像頭成像方面的推導,這裡只大概說說原理。

圖像測量利用了攝像頭成像也就是小孔成像的幾個性質[2]:

第一,攝像頭把平行的直線映射為圖像上相交直線,筆直的鐵軌在遠處相交就是這個道理,這個交點被稱為消隱點(vanish point)。

可以認為平行空間直線在無窮遠處相交,消隱點則是這一交點的像。

所有水平的平行直線族都各自相交於無窮遠處的一點,這些點構成無窮遠直線,這條直線在圖像上的像叫地平線。

我們所居住的三維空間中存在三組相互垂直的直線(例如水平兩組,x軸和y軸方向,豎直一組,z軸方向),所有x、y、z方向上的平行直線在一張圖片上會分別相交於各自的一個消隱點。

並且水平直線對應的兩個消隱點如果連起來,連線就是地平線。

測量的關鍵,就是要得到這些消隱點,因此有很多豎直線(如書架)或水平線(如地板磚)的圖片就容易測量。

第二,攝像頭把三維空間投影到二維的圖像上,保持直線交比不變,交比是四個點兩兩「比例的比例」。

所以如果在三維空間中的一條直線上有四個點,那麼它們映射到圖片上的四個點後,這四個點的交比不變。

文獻[1]通過這些條件,給出了從圖片上計算長度比的公式。通過示意圖我們可以更加直觀地看出它是如何工作的:

首先,假設我們已知藍色小人Bob的身高,要求出紅色小人John的身高,只需要知道兩人的身高比值就可以:

我們用大寫字母表示真實的坐標,隨後用小寫字母表示圖片上的像素坐標。

兩人的身高比值BE/AF可以這麼求:首先連接AB,然後過E點做AB的平行線交AF於點D,因為ABED是個矩形,所以要求的比值就等於AD/AF。

然而,這種判斷是在三維空間中做出的,當物體成像為圖片,所有點的位置都會發生變化(不要問我圓頭為什麼會變成方頭):

其中最顯著的變化是平行線相交了,由此我們可以找到三個方向的消隱點,這可以通過對豎直和兩組水平平行線求延長線獲得:

注意我們把水平平行線對應的兩個消隱點連接起來,得到了一條在(無窮)遠處的直線,每個人都熟悉它,它就是地平線。

地平線上所有的點都有一個性質:從其上一個點引出的所有直線都是相互水平平行的。

因此點D在圖上的坐標d是這麼求出的:

1. 畫出地平線

2. 延長ab,交地平線於點c

3. 延長ce,交af,也就是John於點d

因為點c在無窮遠處,所以cd和ca在空間中是平行直線,abed也就是上面說述真實空間中矩形ABED的像。

然而,知道了某些點在圖像上的像,它們的實際長度比是無法直接從圖上測得的,因為大家的深度不一樣,這時就要利用成像前後一條直線上四個點交比不變的性質,考察紅色小人John身上的三個點A、D、F以及其延長到無窮遠處的點G,就可以得到(大寫字母換成小寫字母):

(AD/AF)/(GD/GF)=(ad/af)/(gd/gf)

因為已經求出了點d,等式右邊所有的量都可以從圖像上測出。等式左邊的點G在真實空間是所有垂直直線的交點,這個點在無窮遠,和無窮相比點F和點D的差異可以忽略不計,所以GD/GF=1,這樣就得到最終結果:

AD/AF = (ad/af)/(gd/gf)

[1] Criminisi A, Reid I, Zisserman A. Single view metrology[J]. International Journal of Computer Vision, 2000, 40(2): 123-148.

[2] Hartley R, Zisserman A. Multiple view geometry in computer vision[M]. Cambridge university press, 2003.

PS: 有朋友指出的image rectification概念其實是雙目視覺中的一個專有概念,假如有兩幅圖像拍攝的物體相同,但是攝影師站位不同,一左一右,通過某種變換可以對兩幅圖像分別做一個變換,(近似)讓左邊這幅圖像上每一行的每一個像素點代表的物體上的點在右邊那副圖像上的像點也恰好在右圖的同一行,這種變換過程叫做image rectification。其作用是為了隨後計算視差圖方便。

本文由超級數學建模編輯整理

來源:王小龍(知乎)

https://www.zhihu.com/question/20448353/answer/24885779

-----這裡是數學思維的聚集地------

「超級數學建模」(微信號supermodeling),每天學一點小知識,輕鬆了解各種思維,做個好玩的理性派。60萬數學精英都在關注!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 超級數學建模 的精彩文章:

趣題:公司應該僱用多少員工?
Tensorflow究竟如何應用在圖像處理、自然語言處理等方面

TAG:超級數學建模 |