鱼眼镜头图像畸变矫正(fish eye distortion)

来源:互联网 发布:正规贵金属行情软件 编辑:程序博客网 时间:2024/06/08 13:32
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*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


效果如下:

原图
这里写图片描述


矫正后
这里写图片描述

原理参考:Fisheye lens Wikis

源代码地址(oschina.net):fish eye distortion.py

0 0
原创粉丝点击