僅憑一張照片,有沒有辦法計算出相機位置(相機離拍攝物的距離)、拍攝角度和光源位置(或角度)?

假設這張照片是實景拍攝的,不是有人拿著相機對著一張平面的圖畫或照片進行二次拍攝得到的。


A. 無先驗知識, 僅憑一張照片無法計算出相機位置.

B. 有先驗知識的情況下, 可以計算出大量的信息. 需要的先驗知識包括:

  • 1) 一個標準物體的尺寸,
    • 比如圖像中出現的硬幣直徑, 那麼硬幣無論什麼角度, 都可以知道距離.
    • 比如A4紙, 比如桌子, 比如標準瓷磚, 地板.
  • 2) 物體的大致擺放,
    • 比如: 牆壁是垂直的(不是斜的), 就能計算出照相的角度
    • 比如: 樹基本是向上長的, 水龍頭的水的流動,
    • 比如: 人臉的大致比例
  • 3) 光學鏡頭的參數, 否則假設光學無特殊的畸變
  • 4) 光照, 時間, 經度緯度, 能大致推出方位.
    • 點光源, 還是無影燈, 還是熒光燈, 根據光照可以猜測面的法線方向
  • 5) 以上各種先驗知識與一張2D圖片的結合本身就是圖像識別+人工智慧的熱點

C, 但是, 一張照片是可以被欺騙的, 永遠無法知道, 遠處看到的一個物體, 究竟是3D的, 還是只是一個2D的貼圖, 從這個角度來說, A又是對的, B只能是概率的猜測, 而不是嚴格邏輯和數學意義上"計算出來"的確切結論.


不請自來。

興趣相關,做過這個方面的東西。前來說下自己的經驗。

這個問題大致可以改成,在什麼條件下,如何由一張圖片估計相機的位姿問題。相機位姿的計算可以說是很成熟的領域了。相機位姿的估計由特徵點的性質,分為2D-2D條件下,或者3D-2D情況下,甚至是3D到3D的情況下。由於題主的問題是一個相機拍攝到物體後,估計物體在相機坐標系下的位置。在沒有先驗條件下,默認是2D-2D的情況下,那麼其實就是對極約束的問題。但是問題在於題主所說的只有一張照片,而單目的位姿解算對極約束的問題上,有一個很嚴重的問題,就是單目初始化的問題。因此我們需要換個方向考慮這個問題。

還是回到最初的出發點上,題主可以參考相機模型,由於手機打字,就不上圖了。其實在先驗條件已知的情況下,比如已知物體在世界坐標系下的實際尺寸和大小。

例如是一個已知大小的矩形框,完全可以在相機內參標定的情況下,由最基礎的相似解出深度d,當然如果矩形框不是平行於成像的面,需要做仿射變換。解出深度的情況下問題其實就已經解決了。當然相機的畸變也可以考慮進去或者其實不是魚眼相機,在精度不用很準確的情況下,完全可以不做考慮。(逃

個人覺得單純一張照片是不能計算出來相機為止的,因為涉及相機的參數太多。但是知道了相機參數就可以知道實物距離。


有用CNN做深度預測的工作。


可以模擬,但只能在一些特殊的角度上實行,無法確定。鏡頭畸變的因素在一張照片上會顯得過於嚴重。多幾張的話,糾正畸變後就會準確些。


純粹分析圖像的話,你還得通過移動攝像頭,對比多幀圖像才行。

否則就只能上深度攝像頭了。


推薦閱讀:
相关文章