手机中的计算摄影-超广角畸变校正
點(diǎn)擊上方“3D視覺(jué)工坊”,選擇“星標(biāo)”
干貨第一時(shí)間送達(dá)
來(lái)源丨計(jì)算攝影學(xué)
作者丨HawkWang
廣角鏡頭,甚至超廣角鏡頭已經(jīng)成為了現(xiàn)在手機(jī)的標(biāo)配,這樣的手機(jī)能夠拍攝出寬廣的視角,還能夠在合拍時(shí)拍下更多的人物。
比如最新的iPhone13 Pro就有一顆26mm焦距的廣角鏡頭,還有一顆13mm焦距的超廣角鏡頭。
事實(shí)上,自2019年起,很多手機(jī)攝像頭的FOV就已經(jīng)超過(guò)100度了
然而,廣角鏡頭也會(huì)帶來(lái)副作用,如下圖紅框所示,本來(lái)是直線的墻頂卻變成了曲線
下面這個(gè)場(chǎng)景更加明顯,整個(gè)地面和大樓都變成彎曲的了
另外,廣角鏡頭拍攝的畫面在四角處還會(huì)出現(xiàn)拉伸現(xiàn)象,比如這兩位姑娘的腳就被明顯拉長(zhǎng)了。有時(shí)候攝影師利用這種特性來(lái)拍攝大長(zhǎng)腿,但如果構(gòu)圖不恰當(dāng)也會(huì)導(dǎo)致比較詭異的現(xiàn)象。
以上兩種現(xiàn)象,分別是由于鏡頭的物理畸變和透視畸變導(dǎo)致的。今天我們來(lái)看看兩種畸變產(chǎn)生的原因,以及解決方案。
一. 鏡頭畸變
我們假設(shè)整個(gè)成像符合小孔成像模型
然而,真實(shí)的相機(jī)的鏡頭并不能完美的遵循小孔成像模型。
在制造過(guò)程中,透鏡的實(shí)際曲面和理想曲面之間存在一定的誤差,這種誤差會(huì)改變光的折射方向,使得成像點(diǎn)的位置發(fā)生偏差,通常這會(huì)導(dǎo)致“徑向畸變”
根據(jù)透鏡曲面的不同情況,徑向畸變會(huì)導(dǎo)致畫面出現(xiàn)桶形失真或枕形失真。
與此同時(shí),實(shí)際相機(jī)通常采用多個(gè)透鏡組成鏡頭組,各透鏡中心與光軸是否重合、鏡片與光軸是否垂直、各鏡片沿光軸方向的位置偏差等都會(huì)使光線偏離理論路徑。雖然透鏡的組合可以相互抵消一些性質(zhì)相反的非線性畸變,但是也會(huì)疊加一些性質(zhì)相同的非線性畸變。通常,這會(huì)導(dǎo)致“切向畸變”
實(shí)際成像過(guò)程中,這兩種畸變通常混雜在一起,尤其是廣角鏡頭組很難避免它們。如下圖所示:
那么如何去除鏡頭畸變呢?
為了去除它們,我們需要嚴(yán)格的用數(shù)學(xué)公式來(lái)表述 實(shí)際成像點(diǎn)和理想成像點(diǎn)之間的位置關(guān)系。
先把小孔成像模型用幾何表示如下:
可見(jiàn)對(duì)于三維空間中的坐標(biāo)[X, Y, D]T, 是比較容易求出其理想成像點(diǎn)在相機(jī)坐標(biāo)系中的坐標(biāo)的,我們令其理想投影點(diǎn)為 [xc, yc],這里,下標(biāo)c代表corrected(這里是近似認(rèn)為校正后的坐標(biāo)既是按照理想小孔成像模型的投影坐標(biāo))
由于實(shí)際相機(jī)會(huì)有畸變,所以我們把帶畸變的投影點(diǎn)表示為 [xd, yd]?,這是和理想投影點(diǎn)不一樣的坐標(biāo),d代表distorted。這兩個(gè)位置的關(guān)系可以近似表示如下。這里展示的是3階模型,更復(fù)雜的鏡頭畸變校正可以用到更高階的模型,比如OpenCV里面可以用到6階模型:
這樣我們就建立了在相機(jī)坐標(biāo)系下,校正前和校正后坐標(biāo)之間的關(guān)系。由于我們是對(duì)圖像上的像素進(jìn)行操作,還需要將相機(jī)坐標(biāo)轉(zhuǎn)換為像素坐標(biāo),求取像素坐標(biāo)之間的關(guān)系,這需要用到圖像的內(nèi)參數(shù)(參見(jiàn)手機(jī)中的計(jì)算攝影1-人像模式(雙攝虛化))
這樣我們最終可建立[uc, vc]和[ud, vd]之間的一一對(duì)應(yīng)關(guān)系,這種關(guān)系可以用一張兩通道的圖來(lái)表述,兩個(gè)通道分別表示特定校正后像素對(duì)應(yīng)的校正前的u坐標(biāo)和v坐標(biāo)。通常,計(jì)算出的坐標(biāo)值[ud, vd]是浮點(diǎn)值,因此需要用到插值算法來(lái)實(shí)現(xiàn)真正的圖像變換。
OpenCV的undistortImage函數(shù)的幫助文件里也講得很清楚,它通過(guò)相機(jī)內(nèi)參計(jì)算出畸變校正的變換圖,接著調(diào)用remap函數(shù)來(lái)進(jìn)行從畸變圖像到校正后圖像的插值變化。
通過(guò)這種方法去除鏡頭的徑向畸變和切向畸變后,畫面中的直線會(huì)被校直,如下圖所示:
采用類似原理甚至可以對(duì)魚眼鏡頭圖像進(jìn)行畸變校正:
然而,雖然這個(gè)方案能很好的校直直線,卻也帶來(lái)了一定副作用。如下圖紅框所示的腿部,圖像出現(xiàn)了異常的拉伸現(xiàn)象:
這是因?yàn)閷?shí)際拍攝的場(chǎng)景中,除了鏡頭畸變導(dǎo)致的畫面形變外,還有一種特殊的畸變:透視畸變
二. 透視投影和透視畸變
讓我們?cè)倏纯葱】壮上衲P?#xff0c;可以很容易發(fā)現(xiàn)一個(gè)物體所成像的尺寸與其距離鏡頭的距離(物距)成反比,即所謂的近大遠(yuǎn)小
當(dāng)拍攝一個(gè)目標(biāo)時(shí),只要它的表面存在物距上的差異,那么這個(gè)物體上每一個(gè)物距不同的局部區(qū)域都會(huì)有不同的成像放大倍率。這種現(xiàn)象不管是通過(guò)鏡頭成像,還是小孔成像都是存在的,是固有的屬性,這里的投影模型就叫做透視投影,其產(chǎn)生的效應(yīng)我稱之為透視效應(yīng)。
人們有時(shí)利用透視效應(yīng)來(lái)拍攝有趣的攝影作品:
透視投影還會(huì)使得三維空間中的平行線在畫面中相交,其交點(diǎn)稱作為消失點(diǎn)。
藝術(shù)家早就會(huì)使用透視技術(shù),來(lái)突出主體了,例如下面這幅畫是荷蘭著名畫家約翰內(nèi)斯·維米爾(Johannes Vermeer)的作品鋼琴課。畫家利用透視效應(yīng),將主人公安排在了整個(gè)畫面幾條直線的消失點(diǎn)上,從而實(shí)現(xiàn)了突出主體的作用。
然而,透視效應(yīng)也會(huì)導(dǎo)致畫面的形變,我們看到拍攝同一個(gè)姑娘時(shí),短焦鏡頭(廣角鏡頭)出現(xiàn)了強(qiáng)烈的透視畸變。這是因?yàn)闉榱伺某鐾瑯映叽绲南?#xff0c;短焦鏡頭拍攝時(shí)物距更近,因?yàn)橥敢曅?yīng)的近大遠(yuǎn)小法則,這種形變顯得更加明顯。尤其是在近距離拍攝時(shí),人臉上鼻子相比臉側(cè)面距離鏡頭更近,所以鼻子成像時(shí)放大得更大,于是人臉就顯得更加詭異了。
除了上面這種因?yàn)榻嚯x拍攝導(dǎo)致的形變,透視效應(yīng)還會(huì)導(dǎo)致遠(yuǎn)離相機(jī)中心的物體被拉伸,比如下面這張用iPhone13 Mini的廣角鏡頭拍攝的照片。相比起上面因?yàn)榻嚯x拍攝導(dǎo)致的形變,這種邊緣物體被拉伸的現(xiàn)象是我們更常見(jiàn)的情況。
那么,有沒(méi)有辦法同時(shí)去除鏡頭畸變和透視效應(yīng)導(dǎo)致的邊緣形變呢?就像下面這樣:
這就是下一節(jié)的內(nèi)容。
三. 同時(shí)去除鏡頭畸變和透視畸變
在用手機(jī)照片時(shí),人們拍的最多的就是人像照,不管是單人的,還是多人合照,正如上面的內(nèi)容所講,廣角鏡頭帶來(lái)了不必要的副作用,尤其是圖像邊角處的人像被拉扯的現(xiàn)象,這種畸變會(huì)在我們強(qiáng)行校直直線,變?yōu)橥敢曂队昂蟾用黠@。
為了解決人像的這種拉扯現(xiàn)象,以前的方法是利用球極投影(Stereographic projection)或者墨卡托投影(Mercator projection)來(lái)對(duì)圖像進(jìn)行進(jìn)一步處理。
幾種不同的投影方式的比較
當(dāng)對(duì)畫面采用這兩種投影時(shí),能一定程度上恢復(fù)畫面邊角頭部、臉部的形變,但也會(huì)導(dǎo)致背景直線重新彎曲,如下圖所示。
以前有很多研究者研究過(guò)這個(gè)問(wèn)題,但都沒(méi)有得到理想的效果。比如[Zorin and Barr 1995]提出的方案,雖然修復(fù)了人臉的扭曲,但是也導(dǎo)致了墻面、桌面、顯示器等其他物體的扭曲
還有[Carroll et al. 2009]提出的通過(guò)優(yōu)化全局一致性最小化感知失真的方案,以及[Tehrani et al. 2016]提出的通過(guò)引入虛擬的相機(jī)視角的方案。但這些方案需要手動(dòng)操作,例如標(biāo)注突出的邊緣或要保留的重要區(qū)域,而且有時(shí)候無(wú)法徹底解決問(wèn)題。
有沒(méi)有一種自動(dòng)的、不需人為干預(yù),還能很好的去除圖像中各種畸變的方法呢?有的,這就是我要介紹的這篇文章
這是臺(tái)灣省的三位才俊施易昌, 賴威昇及梁家愷在2019年發(fā)表的文章。他們的想法很直接:既然透視畸變矯正能夠校直圖像中的直線,而球極投影又能夠恢復(fù)人臉的形狀。那么不如先對(duì)圖像做人臉?lè)指?#xff0c;對(duì)非人臉的背景區(qū)域計(jì)算透視畸變的校正map,再對(duì)人臉部分做球極投影的校正map,然后把兩部分的變換map整合到一起,用最終的變換圖來(lái)對(duì)圖像進(jìn)行插值變換:
聽(tīng)起來(lái)這是個(gè)清晰、直接的想法,然而做起來(lái)卻很不容易。如下面右圖所示,如果簡(jiǎn)單的把兩個(gè)map融合到一起,只會(huì)得到很糟糕的結(jié)果
所以作者認(rèn)為,應(yīng)該把變換map的求解看做是一個(gè)最優(yōu)化的問(wèn)題,通過(guò)求解這個(gè)最優(yōu)化問(wèn)題得到最佳的map,然后利用它對(duì)圖像進(jìn)行插值變換,這樣才能得到最佳的結(jié)果。
最優(yōu)化總是需要達(dá)到某些預(yù)期目標(biāo)的,那么此處的目標(biāo)是什么呢?我們一起來(lái)直觀的想一想:
首先,校正后的圖像在人臉部分是非常接近球極投影的
越是靠近圖像中心的人臉,越接近透視投影本來(lái)的樣子
人臉在變換前后不應(yīng)該有異常的尺度變化
經(jīng)過(guò)透視投影校直的直線,不應(yīng)該被球極投影重新變彎曲
因此,作者首先將問(wèn)題用數(shù)學(xué)公式表達(dá)如下:
這里面,{vi*}是指map中所有的2維向量的集合, vi是第i個(gè)像素對(duì)應(yīng)的源像素坐標(biāo),而Et則是一個(gè)目標(biāo)函數(shù),通過(guò)使Et最小化,就可以求得最佳變換map {vi*}
Et由多項(xiàng)目標(biāo)函數(shù)組成。這里面,首先是人臉目標(biāo)項(xiàng)?Ef,?它是所有人臉處的目標(biāo)函數(shù)值Es,k之和,正如我們上面的直觀感覺(jué),這個(gè)目標(biāo)函數(shù)約束了下面幾個(gè)目標(biāo):
校正后的圖像在人臉部分是非常接近球極投影的
越是靠近圖像中心的人臉,越接近透視投影本來(lái)的樣子
人臉在變換前后不應(yīng)該有異常的尺度變化
作者演示了人臉項(xiàng)的作用,當(dāng)沒(méi)有這一項(xiàng)目標(biāo)函數(shù)的約束時(shí),所得到的圖像有明顯的人臉扭曲變形,而加入這一項(xiàng)后結(jié)果有很大的改善。
接著需要約束直線的彎曲,目標(biāo)函數(shù)如下。這里用了叉積來(lái)約束變換前后直線的夾角,表明允許直線發(fā)生平移,但避免發(fā)生大的彎曲
然后還要加上1項(xiàng),約束變換map的局部平滑性
作者也演示了上面這兩個(gè)約束函數(shù)的作用,可見(jiàn)它們很好的保持了直線,而且沒(méi)有引入副作用。
為了避免在圖像邊緣處出現(xiàn)異常的扭曲,還需要在中間計(jì)算時(shí)擴(kuò)充圖像(通過(guò)Padding),并對(duì)擴(kuò)充圖像做一些特殊的約束(記為?Ea?),?并在最后一步裁減掉多余的部分。這種邊界的約束也帶來(lái)了收益:
所以讓我們回顧下上面講的最優(yōu)化式子:
這里的Et就是上述幾種目標(biāo)函數(shù)的加權(quán)和:
通過(guò)使得Et最小化,就可以求出最佳的變換矩陣,這個(gè)過(guò)程可以圖示如下,通常只需要兩三個(gè)迭代就可以收斂:
作者在大量不同的特質(zhì)的圖像上做了驗(yàn)證,效果非常好。讓我們多看一些作者給出的演示下效果吧
四. 實(shí)現(xiàn)、性能,以及缺陷
在論文中,作者提到他們將這個(gè)算法在PC及高通的SDM845平臺(tái)上都做了實(shí)現(xiàn),其關(guān)鍵的最優(yōu)化過(guò)程用的是Ceres solver這個(gè)庫(kù),最終插值算法用的是高精度的Lanczos采樣算法。他們將鏡頭畸變和透視畸變的校正整合到同一個(gè)map中進(jìn)行,對(duì)于1200萬(wàn)像素的輸入圖像,能夠在920ms內(nèi)完成對(duì)所有的畸變校正,并且實(shí)際部署到了Google的Pixel 3手機(jī)中。一篇論文,不僅僅在理論上有突破點(diǎn),而且還能實(shí)際落地到產(chǎn)品中,有高度的可用性,確實(shí)讓人佩服!
雖然作者展示的結(jié)果已經(jīng)足夠驚艷了,但也并不是完美無(wú)缺。作者也提出,它是需要人臉Mask作為輸入的,如果沒(méi)有成功檢測(cè)、分割到人臉,那么算法就會(huì)出錯(cuò):
另外算法只對(duì)人臉部分進(jìn)行校正,人的身體還是保持不變,這樣在校正后有時(shí)會(huì)出現(xiàn)頭小身大的詭異現(xiàn)象:
事實(shí)上,我們還發(fā)現(xiàn)該算法即便提供了足夠的人臉Mask,該算法還是可能導(dǎo)致背景線條出現(xiàn)彎曲,如下圖所示:
或是不能對(duì)人像做到足夠好的修復(fù):
在我看來(lái),它最大的問(wèn)題還是速度太慢。可能你覺(jué)得920ms已經(jīng)夠快了,但事實(shí)上對(duì)于今天的拍照手機(jī)來(lái)說(shuō),這是一個(gè)很慢的速度——用戶不能忍受,因而手機(jī)生產(chǎn)廠商也無(wú)法忍受——大家都希望最好是在更短的時(shí)間內(nèi),例如幾十毫秒內(nèi)完成整個(gè)運(yùn)算。
有沒(méi)有能夠解決上述效果問(wèn)題,還能夠跑得飛快的算法呢?當(dāng)然是有的,事實(shí)上我的團(tuán)隊(duì)已經(jīng)在手機(jī)上實(shí)現(xiàn)了效果更好,而且只需要不到100毫秒就能夠完成整個(gè)過(guò)程的廣角畸變校正算法,并且已經(jīng)在很多客戶項(xiàng)目中部署了。而這一部分的基礎(chǔ)原理,我將在下一篇文章中為你介紹。
五. 總結(jié)
今天我首先為你介紹了鏡頭畸變,以及它引起的直線彎曲現(xiàn)象。然后講述了鏡頭畸變的兩種原因——徑向畸變和切向畸變,并給出了去除這兩種畸變的完整過(guò)程。接著我介紹了透視投影的應(yīng)用,以及它導(dǎo)致的邊角拉伸現(xiàn)象。我還花了較大篇幅,介紹了三位寶島才俊的去除透視畸變的論文。事實(shí)上,我們正是基于這篇論文的思想加以改進(jìn),實(shí)際開(kāi)發(fā)了相關(guān)的產(chǎn)品,并已經(jīng)部署到了很多客戶手機(jī)中,當(dāng)然我們已經(jīng)完全采用了不同的方法。
如同上面的論文中最后所說(shuō),廣角鏡頭畸變校正這個(gè)方向其實(shí)背后還有一個(gè)更加本質(zhì)和深入的問(wèn)題:在透視投影下,是圖像中的哪些特征使得我們?nèi)祟愐曈X(jué)系統(tǒng)感知到了畸變呢?有沒(méi)有某種方式來(lái)客觀定量的描述這種畸變呢?這其實(shí)牽涉到了圖像質(zhì)量的定量評(píng)價(jià)這個(gè)領(lǐng)域了。我希望下一篇文章中,能夠?qū)Υ私o出一些解答
六. 參考資料
首先感謝所有模特提供照片,感謝我的同事王鵬在本文寫作過(guò)程中給予的幫助
本次文章的參考資料和引用素材來(lái)源眾多,列舉如下:
1、蘋果官網(wǎng)iPhone13 Pro介紹圖
2、高翔, 張濤 《視覺(jué)SLAM十四講 從理論到實(shí)踐》
3、OpenCV UndistortImage介紹:docs.opencv.org/4.5.4/d
4、Shree Nayar,?First Principles of Computer Vision
5、施易昌等的廣角畸變校正論文: YiChang Shih, Wei-Sheng Lai, and Chia-Kai Liang. Distortion-free wide-angle portraits on camera phones.?ACM Trans. Graphics, 38(4):1–12, 2019
6、上面論文的演示資料、素材等,均來(lái)自于其項(xiàng)目官網(wǎng):people.csail.mit.edu/yi
7、Che-Han Chang?et al, Rectangling Stereographic Projection for Wide-Angle Image Visualization, ICCV2013
8、少量素材來(lái)自:Jing Tan et al, Practical Wide-Angle Portraits Correction with Deep Structured Models
9、Denis Zorin and Alan H Barr. 1995. Correction of geometric perceptual distortions in pictures. In SIGGRAPH. 257–264.
10、Robert Carroll, Maneesh Agrawal, and Aseem Agarwala. 2009. Optimizing content- preserving projections for wide-angle images. In ACM TOG, Vol. 28. 43.
11、Mahdi Abbaspour Tehrani, Aditi Majumder, and M Gopi. 2016. Correcting perceived perspective distortions using object specific planar transformations. In Proc. ICCP.
本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。
3D視覺(jué)精品課程推薦:
1.面向自動(dòng)駕駛領(lǐng)域的多傳感器數(shù)據(jù)融合技術(shù)
2.面向自動(dòng)駕駛領(lǐng)域的3D點(diǎn)云目標(biāo)檢測(cè)全棧學(xué)習(xí)路線!(單模態(tài)+多模態(tài)/數(shù)據(jù)+代碼)
3.徹底搞透視覺(jué)三維重建:原理剖析、代碼講解、及優(yōu)化改進(jìn)
4.國(guó)內(nèi)首個(gè)面向工業(yè)級(jí)實(shí)戰(zhàn)的點(diǎn)云處理課程
5.激光-視覺(jué)-IMU-GPS融合SLAM算法梳理和代碼講解
6.徹底搞懂視覺(jué)-慣性SLAM:基于VINS-Fusion正式開(kāi)課啦
7.徹底搞懂基于LOAM框架的3D激光SLAM: 源碼剖析到算法優(yōu)化
8.徹底剖析室內(nèi)、室外激光SLAM關(guān)鍵算法原理、代碼和實(shí)戰(zhàn)(cartographer+LOAM +LIO-SAM)
9.從零搭建一套結(jié)構(gòu)光3D重建系統(tǒng)[理論+源碼+實(shí)踐]
10.單目深度估計(jì)方法:算法梳理與代碼實(shí)現(xiàn)
11.自動(dòng)駕駛中的深度學(xué)習(xí)模型部署實(shí)戰(zhàn)
12.相機(jī)模型與標(biāo)定(單目+雙目+魚眼)
重磅!3DCVer-學(xué)術(shù)論文寫作投稿?交流群已成立
掃碼添加小助手微信,可申請(qǐng)加入3D視覺(jué)工坊-學(xué)術(shù)論文寫作與投稿?微信交流群,旨在交流頂會(huì)、頂刊、SCI、EI等寫作與投稿事宜。
同時(shí)也可申請(qǐng)加入我們的細(xì)分方向交流群,目前主要有3D視覺(jué)、CV&深度學(xué)習(xí)、SLAM、三維重建、點(diǎn)云后處理、自動(dòng)駕駛、多傳感器融合、CV入門、三維測(cè)量、VR/AR、3D人臉識(shí)別、醫(yī)療影像、缺陷檢測(cè)、行人重識(shí)別、目標(biāo)跟蹤、視覺(jué)產(chǎn)品落地、視覺(jué)競(jìng)賽、車牌識(shí)別、硬件選型、學(xué)術(shù)交流、求職交流、ORB-SLAM系列源碼交流、深度估計(jì)等微信群。
一定要備注:研究方向+學(xué)校/公司+昵稱,例如:”3D視覺(jué)?+ 上海交大 + 靜靜“。請(qǐng)按照格式備注,可快速被通過(guò)且邀請(qǐng)進(jìn)群。原創(chuàng)投稿也請(qǐng)聯(lián)系。
▲長(zhǎng)按加微信群或投稿
▲長(zhǎng)按關(guān)注公眾號(hào)
3D視覺(jué)從入門到精通知識(shí)星球:針對(duì)3D視覺(jué)領(lǐng)域的視頻課程(三維重建系列、三維點(diǎn)云系列、結(jié)構(gòu)光系列、手眼標(biāo)定、相機(jī)標(biāo)定、激光/視覺(jué)SLAM、自動(dòng)駕駛等)、知識(shí)點(diǎn)匯總、入門進(jìn)階學(xué)習(xí)路線、最新paper分享、疑問(wèn)解答五個(gè)方面進(jìn)行深耕,更有各類大廠的算法工程人員進(jìn)行技術(shù)指導(dǎo)。與此同時(shí),星球?qū)⒙?lián)合知名企業(yè)發(fā)布3D視覺(jué)相關(guān)算法開(kāi)發(fā)崗位以及項(xiàng)目對(duì)接信息,打造成集技術(shù)與就業(yè)為一體的鐵桿粉絲聚集區(qū),近4000星球成員為創(chuàng)造更好的AI世界共同進(jìn)步,知識(shí)星球入口:
學(xué)習(xí)3D視覺(jué)核心技術(shù),掃描查看介紹,3天內(nèi)無(wú)條件退款
?圈里有高質(zhì)量教程資料、可答疑解惑、助你高效解決問(wèn)題
覺(jué)得有用,麻煩給個(gè)贊和在看~??
總結(jié)
以上是生活随笔為你收集整理的手机中的计算摄影-超广角畸变校正的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java生成统计图_java生成各种统计
- 下一篇: 如何做一个优秀的管理者