日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

鱼眼相机模型和标定

發(fā)布時間:2023/12/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 鱼眼相机模型和标定 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Hello,歡迎來到我的博客~
今天的內(nèi)容是魚眼相機(jī)的建模方法和標(biāo)定工具的使用
主要會介紹魚眼相機(jī)和普通透視相機(jī)的聯(lián)系,以及一種簡單的魚眼相機(jī)模型,和標(biāo)定方法

1 魚眼相機(jī)與普通透視相機(jī)的關(guān)系

普通透視相機(jī)是我們在日常生活最常用的相機(jī),它的成像模型想必大家都很了解。而魚眼相機(jī)拍攝的圖像和普通相機(jī)拍攝的有著天壤之別,所以我們直觀上很難想象它是如何成像的。但是這里有一種很簡單的方法,就可以將一個普通相機(jī)改造成魚眼相機(jī):

沒錯,在普通相機(jī)前面加一個反射鏡就可以等效成一個魚眼相機(jī)了。
大家注意了,這也是給魚眼相機(jī)建模的一個基本思想,就是把魚眼相機(jī)等效為一面鏡子和普通相機(jī)的組合!
另外,還需要注意的是,這里我們只是說明魚眼相機(jī)是如何等效為普通相機(jī)的。一般的魚眼相機(jī)的實際原理并不是這樣的,而是通過一系列透鏡來改變光路,實現(xiàn)了魚眼的效果。
普通相機(jī)+鏡子構(gòu)成魚眼相機(jī)的這種系統(tǒng)稱為:catadioptric omnidirectional cameras
通過透鏡構(gòu)成魚眼相機(jī)的系統(tǒng)稱為:dioptric omnidirectional cameras

2 魚眼相機(jī)的類型

上面說到可以把一面鏡子和一個普通相機(jī)組合,形成一個魚眼相機(jī)。根據(jù)這面鏡子的不同,可以把魚眼相機(jī)分為:中心式(central camera)和非中心式(non central camera)兩類。

2.1 非中心式(Non central camera)

非中心式相機(jī),也可以叫做non-single effective viewpoint camera,如下圖所示:

上圖中,黑色粗直線代表成像平面,黑色粗曲線代表反射鏡。從圖中可以看出來,這實際上就是從外部射向鏡子的光線都不相交于同一點

2.2 中心式(Non central camera)

中心式相機(jī),也可以叫做single effective viewpoint camera,如下圖所示:

從圖中可以看出來,這種相機(jī)實際上就是從外部射向鏡子的光線都相交于同一點
對于這種相機(jī)來說,這個鏡子可能的形狀有,雙曲面(hyperbolic), 拋物面(parabolic),橢圓面(elliptical)。

3 魚眼相機(jī)模型

魚眼相機(jī)模型的作用是建立二維圖像坐標(biāo)到三維矢量間的關(guān)系。 此外,這一節(jié)介紹的相機(jī)模型是針對于中心式魚眼相機(jī)系統(tǒng)的,但對于透鏡構(gòu)成的魚眼還是反射鏡構(gòu)成的魚眼是沒有區(qū)分的。下面是一個相機(jī)模型的圖示:

注意:

  • 相機(jī)模型的中心建立在反射面的焦點處
  • ppp所在的平面是成像平面,代表的是圖像二維坐標(biāo)
  • PPP對應(yīng)了粗的黑色矢量,是一個三維矢量,代表特征點對應(yīng)的三維方向
  • 畫面最下方是一個普通相機(jī)
  • 3.1 模型假設(shè)

    實際系統(tǒng)存在很多誤差,為了模型的實用性,因此做了如下假設(shè),選擇性的忽略了一部分誤差:

    • 假設(shè)鏡面沿著鏡面軸是完美對稱的,無論旋轉(zhuǎn)多少度,都不會對光路產(chǎn)生變化
    • 假設(shè)不考慮相機(jī)的透鏡畸變,因為這部分畸變實際上可以考慮到反射鏡對應(yīng)的投影函數(shù)里

    3.2 相機(jī)模型-1

    在這個相機(jī)模型中,我們在上邊的基礎(chǔ)上,額外加入一條假設(shè),即:

    • 假設(shè)相機(jī)軸和反射鏡的中軸完全完全對齊

    于是,假設(shè)p=(u,v)p=(u,v)p=(u,v)代表了特征點對應(yīng)的圖像坐標(biāo),P=(x,y,z)P=(x,y,z)P=(x,y,z)代表了從相機(jī)坐標(biāo)系原點出發(fā),指向特征點的三維矢量。
    由于,相機(jī)軸和鏡面軸完美對齊,所以:
    [xy]=α[uv],α>0\left[\begin{matrix}x\\y\end{matrix}\right]= \alpha\left[\begin{matrix}u\\v\end{matrix}\right],\alpha>0 [xy?]=α[uv?],α>0
    其中,α\alphaα相當(dāng)于一個縮放因子,它并不影響矢量的方向。
    然后,根據(jù)xxxyyy,還有曲面的形狀,可以計算z=h(x,y)=h(αu,αv)=αf(u,v)z=h(x,y)=h(\alpha u,\alpha v)=\alpha f(u,v)z=h(x,y)=h(αu,αv)=αf(u,v)。注意,這里fffhhh都代表的是曲面的形狀函數(shù),它的形式是自己定義,我們可以隨意的把α\alphaα提出來。
    所以,最后的PPP矢量可以等效為:
    P=[xyz]=α[uvf(u,v)]P=\left[\begin{matrix}x\\y\\z\end{matrix}\right]= \alpha\left[\begin{matrix}u\\v\\f(u,v)\end{matrix}\right] P=???xyz????=α???uvf(u,v)????
    由于PPP是一個方向矢量,所以,α\alphaα沒有任何影響,所以:
    P=[xyz]=[uvf(u,v)]P=\left[\begin{matrix}x\\y\\z\end{matrix}\right]=\left[\begin{matrix}u\\v\\f(u,v)\end{matrix}\right] P=???xyz????=???uvf(u,v)????
    這里,我們給出fff的形式:
    f(ρ)=a0+a1ρ+a2ρ2+a3ρ3+a4ρ4+...f(\rho)=a_0+a_1\rho+a_2\rho^2+a_3\rho^3+a_4\rho^4+... f(ρ)=a0?+a1?ρ+a2?ρ2+a3?ρ3+a4?ρ4+...
    其中,ρ=u2+v2\rho=\sqrt{u^2+v^2}ρ=u2+v2?
    這里a1~ana_1\sim a_na1?an?就是魚眼鏡頭的參數(shù),也是要標(biāo)定的系數(shù)。
    一般來說,這個多項式的階數(shù)是4階時,效果是最優(yōu)的。

    3.3 相機(jī)模型-2

    在這個模型中,我們不再假設(shè)相機(jī)軸和反射鏡的中軸完全完全對齊。此外,我們還考慮了像素點發(fā)生線性變形(仿射變換)帶來的誤差。因此,我們將原始的像素坐標(biāo)投影到一個新的平面:
    [u′v′]=[cde1][uv]+[ucvc]\left[\begin{matrix}u'\\v'\end{matrix}\right]=\left[\begin{matrix}c & d\\e & 1\end{matrix}\right]\left[\begin{matrix}u\\v\end{matrix}\right]+\left[\begin{matrix}u_c\\v_c\end{matrix}\right] [uv?]=[ce?d1?][uv?]+[uc?vc??]
    其中,ucu_cuc?vcv_cvc?是反射鏡軸和相機(jī)軸的偏移,c,d,ec,d,ec,d,e參數(shù)代表了像素線性形變。u′u'uv′v'v就是修正過后的像素坐標(biāo)。
    之后,再根據(jù)修正后的像素坐標(biāo)和相機(jī)模型-1,仍然可以恢復(fù)特征點的三維矢量。

    4 魚眼相機(jī)標(biāo)定

    本文所提魚眼相機(jī)模型有對應(yīng)的開源工具:OCamCalib
    它有一個Matlab的工具箱,大家下載解壓以后,進(jìn)入該文件夾,用Matlab運行ocam_calib就可以打開該工具了,它的界面是這樣的:
    具體的標(biāo)定步驟:

  • 采集包含棋盤格標(biāo)定板的圖片(6~10張),盡可能覆蓋相機(jī)的所有視野范圍,盡可能靠近相機(jī)一點,保證棋盤格所有角點清晰可見。最后,照片存入該工具箱的文件夾下,并且名字命名為:[image name][image num].[image type]。例如:fisheye0.jpg, fisheye1.jpg, fisheye2.jpg,…
  • 打開ocam_calib工具箱
  • 點擊Read names按鈕。會要求你輸入圖片名,例如:fisheye。還會要求你輸入圖片格式,例如:jpg。
  • 點擊Extract grid corners按鈕。會要求你輸入你想處理的圖片編號,會讓你輸入棋盤格的數(shù)量,棋盤格的寬度,還有圖像中心(這個參數(shù)可以不用設(shè)置,直接回車,后面會自動計算)。最后,還會讓你選擇自動提取角點還是手動提取,一般就直接回車,選擇自動提取。
  • 點擊Calibration按鈕。會要求你輸入模型階數(shù),一般直接回車,就選擇默認(rèn)的4階模型,也可以自己輸入。等待一段時間后,可以得到標(biāo)定的結(jié)果,也就是f(ρ)f(\rho)f(ρ)函數(shù)的曲線和參數(shù)。
  • 點擊Find center按鈕。這一步是要找到圖像的中心,點擊完之后,需要計算很長一段時間,大家耐心等待就好。
  • 點擊Calibration Refinement按鈕。這一步是進(jìn)一步優(yōu)化標(biāo)定結(jié)果,這一步會問你最大的迭代步數(shù),直接回車就好。這一步需要等待的時間也比較長。
  • 標(biāo)定已經(jīng)完成了,通過calib_data.ocam_model數(shù)據(jù)就可以查看模型參數(shù)了。另外,Reproject on images,Show Extrinsic,Analyse error等按鈕也可以用來直觀的顯示標(biāo)定結(jié)果的好壞。
  • 參數(shù)說明
    ocam_model:儲存相機(jī)參數(shù)的結(jié)構(gòu)體
    ocam_model.ss:f(ρ)f(\rho)f(ρ)的系數(shù)
    ocam_model.xc,ocam_model.yc:圖像中心
    ocam_model.c,ocam_model.d,ocam_model.e:仿射變換參數(shù)
    ocam_model.width,ocam_model.height:圖像尺寸

    5 參考文獻(xiàn)

    [1] OCamCalib
    [2] Scaramuzza, D., Martinelli, A. and Siegwart, R., (2006). “A Flexible Technique for Accurate Omnidirectional Camera Calibration and Structure from Motion”, Proceedings of IEEE International Conference of Vision Systems (ICVS’06), New York, January 5-7, 2006.
    [3] Scaramuzza, D., Martinelli, A. and Siegwart, R., (2006). “A Toolbox for Easy Calibrating Omnidirectional Cameras”, Proceedings to IEEE International Conference on Intelligent Robots and Systems (IROS 2006), Beijing China, October 7-15, 2006.
    [4] Scaramuzza, D. (2008). Omnidirectional Vision: from Calibration to Robot Motion Estimation, ETH Zurich, PhD Thesis no. 17635. PhD Thesis advisor: Prof. Roland Siegwart. Committee members: Prof. Patrick Rives (INRIA Sophia Antipolis), Prof. Luc Van Gool (ETH Zurich). Chair: Prof. Lino Guzzella (ETH Zurich), Zurich, February 22, 2008.

    總結(jié)

    以上是生活随笔為你收集整理的鱼眼相机模型和标定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。