球型全景图像获取特定视角

原创文章,转载请联系博主并注明出处 https://blog.csdn.net/huohu9973/article/details/82012140
联系方式:yuhenglu@pku.edu.cn

问题定义:

输入:
    1、给定球型全景图像的展开图。
    2、给定输出图像的横向视场(field of view)以、横纵比及分辨率。
    3、给定当前正视视角,通过经纬度表示。
输出:
    当前给定视角、视场、横纵比下的图像。

主要流程

1、通过横向视场以、横纵比、分辨率计算纵向的视场大小以及球心到视平面的距离。
2、对于输出指定输出图像上的每个点,计算在球型全景模型下对应投影的球面经纬度坐标。
3、对于第二步计算出的经纬度坐标,求解全景展开图像中的图像坐标,并将展开图中的该点贴到输出图像中。

辅助图像

流程1示意图1

图1

流程1示意图2
图2

流程2示意图1
图3

流程2示意图2
图4

墨卡托投影示意图
图5

墨卡托投影动画
http://cdn.hujiulong.com/geohey/blog/mercator/play.html

相关计算

  • 根据横向视场、输出图像横纵比计算纵向视场
    如图1所示
    width/2D=tan(wfov2)(1) w i d t h / 2 D = t a n ( w f o v 2 ) ( 1 )

    height/2D=tan(hfov2)(2) h e i g h t / 2 D = t a n ( h f o v 2 ) ( 2 )

    由(1)、(2)可得
    tan(hfov2)=width/2D×heightwidth=heightwidth×tan(wfov2)(3) t a n ( h f o v 2 ) = w i d t h / 2 D × h e i g h t w i d t h = h e i g h t w i d t h × t a n ( w f o v 2 ) ( 3 )

    由(3)可得
    hfov=2×arctan(heightwidth×tan(wfov2)) h f o v = 2 × a r c t a n ( h e i g h t w i d t h × t a n ( w f o v 2 ) )
  • 根据横向视场、图像分辨率求球心到视平面的距离
    如图2所示
    width2=tan(wfov2)×D w i d t h 2 = t a n ( w f o v 2 ) × D

    D=width2×cot(wfov2) D = w i d t h 2 × c o t ( w f o v 2 )
  • 如图3所示,根据视场中心点B以及视平面某点D,求D的俯仰角 β β ′ 与偏转角 α α ′
    已知视场中心点B的俯仰角为 β β ,偏转角为 α α ,线段AB、BG、GD的长度为D, x, y。
    BH=AB×sin(β)(4) B H = A B × s i n ( β ) ( 4 )

    AH=AB×cos(β)(5) A H = A B × c o s ( β ) ( 5 )

    AH=AB×cos(β)(6) A H = A B × c o s ( β ) ( 6 )

    记B,D两点在竖直方向上的高度差为 Δh Δ h
    Δh=GD×cos(β)(7) Δ h = G D × c o s ( β ) ( 7 )

    HI=GD×sin(β)(8) H I = G D × s i n ( β ) ( 8 )

    DE=BHΔh(9) D E = B H − Δ h ( 9 )

    FE=AH+HI(10) F E = A H + H I ( 10 )

    IE=BG(11) I E = B G ( 11 )

    tan(β)=DEFE(12) t a n ( β ′ ) = D E F E ( 12 )

    tan(α)=IEFE(13) t a n ( α ′ ) = I E F E ( 13 )

    由(4)~(13)式可得
    β=arctan(BHΔhAH+HI)=arctan(AB×sin(β)GD×cos(β)AB×cos(β)GD×sin(β))=arctan(D×sin(β)y×cos(β)D×cos(β)y×sin(β)) β ′ = a r c t a n ( B H − Δ h A H + H I ) = a r c t a n ( A B × s i n ( β ) − G D × c o s ( β ) A B × c o s ( β ) − G D × s i n ( β ) ) = a r c t a n ( D × s i n ( β ) − y × c o s ( β ) D × c o s ( β ) − y × s i n ( β ) )

    α=arctan(IEAH+HI)=arctan(BGAB×cos(β)GD×sin(β))=arctan(xD×cos(β)y×sin(β)) α ′ = a r c t a n ( I E A H + H I ) = a r c t a n ( B G A B × c o s ( β ) − G D × s i n ( β ) ) = a r c t a n ( x D × c o s ( β ) − y × s i n ( β ) )
  • 根据俯仰角、偏转角求解球面全景图像中的经纬度
    如图4所示, β β 为点E的俯仰角, α α 为点E的偏转角,点B是点E所在纬线与xoz平面的交点, AOB ∠ A O B 即为要求的纬度, α α 即为要求的经度, θ=EOF θ = ∠ E O F ,EO=R,。BO = R
    EF=EO×sin(θ)(14) E F = E O × s i n ( θ ) ( 14 )

    FO=EO×cos(θ)(15) F O = E O × c o s ( θ ) ( 15 )

    DF=EF×cos(β)=OF×cot(α)(16) D F = E F × c o s ( β ) = O F × c o t ( α ) ( 16 )

    由(14)~(16)式可得
    θ=arctan(cot(α)×sec(β)) θ = a r c t a n ( c o t ( α ) × s e c ( β ) )

    ED=EF×sin(β)(17) E D = E F × s i n ( β ) ( 17 )

    ED=BA(18) E D = B A ( 18 )

    由(14)~(18)式可得
    AOB=arcsin(BAOB)=arcsin(EO×sin(θ)×sin(β)OB)=arcsin(sin(θ)×sin(β))=arcsin(sin(arctan(cot(α)×sec(β)))×sin(β)) ∠ A O B = a r c s i n ( B A O B ) = a r c s i n ( E O × s i n ( θ ) × s i n ( β ) O B ) = a r c s i n ( s i n ( θ ) × s i n ( β ) ) = a r c s i n ( s i n ( a r c t a n ( c o t ( α ) × s e c ( β ) ) ) × s i n ( β ) )
  • 根据俯经纬度求展开的平面坐标
    根据墨卡托投影展开
    y=longitude180×width2+width2 y = l o n g i t u d e 180 × w i d t h 2 + w i d t h 2

    x=sign(latitude)×ln(tan(|latitude|)+sec(|latitude|))×height2+height2 x = s i g n ( l a t i t u d e ) × l n ( t a n ( | l a t i t u d e | ) + s e c ( | l a t i t u d e | ) ) × h e i g h t 2 + h e i g h t 2

    根据经纬度比例展开
    y=longitude180×width2+width2 y = l o n g i t u d e 180 × w i d t h 2 + w i d t h 2

    x=latitude90×height2+height2 x = l a t i t u d e 90 × h e i g h t 2 + h e i g h t 2

实验结果

全景展开图像
这里写图片描述
俯角=0,偏转角=0,w_fov = 100, heightwidth=0.75 h e i g h t w i d t h = 0.75 , 输出分辨率=[1024,768]
这里写图片描述
俯角=0,偏转角=90,w_fov = 100, heightwidth=0.75 h e i g h t w i d t h = 0.75 , 输出分辨率=[1024,768]
这里写图片描述
俯角=0,偏转角=-90,w_fov = 100, heightwidth=0.75 h e i g h t w i d t h = 0.75 , 输出分辨率=[1024,768]
这里写图片描述
俯角=0,偏转角=180,w_fov = 100, heightwidth=0.75 h e i g h t w i d t h = 0.75 , 输出分辨率=[1024,768]
这里写图片描述
俯角=20,偏转角=0,w_fov = 100, heightwidth=0.75 h e i g h t w i d t h = 0.75 , 输出分辨率=[1024,768]
这里写图片描述
俯角=-20,偏转角=0,w_fov = 100, heightwidth=0.75 h e i g h t w i d t h = 0.75 , 输出分辨率=[1024,768]
这里写图片描述
俯角=-90,偏转角=0,w_fov = 100, heightwidth=0.75 h e i g h t w i d t h = 0.75 , 输出分辨率=[1024,768]
这里写图片描述

reference
[1] 一个小游戏让你彻底弄懂墨卡托投影,https://blog.csdn.net/chelen_jak/article/details/80415642
[2] 墨卡托投影,https://blog.csdn.net/mygisforum/article/details/13295223

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值