目录
1.1鱼眼镜头
1.2成像投影模型
1.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 Imageimport mathdef 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*thetalens = radius*2/math.pi;for i in range(width_in):for j in range(height_in):#offset to centerx = 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
代码来源:/smallflyingpig/article/details/56687436
仅作学习,详情请参考《计算摄影学基础》