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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

鱼眼参数的数值计算优化方法

發(fā)布時(shí)間:2023/12/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 鱼眼参数的数值计算优化方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? 在下面兩篇文章中,我們大概介紹了開(kāi)源圖像處理軟件 Hugin 中魚眼圖像的矯正方法,即如何將目標(biāo)全景圖上的坐標(biāo)映射到魚眼圖像上,從而獲取相應(yīng)的像素信息。

  • https://blog.csdn.net/qq_33552519/article/details/107362517
  • https://blog.csdn.net/qq_33552519/article/details/121039023
  • 對(duì)于以上前面兩篇文章,我們忽略了一個(gè)問(wèn)題,即以上矯正所用到的參數(shù)大部分都是不準(zhǔn)確或者未知的,這樣會(huì)導(dǎo)致不同的魚眼圖像經(jīng)過(guò)矯正后不能很好地拼接在一起,最直接的后果是在拼接縫處出現(xiàn)斷層,從而使得全景圖像的畫面不連續(xù),影響觀感。因此我們需要對(duì)一些參數(shù)進(jìn)行優(yōu)化。這里主要還是參考 Hugin 中的方法,一種基于數(shù)值計(jì)算迭代優(yōu)化的方法。

    圖1 魚眼圖像矯正流程

    ? ? ? ? 首先,我們對(duì)魚眼矯正的流程做個(gè)總結(jié),如圖 1 所示。那么,我們可優(yōu)化的一些參數(shù)如表 1 所示。一般來(lái)說(shuō),為了覆蓋整張全景圖像即達(dá)到 360°×180°360 \degree \times 180 \degree360°×180° 的視場(chǎng),需要至少兩張魚眼圖像,例如典型的用兩個(gè)視場(chǎng)大于 180°180 \degree180° 的魚眼鏡頭分別在偏航為 0°0 \degree0°180°180 \degree180° 的進(jìn)行拍攝,這樣就可以保證覆蓋整張全景圖,同時(shí)保留一定的重疊區(qū)域以方便參數(shù)的優(yōu)化以及保證圖像融合的效果。當(dāng)然使用更多的魚眼鏡頭可以使得畫面更加精細(xì),畢竟魚眼鏡頭越遠(yuǎn)離光軸的景象越被壓縮,而且重疊區(qū)面積增大也可以提供更多的控制點(diǎn)對(duì),提升參數(shù)優(yōu)化和圖像融合的質(zhì)量,但也會(huì)帶來(lái)成本增加,機(jī)械設(shè)備誤差或者故障發(fā)生的風(fēng)險(xiǎn)增大的問(wèn)題。另外,增加一個(gè)相機(jī)意味著增加一組參數(shù),那么參數(shù)優(yōu)化的復(fù)雜度也會(huì)相應(yīng)提升。

    表1 可優(yōu)化參數(shù)列表 參數(shù)類型參數(shù)列表備注
    鏡頭參數(shù)鏡頭有效視場(chǎng)FOVField of View,圓形
    鏡頭徑向畸變參數(shù)a, b, c徑向畸變矯正參數(shù)
    傳感器傾斜參數(shù)tilt, slant, rotate較少使用
    傳感器中心偏移offset_x, offset_y
    剪切效應(yīng)參數(shù)shear_x, shear_y較少使用
    方位參數(shù)鏡頭姿態(tài)yaw, pitch, roll偏航,俯仰,旋轉(zhuǎn)
    光心偏移X, Y, Z詳見(jiàn)文章 2
    平面偏航、俯仰plane_y, plane_p詳見(jiàn)文章 2

    ? ? ? ? 在系統(tǒng)參數(shù)優(yōu)化問(wèn)題中,參數(shù)的數(shù)量越多,所需要的約束條件就越多,同時(shí)優(yōu)化問(wèn)題收斂的條件就越苛刻。為了減少需要優(yōu)化的參數(shù)的數(shù)量,通常假設(shè)這些相機(jī)的固有鏡頭參數(shù)是相同的,即包括視場(chǎng)、徑向畸變參數(shù)、傳感器傾斜和中心偏移等這些外部一般不能改變的參數(shù),因此只需要優(yōu)化一組鏡頭參數(shù)。另外,通常也會(huì)選定一個(gè)相機(jī)作為全景圖像的基準(zhǔn),稱為主相機(jī),這樣就可以減少一組需要優(yōu)化的方位參數(shù),其他的相機(jī)則可以主相機(jī)為基準(zhǔn)進(jìn)行優(yōu)化。注意,這里是參數(shù)優(yōu)化,而不是純粹的參數(shù)從無(wú)到有的求解,所以每個(gè)相機(jī)都應(yīng)該首先提供一個(gè)合理的參數(shù)初始值,否則會(huì)大大地提升參數(shù)優(yōu)化的難度,導(dǎo)致無(wú)法收斂。

    ? ? ? ? 為了進(jìn)行參數(shù)優(yōu)化,我們首先得確定一個(gè)優(yōu)化的目標(biāo)。我們知道,物理空間的一個(gè)點(diǎn)以不同的方位參數(shù)拍攝會(huì)落在不同的魚眼圖像的不同位置,把這些對(duì)應(yīng)著物理空間同一個(gè)點(diǎn)的不同位置稱為控制點(diǎn),一般來(lái)說(shuō)以兩個(gè)作為一對(duì)。因?yàn)槟繕?biāo)全景圖像只有一張,那么該物理空間點(diǎn)可以通過(guò)球面透視表示為唯一的球面坐標(biāo)。因此,利用這些魚眼圖像各自的參數(shù)將控制點(diǎn)對(duì)根據(jù)圖 1 從下至上的過(guò)程逆推回全景圖像對(duì)應(yīng)的球面時(shí),理論上這些坐標(biāo)應(yīng)該是重合的。所以,我們的目標(biāo)就是在不同的魚眼圖像上找出一系列的控制點(diǎn)對(duì),然后優(yōu)化出最佳的參數(shù),使得這些控制點(diǎn)對(duì)逆映射到球面上時(shí),彼此之間的距離最小。

    ? ? ? ? 假設(shè)圖 1 從下至上的逆映射過(guò)程可定義為一個(gè)非線性函數(shù),即

    xp=g(xf;θf(wàn)),xf∈R2,xp∈R3,∥xp∥=1.(1){{\mathbf{x}}_p} = {\mathbf{g}}\left( {{{\mathbf{x}}_f};{{\mathbf{\theta }}_f}} \right),{\text{ }}{{\mathbf{x}}_f} \in {\mathbb{R}^2},{\text{ }}{{\mathbf{x}}_p} \in {\mathbb{R}^3},{\text{ }}\left\| {{{\mathbf{x}}_p}} \right\| = 1.\tag{1}xp?=g(xf?;θf?),?xf?R2,?xp?R3,?xp?=1.(1)

    其中 xf{\mathbf{x}}_fxf? 代表魚眼圖像上的坐標(biāo),xp{\mathbf{x}}_pxp? 代表全景圖像對(duì)應(yīng)的球面坐標(biāo),θf(wàn){\mathbf{\theta}}_fθf? 代表表 1 中的參數(shù),不同魚眼圖像對(duì)應(yīng)著不同的參數(shù)。我們假設(shè)這個(gè)函數(shù)是連續(xù)可導(dǎo)的。雖然在開(kāi)頭兩篇文章的分析中,我們主要討論了圖 1 從上至下的推導(dǎo)過(guò)程,但我們也能很容易推導(dǎo)出其逆向映射過(guò)程,除了鏡頭徑向畸變校正這一步。因?yàn)槲覀儾捎玫幕冃UP椭?#xff0c;實(shí)際落點(diǎn)距離 rrr 是關(guān)于入射角 θ\thetaθ 的多項(xiàng)式函數(shù),那么在逆映射的過(guò)程中,我們需要從實(shí)際落點(diǎn)距離 rrr 逆推回入射角 θ\thetaθ,即使用校正模型的反函數(shù)。然而,該反函數(shù)我們很難推導(dǎo),因此可以采用數(shù)值近似的方法,一種常用的方法是牛頓迭代法,這里不細(xì)說(shuō)。

    ? ? ? ? 如果我們有一對(duì)控制點(diǎn) (xf1,xf2)({\mathbf{x}}_{f1}, {\mathbf{x}}_{f2})(xf1?,xf2?),可以得到它們的球面坐標(biāo)對(duì) (xp1,xp2)({\mathbf{x}}_{p1}, {\mathbf{x}}_{p2})(xp1?,xp2?),那么定義這一對(duì)控制點(diǎn)的代價(jià)函數(shù)為

    l(x;θ)=ψ(xp1,xp2),x=[xf1T,xf2T]T,θ=[θf(wàn)1T,θf(wàn)2T]T.(2)l\left( {{\bf{x}};{\bf{\theta }}} \right) = \psi \left( {{{\bf{x}}_{p1}},{\rm{ }}{{\bf{x}}_{p2}}} \right),{\rm{ }} {\bf{x}} = {\left[ {{\bf{x}}_{f1}^T,{\rm{ }}{\bf{x}}_{f2}^T} \right]^T},{\bf{\theta }} = {\left[ {{\bf{\theta }}_{f1}^T, {\rm{ }}{\bf{\theta }}_{f2}^T} \right]^T}.\tag{2}l(x;θ)=ψ(xp1?,xp2?),x=[xf1T?,xf2T?]T,θ=[θf1T?,θf2T?]T.(2)

    圖2 球面距離示意圖

    其中 ψ{\psi}ψ 是兩點(diǎn)的距離函數(shù),可根據(jù)實(shí)際情況選擇。通常來(lái)說(shuō),因?yàn)檫@兩個(gè)點(diǎn)是在球面上的,因此一般使用球面距離,而不使用歐幾里德距離。如圖 2 所示,假如球面上有兩點(diǎn) A(φ1,θ1)A({\varphi}_1, {\theta}_1)A(φ1?,θ1?), B(φ2,θ2)B({\varphi}_2, {\theta}_2)B(φ2?,θ2?),其中 φ\(chéng)varphiφ, θ\thetaθ 分別是緯度和經(jīng)度。那么我們可定義其球面距離為 A, B 之間的大圓劣弧長(zhǎng)度,即

    ψ(a,b)=R?∠AOB=R?arccos?(aTb∥a∥∥b∥)=R?arcsin?(∥a×b∥∥a∥∥b∥).(3)\psi \left( {{\bf{a}},{\rm{ }}{\bf{b}}} \right) = R \cdot \angle AOB = R \cdot \arccos \left( {\frac{{{{\bf{a}}^T}{\bf{b}}}}{{\left\| {\bf{a}} \right\|\left\| {\bf{b}} \right\|}}} \right) = R \cdot \arcsin \left( {\frac{{\left\| {{\bf{a}} \times {\bf{b}}} \right\|}}{{\left\| {\bf{a}} \right\|\left\| {\bf{b}} \right\|}}} \right).\tag{3}ψ(a,b)=R?AOB=R?arccos(abaTb?)=R?arcsin(aba×b?).(3)

    那么,根據(jù)式(3)我們就得到了一條約束方程。另外,我們也可以分別計(jì)算 A, B 兩點(diǎn)的南北和東西方向距離,其中東西方向距離可定義為平均緯度上的小圓劣弧長(zhǎng)度,南北方向距離則可定義為緯度之間沿著經(jīng)線的弧線長(zhǎng)度,即

    ψφ(a,b)=R?(∣φ1?φ2∣),(4.1){\psi _\varphi }\left( {{\bf{a}},{\rm{ }}{\bf{b}}} \right) = R \cdot \left( {\left| {{\varphi _1} - {\varphi _2}} \right|} \right), \tag{4.1}ψφ?(a,b)=R?(φ1??φ2?),(4.1)

    ψθ(a,b)=R?cos?(φ1+φ2)?(∣θ1?θ2∣).(4.2){\psi _\theta }\left( {{\bf{a}},{\rm{ }}{\bf{b}}} \right) = R \cdot \cos \left( {{\varphi _1} + {\varphi _2}} \right) \cdot \left( {\left| {{\theta _1} - {\theta _2}} \right|} \right).\tag{4.2}ψθ?(a,b)=R?cos(φ1?+φ2?)?(θ1??θ2?).(4.2)

    這樣,我們實(shí)際上就得到了兩個(gè)約束方程。一般來(lái)說(shuō),在優(yōu)化過(guò)程中,我們不會(huì)同時(shí)使用式(3)和式(4)。

    ? ? ? ? 由此,我們可以定義參數(shù)優(yōu)化所用到的代價(jià)函數(shù)為

    F(Θ)=12∑i=1m(fi(Θ))2=12∥f(Θ)∥2,,(5.1)F\left( {\mathbf{\Theta }} \right) = \frac{1}{2}\sum\limits_{i = 1}^m {{{\left( {{f_i}\left( {\mathbf{\Theta }} \right)} \right)}^2}} = \frac{1}{2}{\left\| {{\mathbf{f}}\left( {\mathbf{\Theta }} \right)} \right\|^2},{\tag{5.1}}, F(Θ)=21?i=1m?(fi?(Θ))2=21?f(Θ)2,,(5.1)

    fi(Θ)=li(xi;θi),Θ=θ1∪θ2∪?∪θm∈Rn.(5.2){f_i}\left( {\mathbf{\Theta }} \right) = {l_i}\left( {{{\mathbf{x}}_i};{{\mathbf{\theta }}_i}} \right),{\text{ }}{\mathbf{\Theta }} = {{\mathbf{\theta }}_1} \cup {{\mathbf{\theta }}_2} \cup \cdots \cup {{\mathbf{\theta }}_m} \in {\mathbb{R}^n}. \tag{5.2}fi?(Θ)=li?(xi?;θi?),?Θ=θ1?θ2??θm?Rn.(5.2)

    其中 mmm 代表總共有 mmm 個(gè)約束方程,注意其不一定等于控制點(diǎn)的對(duì)數(shù),因?yàn)樵谑?#xff08;4)中一個(gè)控制點(diǎn)對(duì)可以定義兩個(gè)約束方程。nnn 代表總共有 nnn 個(gè)需要優(yōu)化的參數(shù),主要每個(gè)控制點(diǎn)對(duì)用到的魚眼圖像可能不同,所以其參數(shù)也就不一定相同,但也有一些公共的參數(shù),例如鏡頭參數(shù),因此這里使用了它們的并集。盡管在式(3)和(4)中我們使用的是球面距離,但在求所有控制點(diǎn)對(duì)的整體距離時(shí)還是使用了平方和,這相當(dāng)于把球面距離當(dāng)作一種樣本誤差,我們的目標(biāo)是要最小化整體的誤差平方和。對(duì)于 F(Θ)F\left( {\mathbf{\Theta }} \right)F(Θ) 來(lái)說(shuō)我們其實(shí)并不知道其真正的函數(shù)形式,但為了方便一般假設(shè)其是一個(gè)高度非線性的連續(xù)函數(shù),這時(shí)可將問(wèn)題形式化為

    Θ?=arg?min?Θ{F(Θ)}.(6){{\bf{\Theta }}^ * } = \arg {\min _{\bf{\Theta }}}\left\{ {F\left( {\bf{\Theta }} \right)} \right\}.\tag{6}Θ?=argΘmin?{F(Θ)}.(6)

    ? ? ? ? 由于 F(Θ)F\left( {\mathbf{\Theta }} \right)F(Θ) 為平方和形式,因此也將式(6)稱為最小二乘問(wèn)題,相關(guān)的優(yōu)化算法也有很多,比較常用的是 LM 算法,其原理可參考我的另一篇博客。注意,在 LM 算法優(yōu)化過(guò)程中需要用到 F(Θ)F\left( {\mathbf{\Theta }} \right)F(Θ) 的 Jacobian 矩陣,也就是各 fi(Θ){f_i}\left( {\mathbf{\Theta }} \right)fi?(Θ) 關(guān)于各個(gè)參數(shù)的一階偏導(dǎo)組成的矩陣,由于我們并不知道各 fi(Θ){f_i}\left( {\mathbf{\Theta }} \right)fi?(Θ) 的具體形式,因此可通過(guò)一些數(shù)值近似方法,例如比較簡(jiǎn)單的有限差分法,即給某一個(gè)參數(shù)增加非常小的步長(zhǎng) δ\deltaδ,其他的參數(shù)保持不變,求解出新的函數(shù)值,那么函數(shù)值的差值除以 δ\deltaδ 即為關(guān)于該參數(shù)的近似導(dǎo)數(shù),即

    f(x+δ)=f(x)+f′(x)δ+o(δ),(7.1)f(x + \delta ) = f(x) + f'(x)\delta + o(\delta) , \tag{7.1} f(x+δ)=f(x)+f(x)δ+o(δ),(7.1)

    f′(x)≈f(x+δ)?f(x)δ,δis??sufficient??samll.(7.2)f'(x) \approx \frac{{f(x + \delta ) - f(x)}}{\delta },{\rm{ }}\delta \text{{\rm{ is {\rm{ }}sufficient {\rm{ }}samll}}{\rm{.}}} \tag{7.2}f(x)δf(x+δ)?f(x)?,δ?is??sufficient??samll.(7.2)

    不過(guò)這種方法計(jì)算量比較大,而且 δ\deltaδ 應(yīng)該足夠小,否則不一定能滿足有限差分的收斂性條件。

    ? ? ? ? 在 LM 算法中,我們需要保證 F(Θ)F\left( {\mathbf{\Theta }} \right)F(Θ) 的 Jacobian 矩陣是列滿秩的,一般來(lái)說(shuō)也就要求約束方程要比需要優(yōu)化的參數(shù)多,所以我們應(yīng)該提供足夠多的質(zhì)量好的控制點(diǎn)對(duì)。PanoTools 全景工具庫(kù)中使用了兩種優(yōu)化策略,也就是式(3)和(4)的區(qū)別。式(3)中一個(gè)控制點(diǎn)對(duì)只能提供一個(gè)約束方程,由于約束性相對(duì)不那么強(qiáng),因此收斂速度會(huì)慢一些,但是穩(wěn)定性相對(duì)較好。而式(4)中一個(gè)控制點(diǎn)對(duì)提供了兩個(gè)約束方程,約束性要強(qiáng)一些,因此在初始參數(shù)設(shè)置較好時(shí)會(huì)有較快的收斂速度,但如果初始參數(shù)較差時(shí)穩(wěn)定性會(huì)差一些。因此 PanoTools 中也采用了混合的優(yōu)化策略,即前期使用式(3),只要每次迭代 F(Θ)F\left( {\mathbf{\Theta }} \right)F(Θ) 的下降比例都達(dá)到一定要求,否則切換到式(4)繼續(xù)優(yōu)化,這樣就可以提高收斂速度和穩(wěn)定性。

    總結(jié)

    以上是生活随笔為你收集整理的鱼眼参数的数值计算优化方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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