Page 4 of 4
Rendue de déformation géométrique
#!/usr/bin/python3
import numpy as np
import pickle as pkl
from matplotlib.pyplot import *
import seaborn as sns
sns.set_style("white")
size = (1280//2, 960//2, 50)
[x, y] = np.meshgrid(
np.arange(-size[0],size[0],size[2]),
np.arange(-size[1],size[1],size[2]),
)
def plotCorrection(dx, dy, f, name):
figure(figsize=(7,4))
scale = np.sqrt(dx**2+dy**2)*133
title(name.split('-')[-1])
#title('scale = ' + str(scale))
quiver(
x+size[0], y+size[1],
dx, dy, scale,
angles='xy',
scale_units='inches',
width=0.002,
minshaft=0.5
);
tight_layout()
import tikzplotlib
tikzplotlib.save('lens/'+name+'.tex')
savefig('lens/'+name+'.jpg')
def radialDistortion(k1, k2, k3):
r2 = x**2 + y**2;
k = k1*r2 + k2*r2**2 + k3*r2**3;
dx = x*k
dy = y*k
return dx, dy
def tangentialDistortion (p1, p2):
r2 = x**2 + y**2;
dx = 2*p1*x*y + (r2 + 2*x**2)*p2
dy = 2*p2*x*y + (r2 + 2*y**2)*p1
return dx, dy
def prismDistortion (s1, s2, s3, s4):
r2 = x**2 + y**2;
dx = s1*r2 + s2*r2**2
dy = s3*r2 + s4*r2**2
return dx, dy
def lensCorrection(k1, k2, k3, p1, p2, s1, s2, s3, s4):
r2 = x**2 + y**2;
k = k1*r2 + k2*r2**2 + k3*r2**3;
dx = x*k + 2*p1*x*y + p2*(r2 + 2*x**2) + s1*r2 + s2*r2**2
dy = y*k + 2*p2*x*y + p1*(r2 + 2*y**2) + s3*r2 + s4*r2**2
return dx, dy
#k1,k2,k3,p1,p2,k4,k5,k6,s1,s2,s3,s4 = np.load('lens.npy')[0]
X = pkl.load(open('config.pkl', 'rb'))
k1,k2,k3,p1,p2,k4,k5,k6,s1,s2,s3,s4 = X['len_dist_450'][0]
print('radial', k1, k2, k3)
print('prism', s1, s2, s3, s4)
print('tangential', p1, p2)
print('optional', k4,k5,k6)
rdx, rdy = radialDistortion(k1,k2,k3)
pdx, pdy = prismDistortion(s1,s2,s3,s4)
tdx, tdy = tangentialDistortion(p1,p2)
dx, dy = lensCorrection(k1,k2,k3,p1,p2,s1,s2,s3,s4)
#dx, dy = rdx+tdx+pdx, rdy+tdy+tdx
scale = 5
plotCorrection(rdx, rdy, scale, 'lens-correction-radial')
plotCorrection(tdx, tdy, scale, 'lens-correction-tangential')
plotCorrection(pdx, pdy, scale, 'lens-correction-prismatic')
plotCorrection( dx, dy, scale, 'lens-correction-complet')