近期正在開(kāi)展的項(xiàng)目有畸變校正的需求。然而,在測(cè)試鏡頭畸變時(shí),發(fā)現(xiàn)畸變形態(tài)異常,如附圖所示,畫(huà)面中間向內(nèi)凹、四周向外凸,呈現(xiàn)出曲線型。通常而言,常見(jiàn)的鏡頭畸變僅有兩種,即向內(nèi)收縮的枕形畸變和向外凸出的桶形畸變?;诖耍疚膶@這一問(wèn)題展開(kāi)分析,并對(duì)畸變的定義、產(chǎn)生原因以及計(jì)算方法進(jìn)行總結(jié)。
畸變屬于像差的一種,顯然和鏡頭相關(guān)。遇到上述問(wèn)題該如何處理呢?最簡(jiǎn)便的方法是使用圖卡(一般是點(diǎn)陣圖或棋盤(pán)格)拍攝 raw 圖,將出現(xiàn)問(wèn)題現(xiàn)象的 raw 圖反饋給鏡頭廠進(jìn)行確認(rèn)。最初,我將點(diǎn)陣圖的 raw 圖發(fā)給他們,對(duì)方反饋現(xiàn)象不正常,但認(rèn)為我拍攝時(shí)圖卡擺歪了,要求重新擺正拍攝。
隨后,我又拍攝了一張擺正的解析力卡的 raw 圖發(fā)給他們,因?yàn)橹恍璐_認(rèn)邊緣直線變?yōu)榍€的問(wèn)題,所以使用其他圖卡能重現(xiàn)該現(xiàn)象即可。以下是這顆模組的規(guī)格:該鏡頭視場(chǎng)角為 120 度,屬于廣角鏡頭,只要畸變小于 10.5% 就是正常的。確實(shí),短焦距的廣角鏡頭容易出現(xiàn)明顯的桶形畸變,但當(dāng)前這種曲線型的畸變情況卻難以確定。
鏡頭廠經(jīng)過(guò)實(shí)測(cè)模擬,給出的結(jié)論是桶形畸變,且滿足鏡頭設(shè)計(jì)要求。他們還做出如下解釋,如附圖所示的反映鏡頭畸變的曲線圖和網(wǎng)格圖。從畸變曲線來(lái)看,曲線單調(diào)遞增且值為負(fù),因此是單純的桶形畸變。在曲線圖中,2.2mm 像高內(nèi),畸變較??;從 2.2mm 開(kāi)始,畸變變大,應(yīng)該是內(nèi)視場(chǎng)畸變和外視場(chǎng)畸變差異過(guò)大導(dǎo)致的視差。
我對(duì)此的理解是,就像在一圈一圈的圓環(huán)里畫(huà)直線,會(huì)感覺(jué)直線發(fā)生了變形。上述網(wǎng)格圖也是如此,內(nèi)視場(chǎng)的畸變很小,而到邊角部分畸變明顯增大,所以視覺(jué)上會(huì)感覺(jué)中間部分不直。
畸變是指物體成像在形狀上發(fā)生的變形,這種變形不會(huì)影響像的清晰度,只會(huì)影響像與物的相似性。如示意圖所示,常見(jiàn)的畸變類型有桶形畸變和枕形畸變。
那么,何時(shí)是桶形畸變,何時(shí)又是枕形畸變呢?以如下簡(jiǎn)單示意圖為例,將靠近鏡頭中心部分所成的像視為內(nèi)視場(chǎng)(y1),邊緣部分視為外視場(chǎng)(y2)。當(dāng)內(nèi)視場(chǎng)的放大倍率(y1/h1)大于外視場(chǎng)的放大倍率(y2/h2)時(shí),所成的像從中心往外放大,即為桶形畸變;反之則為枕形畸變。
具體出現(xiàn)桶形畸變還是枕形畸變,取決于光圈的位置,光圈位置會(huì)限制光線行為。當(dāng)光圈在透鏡前面或后面時(shí),情況不同。當(dāng)光圈在鏡頭前面,像的高度減小,即像縮小,會(huì)造成桶形失真。復(fù)雜的鏡頭,例如后焦距廣角鏡頭,往往會(huì)出現(xiàn)桶形失真,因?yàn)榍敖M鏡頭會(huì)充當(dāng)后組的光圈。當(dāng)光圈在鏡頭后面,像的高度增加,即像放大,就是枕形失真。遠(yuǎn)焦鏡頭的后組為負(fù),會(huì)導(dǎo)致枕形失真。附圖的三維圖能更清晰地展示光圈與鏡頭的關(guān)系。
從上述概念可知,畸變產(chǎn)生的根本原因是鏡頭像場(chǎng)中央?yún)^(qū)和邊緣區(qū)的放大倍率不一致,那為何會(huì)不一致呢?
請(qǐng)看光路圖,A 和 B 分別是軸上點(diǎn)和軸外點(diǎn)。過(guò) B 點(diǎn)作輔助光軸(虛線),其與像面交于 B0′點(diǎn),B0′點(diǎn)是 B 點(diǎn)的理想像點(diǎn)。另一方面,B 點(diǎn)若以細(xì)光束成像,像點(diǎn)是 B′點(diǎn),需注意,細(xì)光束成像是沒(méi)有球差和彗差的,但有場(chǎng)曲,所以 B 在細(xì)光束下成像像點(diǎn)實(shí)際在 B′,B′B0′就是 B 點(diǎn)的場(chǎng)曲。當(dāng) B 點(diǎn)以主光線成像時(shí)(黃色主光線),主光線是寬光束,存在球差和彗差,所以寬光束成像時(shí),黃色主光線交輔軸于 B1′點(diǎn),B1′B′就是 B 點(diǎn)的球差。
綜合球差、彗差、場(chǎng)曲的影響,主光線最終經(jīng) B1′點(diǎn)交像面于 Bz′點(diǎn),實(shí)際像點(diǎn) Bz′就偏離了理想像點(diǎn) B0′。再看位于光軸上的 A 點(diǎn),主光線與光軸重合,主光線的像點(diǎn)與理想像點(diǎn)在像面的中心點(diǎn) A′重合,因此軸上點(diǎn)成像沒(méi)有偏差,但軸外點(diǎn)的像高和理想像高有差異,導(dǎo)致中心和邊緣的放大倍率不同,從而產(chǎn)生了畸變。由此可見(jiàn),畸變的形成既有場(chǎng)曲因素,也有球差因素。(注:篇幅有限,此處不再闡述球差、彗差、場(chǎng)曲的概念,后續(xù)文章會(huì)單獨(dú)描述。)
再回到上述鏡頭的規(guī)格,其中提到鏡頭的 TV 畸變是 10.5%,光學(xué)畸變是 20%,這兩者有何區(qū)別,又是如何計(jì)算的呢?
光學(xué)畸變是鏡頭的指標(biāo),用于描述物體所成像的理想位置和實(shí)際位置的偏差,如光路圖中的軸外一點(diǎn) B,實(shí)際像點(diǎn)是 Bz′,理想像點(diǎn)是 B0′??梢杂美硐胂窀?y’和實(shí)際像高 yz’的比值來(lái)描述偏離程度,計(jì)算公式為:(yz' - y') /y'×100%。
可以用此項(xiàng)目中的鏡頭規(guī)格進(jìn)行具體驗(yàn)證,鏡頭的光學(xué)畸變隨視場(chǎng)范圍變化而變化,規(guī)格書(shū)中給出的 20% 是最大光學(xué)畸變值。因此,我們要計(jì)算出最大的理想像高,即計(jì)算最大視場(chǎng)范圍成像時(shí)的理想像高。
此鏡頭的最大視場(chǎng)角如規(guī)格書(shū)所示,對(duì)角線方向的 FOV 值為 120°(? = 60°),焦距 f 是 2.13mm,理想像高為:tan60°×2.13 = 3.689mm;而最大實(shí)際像高是 sensor 對(duì)角線長(zhǎng)的一半:5.867 / 2 = 2.934mm;則鏡頭最大光學(xué)畸變?yōu)椋海?.934 - 3.689)/ 3.689×100% = - 20%。
TV 畸變是針對(duì)所拍攝圖片而言的,體現(xiàn)圖像的變形程度,我們平常使用 imatest 軟件測(cè)試的就是 TV 畸變的值。TV 是 Transverse Vertical(橫向豎向)的意思。
TV 畸變的計(jì)算有 SMIA 和 Traditional TV distortion 兩種方法,如示意圖所示:SMIA TV Distortion = 100%×(A - B) / B;A = (A1 + A2) / 2,Traditional TV distortion = 100%×?H / H。
在 SMIA TV Distortion 計(jì)算中,A = (A1 + A2) / 2 = H + 2?H,B = H,則 100%×(A - B)/ B = 2?H / H,所以 SMIA TV Distortion = 2×Traditional TV distortion。
還是以該項(xiàng)目中使用的鏡頭為例進(jìn)行具體驗(yàn)證,規(guī)格書(shū)中給出的 TV 畸變值是 10.5%,且是 SMIA TV 畸變。以下是實(shí)拍的棋盤(pán)格圖,用于計(jì)算 SMIA TV 畸變,拍攝兩條橫向直線,使其與圖像的上下邊相切。
兩條直線與圖像左側(cè)相交,得到兩個(gè)坐標(biāo),可計(jì)算出縱向像素差 A1。同理可得到右側(cè)的縱向像素差 A2。兩條直線間的距離就是圖像的高 B,畸變值就是 ((A1 + A2)/ 2 - B) / B。用畫(huà)圖工具打開(kāi)后,可以得到每個(gè)點(diǎn)的像素位置,如附圖坐標(biāo)所示,先算出左側(cè)像素差(2944 - 176 = 2768),右側(cè)像素差(2937 - 169 = 2768),中間像素差為 3120,可計(jì)算出畸變值為:((2768 + 2768)/ 2 - 3120)/ 3120 = -11.2%,結(jié)果雖有誤差,但不大,實(shí)際測(cè)試一般使用 imatest 軟件計(jì)算,了解計(jì)算方法即可。