全景成像技术(3)—鱼眼全景成像

   
        鱼眼全景成像是利用超广角镜头来实现全 成像的 种成像技术,这里的超广角镜头 通常指的就是鱼眼镜头。

1.1鱼眼镜头

        鱼眼镜头其实是一种焦距极短并且视角接近或等于 180度 的超广角镜头,之所以称为 "鱼眼镜头",是因为它的镜片结构与真实鱼眼的结构颇为相似。

         鱼眼镜头具有相当长的景深,有利于表现图像的长景深效果。鱼眼镜头有两种,一种像其他镜头一样,成像充满画面,另一种成像为圆形。

 1.2成像投影模型

        普通的光学镜头都遵守"相似"成像准则,即像与物总是相似的,理想的像高公式为:
        式中为光学镜头的焦距 ;w 为物方 半视场角 对于鱼眼成像而言,其目的就是要将半球空间中的景物成像在有限的像面上,即 趋近于 90 度 ,此时 将趋近于无穷大, 即对于接近半球面的物面,像面将变得无穷 ,这 是不可能实现的 ,而且 将半球面成 像为平面本身也违反了"相似"成像准则
        为了实现鱼眼成像,即将半球物面成像在有限像面上, 需要选择适当的理想成像公 式来满足鱼眼镜头的成像要求, 一般有如下 几种投 影公式可以将半球视场或大于半球视 场的 空域投影在有限的像面上。
目前,市场上的大部分鱼眼镜头采 用的是式 等距投影模型:

图8.23

 1.3鱼眼图像的矫正方法

在讨论鱼眼图像的校正方法之前,先证明理想鱼眼镜头的一个性质。如图8  -24 示,在照相机坐标系 中,以视点为球心,以照相机焦距/为球半径的球面上有 个点P(x,y,z),点P在xz平面上的投影点,为Q(u,0,w),设

 

 

 代码:

from PIL import Image
import math

def fish_eye_dis(img):
    "fish eye distortion"
    width_in, height_in = img.size;
    im_out = Image.new("RGB",(width_in,height_in));
    radius = max(width_in, height_in)/2;
    #assume the fov is 180
    #R = f*theta
    lens = radius*2/math.pi;
    for i in range(width_in):
        for j in range(height_in):
            #offset to center
            x = i - width_in/2;
            y = j - height_in/2;
            r = math.sqrt(x*x + y*y);
            theta = math.atan(r/radius);
            if theta<0.00001:
                k = 1;
            else:
                k = lens*theta/r;

            src_x = x*k;
            src_y = y*k;
            src_x = src_x+width_in/2;
            src_y = src_y+height_in/2;
            pixel = im.getpixel((src_x,src_y));
            im_out.putpixel((i,j),pixel);

    return im_out;




if __name__=="__main__":
    input_name = "image0.jpg";
    output_name = "image_dis.jpg";
    im = Image.open(input_name);
    img_out = fish_eye_dis(im);
    img_out.save(output_name);

    print "fish eye distortion completely, save image to %s" % output_name

代码来源:https://blog.csdn.net/smallflyingpig/article/details/56687436

仅作学习,详情请参考《计算摄影学基础》

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月蹉跎的一杯酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值