(Projit generated the 3D point cloud and computed the 2D-3D correspondences and Abhinav generated the disparity map for the stereo pairs)
Our objective generate a 3D point cloud reconstruction of a scene from pairs of stero images. The data includes a set of stereo image pairs, from which we calculate the disparity and generate the point cloud from the disparity map.
As usual, we first load the libraries we would require
import cv2
import numpy as np
import matplotlib.pyplot as plt
import open3d as o3d
import os
A function to generate the .ply file, so that the point cloud can be visualized.
def create_output(vertices, colors, filename): # taken from github
colors = colors.reshape(-1,3)
vertices = np.hstack([vertices.reshape(-1,3),colors])
ply_header = '''ply
format ascii 1.0
element vertex %(vert_num)d
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
'''
with open(filename, 'w') as f:
f.write(ply_header %dict(vert_num=len(vertices)))
np.savetxt(f,vertices,'%f %f %f %d %d %d')
We have been given stereo pairs, the K matrix, the baseline and the ground truth poses, which we load into our program.
We construct our 3D point cloud from only one stereo pair, although we can use more by altering the start and end variables. Adjust start and end to change number of pictures and which pictures to select. Ensure start < end.
lst = os.listdir('./data/img2')
start = 0
end = 1
imgs = sorted(lst)[start:end]
print(imgs)
['0000000460.png']
pose = np.array([
np.array([[-9.098548e-01,5.445376e-02,-4.113381e-01,-1.872835e+02],[4.117828e-02,9.983072e-01,4.107410e-02,1.870218e+00],[4.128785e-01,2.043327e-02,-9.105569e-01,5.417085e+01]]),
np.array([[-9.283201e-01,4.509830e-02,-3.690366e-01,-1.874227e+02],[3.357747e-02,9.987291e-01,3.758534e-02,1.883289e+00],[3.702626e-01,2.249990e-02,-9.286546e-01,5.369416e+01]]),
np.array([[-9.452512e-01,3.706129e-02,-3.242324e-01,-1.875256e+02],[2.776133e-02,9.990610e-01,3.326342e-02,1.887417e+00],[3.251607e-01,2.244117e-02,-9.453925e-01,5.321309e+01]]),
np.array([[-9.602059e-01,3.410654e-02,-2.772028e-01,-1.876307e+02],[2.674480e-02,9.991831e-01,3.029615e-02,1.893359e+00],[2.780097e-01,2.167680e-02,-9.603337e-01,5.273710e+01]]),
np.array([[-9.729422e-01,3.276894e-02,-2.287129e-01,-1.876915e+02],[2.667847e-02,9.992036e-01,2.967147e-02,1.900316e+00],[2.295031e-01,2.276691e-02,-9.730416e-01,5.225276e+01]]),
np.array([[-9.831529e-01,3.240420e-02,-1.798899e-01,-1.877485e+02],[2.738709e-02,9.991654e-01,3.030454e-02,1.901338e+00],[1.807218e-01,2.486734e-02,-9.832198e-01,5.177232e+01]]),
np.array([[-9.911510e-01,2.523874e-02,-1.303180e-01,-1.877723e+02],[2.111370e-02,9.992343e-01,3.293915e-02,1.900778e+00],[1.310496e-01,2.989617e-02,-9.909249e-01,5.129098e+01]]),
np.array([[-9.966637e-01,1.446740e-02,-8.032513e-02,-1.877414e+02],[1.146235e-02,9.992216e-01,3.774707e-02,1.901606e+00],[8.080871e-02,3.670042e-02,-9.960537e-01,5.080341e+01]]),
np.array([[-9.995040e-01,1.006074e-02,-2.984320e-02,-1.877165e+02],[8.815319e-03,9.990965e-01,4.157437e-02,1.903912e+00],[3.023451e-02,4.129067e-02,-9.986896e-01,5.033042e+01]]),
np.array([[-9.996705e-01,1.307490e-02,2.209183e-02,-1.876828e+02],[1.395603e-02,9.990937e-01,4.021250e-02,1.909578e+00],[-2.154603e-02,4.050756e-02,-9.989469e-01,4.986716e+01]]),
np.array([[-9.970705e-01,2.051987e-02,7.368440e-02,-1.876045e+02],[2.335961e-02,9.990090e-01,3.788635e-02,1.913879e+00],[-7.283396e-02,3.949659e-02,-9.965617e-01,4.940375e+01]]),
np.array([[-9.919546e-01,2.316199e-02,1.244574e-01,-1.875198e+02],[2.767742e-02,9.990153e-01,3.467489e-02,1.916071e+00],[-1.235318e-01,3.784057e-02,-9.916189e-01,4.895472e+01]]),
np.array([[-9.843986e-01,2.362611e-02,1.743596e-01,-1.873856e+02],[2.975169e-02,9.990255e-01,3.260177e-02,1.916040e+00],[-1.734194e-01,3.728062e-02,-9.841422e-01,4.850872e+01]]),
np.array([[-9.745046e-01,2.207656e-02,2.232787e-01,-1.872454e+02],[2.939030e-02,9.991330e-01,2.948581e-02,1.919502e+00],[-2.224342e-01,3.529628e-02,-9.743086e-01,4.808322e+01]]),
np.array([[-9.620042e-01,2.331542e-02,2.720374e-01,-1.870919e+02],[3.162970e-02,9.991557e-01,2.621754e-02,1.921924e+00],[-2.711965e-01,3.382584e-02,-9.619295e-01,4.766758e+01]]),
np.array([[-9.466844e-01,2.747540e-02,3.209888e-01,-1.869050e+02],[3.735473e-02,9.989978e-01,2.465901e-02,1.925132e+00],[-3.199896e-01,3.533474e-02,-9.467619e-01,4.724980e+01]]),
np.array([[-9.303521e-01,3.021656e-02,3.654203e-01,-1.867142e+02],[4.116827e-02,9.989052e-01,2.221412e-02,1.922721e+00],[-3.643491e-01,3.571067e-02,-9.305775e-01,4.684089e+01]]),
np.array([[-9.132370e-01,2.475193e-02,4.066762e-01,-1.864782e+02],[3.739334e-02,9.990320e-01,2.316585e-02,1.917552e+00],[-4.057092e-01,3.636289e-02,-9.132786e-01,4.643056e+01]]),
np.array([[-8.953418e-01,1.994046e-02,4.449332e-01,-1.862433e+02],[3.564541e-02,9.990008e-01,2.695748e-02,1.910636e+00],[-4.439511e-01,3.999598e-02,-8.951580e-01,4.602498e+01]]),
np.array([[-8.776813e-01,1.983338e-02,4.788341e-01,-1.859999e+02],[3.901401e-02,9.987839e-01,3.014110e-02,1.906858e+00],[-4.776541e-01,4.513551e-02,-8.773878e-01,4.562057e+01]]),
np.array([[-8.608718e-01,2.164481e-02,5.083614e-01,-1.857437e+02],[4.407236e-02,9.985119e-01,3.211896e-02,1.904895e+00],[-5.069097e-01,5.005498e-02,-8.605447e-01,4.521752e+01]])
])
len(pose)
21
def make_new_pt(pt_3d, C):
''' Funtion to convert 3d world points by the pose.
'''
P = np.array([
[C[0][0], C[0][1], C[0][2], C[0][3]],
[C[1][0], C[1][1], C[1][2], C[1][3]],
[C[2][0], C[2][1], C[2][2], C[2][3]],
])
pt = np.mat([pt_3d[0], pt_3d[1], pt_3d[2], 1]).T
mat = np.matmul(P, pt)
return mat
combination = []
A0 = np.vstack([pose[0], np.array([0, 0, 0, 1])])
combination.append(A0)
for c in range(1, len(pose)):
A = np.vstack([pose[c], np.array([0, 0, 0, 1])])
combination.append(A)
final_output = []
final_color = []
output_colors = []
output_points = []
Height = 0
Width = 0
disparity_map = 0
Pixel_Point_Map = {}
Pixel_Point_Map_alt = {}
Pixel_Point_Map_2 = {}
def main():
global final_output, final_color, output_colors, output_points, disparity_map
focal_length = 7.070912e+02
k = np.float32([[7.070912e+02, 0.000000e+00, 6.018873e+02],
[0.000000e+00, 7.070912e+02, 1.831104e+02],
[0.000000e+00, 0.000000e+00, 1.000000e+00]])
baseline = 0.53790448812
for count, img in enumerate(imgs):
print('./img2/' + img, './img3/' + img)
iml = cv2.imread('./data/img2/' + img)
imr = cv2.imread('./data/img3/' + img)
window_size = 3
min_disp = 16
num_disp = 112-min_disp
stereo = cv2.StereoSGBM_create(minDisparity = min_disp,
numDisparities = num_disp+(2) * 16,
blockSize = 7,
P1 = 8*3*window_size**2,
P2 = 32*3*window_size**2,
disp12MaxDiff = 1,
uniquenessRatio = 12,
speckleWindowSize = 400,
speckleRange = 5
)
disparity_map = stereo.compute(iml, imr).astype(np.float32) / 16.0
h, w = iml.shape[:2]
Height = h
Width = w
# Formation of Q matrix to reproject back into 3d
Q = np.float32([[1, 0, 0, -0.5*w],
[0,-1, 0, 0.5*h],
[0, 0, 0, -focal_length],
[0, 0, -1/baseline, 0]])
# cv2 way of finding 3d points, overwritten by next part.
points = cv2.reprojectImageTo3D(disparity_map, Q)
colors = cv2.cvtColor(iml, cv2.COLOR_BGR2RGB)
# Hand coding reprojectImageto3D....results weren't as good as cv2 functions
# Overwriting colors and points in this process with own implementation
Pixel_Point_Map[count+start] = []
Pixel_Point_Map_alt[count+start] = []
Pixel_Point_Map_2[count+start] = []
for i in range(len(iml)):
for j in range(len(iml[i])):
colors[i][j] = iml[i][j]
# Following the equation: Q x [i j disp[i][j] 1].T = [X Y Z] to recover 3d points
pt_temp = Q @ np.array([i, j, disparity_map[i][j]/16.0, 1]).T
W = pt_temp[3]
to_ap = [pt_temp[0]/W, pt_temp[1]/W, pt_temp[2]/W]
points[i][j] = to_ap
Pixel_Point_Map[count+start].append(([i, j], to_ap))
# Duplicated code(from below), but useful in collecting pixel to world coordinate correspondences for 2nd part.
if disparity_map[i][j] > disparity_map.min():
Pixel_Point_Map_alt[count+start].append(([i, j], to_ap))
# This step takes the above project 3d, and transforms them according to the ground truth poses.
pt_new_temp = np.array(make_new_pt(to_ap, combination[count+start]).T).astype('float32')[0]
pt_add = [pt_new_temp[0], pt_new_temp[1], pt_new_temp[2]]
Pixel_Point_Map_2[count+start].append(([i, j], pt_add))
print(points.shape)
print(colors.shape)
# Duplicated code from above
mask = disparity_map > disparity_map.min()
output_points = points[mask]
output_colors = colors[mask]
print(output_points.shape)
for i,pt in enumerate(output_points):
# Transforming 3d points by the ground truth poses.
final_output.append(np.array(make_new_pt(pt, combination[count+start]).T).astype('float32')[0])
final_color.append(output_colors[i])
print("Length of output Points:", len(output_points), "count:", count)
final_output = np.array(final_output)
final_color = np.array(final_color)
print(final_output.shape, final_color.shape)
# Constructing .ply file to be viewed by meshlab or o3d.
create_output(final_output, final_color, 'jnrecon_mult.ply')
main()
./img2/0000000460.png ./img3/0000000460.png (370, 1226, 3) (370, 1226, 3) (294374, 3) Length of output Points: 294374 count: 0 (294374, 3) (294374, 3)
# Original
# Pixel_Point_Map
# Alternative, filtering for wrong disparity values
# Pixel_Point_Map_alt
# Last thing to try, filtering for wrong disparity and transformed by ground truth matrix
# Pixel_Point_Map_2
# Dictionary where keys correspond to which image pair we're taking
# value is a list of tuples.
# Each tuple first element is a list [x, y] of the pixel coordinates
# Second element is a list [X, Y, Z] of the 3d world coordinates
# Form of the Dictionary:
# {0: [([x_p1, y_p1], [X_w1, Y_w1, Z_w1]), ([x_p2, y_p2], [X_w2, Y_w2, Z_w2]), ...]
# 1: []...}
{0: [([0, 199], [267.12745031601105, 6.1007900561568595, 308.12963425273875]), ([0, 200], [268.82889904413855, 6.578194919513994, 310.09224338810657]), ([0, 201], [271.42210385806914, 7.084426854370483, 313.08348689345803]), ([0, 202], [275.8571055550964, 7.650197054545903, 318.19923014335114]), ([0, 212], [329.7354464838262, 14.523420970739489, 380.34751728072445]), ([0, 213], [329.7354464838262, 15.061325451137247, 380.34751728072445]), ([0, 214], [329.7354464838262, 15.599229931535007, 380.34751728072445]), ([0, 215], [329.7354464838262, 16.137134411932767, 380.34751728072445]), ([0, 216], [329.7354464838262, 16.675038892330523, 380.34751728072445]), ([0, 220], [306.95372472676183, 17.52590597950516, 354.0689615413289]), ([0, 221], [297.22631795725175, 17.455379194879384, 342.84846628121636]), ([0, 222], [294.1194226475941, 17.752722084765058, 339.2646844037124]), ([0, 223], [293.0981746522899, 18.169218004546522, 338.0866820273106]), ([0, 224], [289.0831311639024, 18.391912096887754, 333.45535761597756]), ([0, 225], [286.1433027113881, 18.671667387366274, 330.06428618259474]), ([0, 226], [279.5108420525149, 18.69485240481747, 322.4137894829982]), ([0, 227], [278.5883640259389, 19.087620373718494, 321.34971757051306]), ([0, 228], [277.67195493374834, 19.47780434282411, 320.29264613113634]), ([0, 229], [276.7615550815066, 19.865429728525758, 319.2425063077556]), ([0, 230], [276.7615550815066, 20.316916767810433, 319.2425063077556]), ([0, 231], [278.5883640259389, 20.9054889807393, 321.34971757051306]), ([0, 232], [283.26266543577015, 21.7183446582075, 326.7414913552532]), ([0, 233], [287.1165792512228, 22.4822117521349, 331.1869538226716]), ([0, 234], [286.1433027113881, 22.872792549523684, 330.06428618259474]), ([0, 235], [285.1766023643902, 23.26073428747065, 328.9492041346806]), ([0, 236], [285.1766023643902, 23.725948973220067, 328.9492041346806]), ([0, 237], [284.2164117840387, 24.109711929478, 327.841631056786]), ([0, 238], [283.26266543577015, 24.490899295425475, 326.7414913552532]), ([0, 239], [281.37424766619836, 24.786638456728728, 324.5632147462182]), ([0, 240], [281.37424766619836, 25.24565028000148, 324.5632147462182]), ([0, 241], [280.43944950119436, 25.619264554758374, 323.48493164074904]), ([0, 242], [280.43944950119436, 26.076751421807632, 323.48493164074904]), ([0, 243], [280.43944950119436, 26.534238288856887, 323.48493164074904]), ([0, 244], [275.8571055550964, 26.550683895188723, 318.19923014335114]), ([0, 245], [272.2976590318048, 26.65229941583734, 314.0934336253724]), ([0, 246], [272.2976590318048, 27.096504406101296, 314.0934336253724]), ([0, 247], [273.1788812293188, 27.629837905738604, 315.109917229338]), ([0, 248], [273.1788812293188, 28.075480452605355, 315.109917229338]), ([0, 249], [273.1788812293188, 28.521122999472105, 315.109917229338]), ([0, 250], [275.8571055550964, 29.250753443851984, 318.19923014335114]), ([0, 256], [312.6380529624426, 36.21093272485061, 360.6257941624646]), ([0, 257], [310.33924374948344, 36.45093890695401, 357.97413391127003]), ([0, 258], [312.6380529624426, 37.230958998790065, 360.6257941624646]), ([0, 259], [314.9711727606698, 38.02262118154904, 363.3170314323338]), ([0, 260], [329.7354464838262, 40.342836029831915, 380.34751728072445]), ([0, 261], [329.7354464838262, 40.88074051022967, 380.34751728072445]), ([0, 262], [329.7354464838262, 41.41864499062743, 380.34751728072445]), ([0, 263], [329.7354464838262, 41.95654947102519, 380.34751728072445]), ([0, 264], [329.7354464838262, 42.49445395142295, 380.34751728072445]), ([0, 265], [329.7354464838262, 43.032358431820704, 380.34751728072445]), ([0, 266], [329.7354464838262, 43.57026291221847, 380.34751728072445]), ([0, 267], [329.7354464838262, 44.108167392616224, 380.34751728072445]), ([0, 268], [329.7354464838262, 44.64607187301399, 380.34751728072445]), ([0, 269], [329.7354464838262, 45.183976353411744, 380.34751728072445]), ([0, 270], [329.7354464838262, 45.7218808338095, 380.34751728072445]), ([0, 271], [329.7354464838262, 46.259785314207264, 380.34751728072445]), ([0, 272], [302.5529544797831, 42.939815725515714, 348.9927040281916]), ([0, 273], [300.3995526685392, 43.124242471176906, 346.508770191692]), ([0, 274], [302.5529544797831, 43.92693792610228, 348.9927040281916]), ([0, 275], [302.5529544797831, 44.42049902639557, 348.9927040281916]), ([0, 276], [305.84157355021557, 45.40225643241373, 352.78610298501974]), ([0, 277], [305.84157355021557, 45.90118232727542, 352.78610298501974]), ([0, 278], [306.95372472676183, 46.56883588839943, 354.0689615413289]), ([0, 279], [308.07399379510764, 47.24136283318127, 355.361184028706]), ([0, 280], [310.33924374948344, 48.09498883556432, 357.97413391127003]), ([0, 281], [310.33924374948344, 48.60125187593868, 357.97413391127003]), ([0, 282], [311.48440701055165, 49.28872345843966, 359.2950716747803]), ([0, 283], [311.48440701055165, 49.796854628114296, 359.2950716747803]), ([0, 284], [312.6380529624426, 50.49130056000296, 360.6257941624646]), ([0, 285], [311.48440701055165, 50.813116967463564, 359.2950716747803]), ([0, 286], [311.48440701055165, 51.3212481371382, 359.2950716747803]), ([0, 287], [310.33924374948344, 51.63883011818485, 357.97413391127003]), ([0, 288], [306.95372472676183, 51.57623759682947, 354.0689615413289]), ([0, 289], [299.3343060278706, 50.78428683017706, 345.2800156874662]), ([0, 290], [293.0981746522899, 50.204418170457494, 338.0866820273106]), ([0, 291], [289.0831311639024, 49.98827390436159, 333.45535761597756]), ([0, 292], [282.3152986617375, 49.27852684633916, 325.6487104477105]), ([0, 293], [278.5883640259389, 49.08245238956184, 321.34971757051306]), ([0, 294], [276.7615550815066, 49.212087282029714, 319.2425063077556]), ([0, 295], [274.0658256488945, 49.17983820779509, 316.13300137618654]), ([0, 296], [274.0658256488945, 49.626927646047776, 316.13300137618654]), ([0, 297], [272.2976590318048, 49.75095890956304, 314.0934336253724]), ([0, 298], [272.2976590318048, 50.195163899826994, 314.0934336253724]), ([0, 302], [273.1788812293188, 52.14017798340994, 315.109917229338]), ([0, 303], [265.4474034586777, 51.09754259074057, 306.19171202473416]), ([0, 304], [258.9333567480353, 50.26601868355008, 298.67780498118236]), ([0, 305], [258.14151162036546, 50.533411736450006, 297.7644171983653]), ([0, 306], [258.14151162036546, 50.95452350092042, 297.7644171983653]), ([0, 307], [258.14151162036546, 51.37563526539084, 297.7644171983653]), ([0, 308], [256.57226230960333, 51.481873187734436, 295.95429916068525]), ([0, 309], [255.79477060563485, 51.743150987110475, 295.0574679511074]), ([0, 310], [257.35449481664483, 52.47848589246428, 296.85659885324833]), ([0, 311], [257.35449481664483, 52.89831377960399, 296.85659885324833]), ([0, 312], [257.35449481664483, 53.318141666743706, 296.85659885324833]), ([0, 313], [251.22700684481993, 52.458494088314765, 289.7885845948377]), ([0, 314], [249.0037589966357, 52.400464780694946, 287.22408384621076]), ([0, 315], [246.8195154966652, 52.34345353110355, 284.7045743387879]), ([0, 316], [246.8195154966652, 52.746095481342806, 284.7045743387879]), ([0, 317], [329.7354464838262, 71.00339141250417, 380.34751728072445]), ([0, 318], [329.7354464838262, 71.54129589290193, 380.34751728072445]), ([0, 319], [329.7354464838262, 72.07920037329968, 380.34751728072445]), ([0, 320], [329.7354464838262, 72.61710485369744, 380.34751728072445]), ([0, 321], [329.7354464838262, 73.1550093340952, 380.34751728072445]), ([0, 322], [329.7354464838262, 73.69291381449297, 380.34751728072445]), ([0, 323], [329.7354464838262, 74.23081829489072, 380.34751728072445]), ([0, 324], [329.7354464838262, 74.76872277528848, 380.34751728072445]), ([0, 325], [329.7354464838262, 75.30662725568624, 380.34751728072445]), ([0, 326], [329.7354464838262, 75.844531736084, 380.34751728072445]), ([0, 327], [329.7354464838262, 76.38243621648175, 380.34751728072445]), ([0, 328], [329.7354464838262, 76.92034069687952, 380.34751728072445]), ([0, 353], [167.15301841556337, 45.81028889692438, 192.80983054230782]), ([0, 360], [278.5883640259389, 79.53175155716038, 321.34971757051306]), ([0, 361], [279.5108420525149, 80.25107373775306, 322.4137894829982]), ([0, 362], [278.5883640259389, 80.44068586067078, 321.34971757051306]), ([0, 363], [279.5108420525149, 81.16301775750024, 322.4137894829982]), ([0, 364], [279.5108420525149, 81.61898976737385, 322.4137894829982]), ([0, 365], [279.5108420525149, 82.07496177724744, 322.4137894829982]), ([0, 366], [279.5108420525149, 82.53093378712104, 322.4137894829982]), ([0, 367], [280.43944950119436, 83.26260980296472, 323.48493164074904]), ([0, 376], [242.56400660879166, 75.57867090094487, 279.79587478122255]), ([0, 377], [242.56400660879166, 75.9743707485938, 279.79587478122255]), ([0, 378], [242.56400660879166, 76.37007059624273, 279.79587478122255]), ([0, 379], [242.56400660879166, 76.76577044389165, 279.79587478122255]), ([0, 380], [243.26303832812536, 77.38383764108393, 280.6022029506209]), ([0, 381], [243.26303832812536, 77.78067783411512, 280.6022029506209]), ([0, 382], [251.22700684481993, 80.73690105779694, 289.7885845948377]), ([0, 383], [262.9665866039237, 84.93863645607975, 303.33010723945625]), ([0, 384], [264.61527993686366, 85.90283965323958, 305.23186339769734]), ([0, 385], [266.2847769711656, 86.87920945225632, 307.15761647907084]), ([0, 386], [267.12745031601105, 87.58991437768063, 308.12963425273875]), ([0, 387], [267.97547396780794, 88.30513171532986, 309.1078235678268]), ([0, 388], [267.97547396780794, 88.74228583273248, 309.1078235678268]), ([0, 389], [266.2847769711656, 88.61679364130144, 307.15761647907084]), ([0, 390], [263.7883571870609, 88.21633478523245, 304.27801382457955]), ([0, 391], [261.3383105258808, 87.82331479336288, 301.4519022410695]), ([0, 392], [260.5317108020355, 87.97726612727789, 300.5214951353872]), ([0, 393], [258.14151162036546, 87.59124700984667, 297.7644171983653]), ([0, 394], [258.14151162036546, 88.0123587743171, 297.7644171983653]), ([0, 395], [256.57226230960333, 87.89588105222953, 295.95429916068525]), ([0, 396], [255.02197673673564, 87.78081091590738, 294.16605566122496]), ([0, 397], [254.25383825258885, 87.93118060285292, 293.28001332489595]), ([0, 398], [252.73136017922005, 87.81693265607483, 291.5238455804355]), ([0, 399], [251.9769382085358, 87.96584792271886, 290.653625145867]), ([0, 400], [251.9769382085358, 88.37690328684373, 290.653625145867]), ([0, 401], [251.9769382085358, 88.78795865096858, 290.653625145867]), ([0, 402], [251.9769382085358, 89.19901401509343, 290.653625145867]), ([0, 403], [252.73136017922005, 89.87836300011415, 291.5238455804355]), ([0, 404], [253.49031321279128, 90.56179215921908, 292.39929256416053]), ([0, 405], [252.73136017922005, 90.70293513772988, 291.5238455804355]), ([0, 406], [252.73136017922005, 91.11522120653774, 291.5238455804355]), ([0, 407], [252.73136017922005, 91.5275072753456, 291.5238455804355]), ([0, 408], [252.73136017922005, 91.93979334415346, 291.5238455804355]), ([0, 409], [252.73136017922005, 92.35207941296133, 291.5238455804355]), ([0, 410], [252.73136017922005, 92.76436548176919, 291.5238455804355]), ([0, 411], [253.49031321279128, 93.4564613149932, 292.39929256416053]), ([0, 412], [262.9665866039237, 97.3791438158086, 303.33010723945625]), ([0, 413], [265.4474034586777, 98.7308450058377, 306.19171202473416]), ([0, 414], [265.4474034586777, 99.16387502779313, 306.19171202473416]), ([0, 415], [264.61527993686366, 99.28468904645781, 305.23186339769734]), ([0, 416], [263.7883571870609, 99.40474797750583, 304.27801382457955]), ([0, 417], [261.3383105258808, 98.90781083524364, 301.4519022410695]), ([0, 418], [259.7300747687985, 98.72285060543237, 299.5968136118937]), ([0, 419], [259.7300747687985, 99.14655382691491, 299.5968136118937]), ([0, 423], [245.38451831354504, 95.27164006300771, 283.0493151856554]), ([0, 424], [241.17792657102714, 94.03185065330422, 278.19704121104417]), ([0, 425], [239.80759744278268, 93.88878203306336, 276.6163762041632]), ([0, 426], [236.44894761865407, 92.95953731826367, 272.74219726572954]), ([0, 427], [233.82901468105123, 92.3109650127478, 269.720123057799]), ([0, 428], [233.18307817640746, 92.43635888559056, 268.9750398449322]), ([0, 429], [230.6346292345888, 91.80236465455084, 266.03542192312966]), ([0, 430], [230.00619700234196, 91.92743599604205, 265.31052976530094]), ([0, 431], [229.38118016266168, 92.05182760198169, 264.58957723876483]), ([0, 432], [229.38118016266168, 92.42602202312796, 264.58957723876483]), ([0, 433], [229.38118016266168, 92.80021644427423, 264.58957723876483]), ([0, 434], [251.22700684481993, 102.04816428117482, 289.7885845948377]), ([0, 435], [251.22700684481993, 102.45799626623977, 289.7885845948377]), ([0, 436], [251.22700684481993, 102.86782825130474, 289.7885845948377]), ([0, 437], [251.9769382085358, 103.58595175946334, 290.653625145867]), ([0, 438], [251.9769382085358, 103.99700712358819, 290.653625145867]), ([0, 439], [251.9769382085358, 104.40806248771305, 290.653625145867]), ([0, 440], [251.22700684481993, 104.50715619156458, 289.7885845948377]), ([0, 441], [249.74045650846006, 104.29617759570273, 288.07385924220546]), ([0, 442], [249.74045650846006, 104.70358453943595, 288.07385924220546]), ([0, 443], [249.0037589966357, 104.80092956138989, 287.22408384621076]), ([0, 444], [249.74045650846006, 105.51839842690238, 288.07385924220546]), ([0, 445], [251.22700684481993, 106.55631611688938, 289.7885845948377]), ([0, 446], [253.49031321279128, 107.92980709386383, 292.39929256416053]), ([0, 447], [254.25383825258885, 108.66966659409181, 293.28001332489595]), ([0, 448], [257.35449481664483, 110.41473431774484, 296.85659885324833]), ([0, 449], [262.9665866039237, 113.251515274773, 303.33010723945625]), ([0, 450], [267.12745031601105, 115.47924034868342, 308.12963425273875]), ([0, 451], [288.0964993169266, 125.01414162855217, 332.31728472309027]), ([0, 452], [289.0831311639024, 125.91385974023154, 333.45535761597756]), ([0, 453], [289.0831311639024, 126.38544722989533, 333.45535761597756]), ([0, 454], [289.0831311639024, 126.85703471955912, 333.45535761597756]), ([0, 455], [289.0831311639024, 127.32862220922291, 333.45535761597756]), ([0, 456], [292.0839941171609, 129.12685547430766, 336.91683191648946]), ([0, 457], [288.0964993169266, 127.8340094848353, 332.31728472309027]), ([0, 458], [273.1788812293188, 121.6604152946232, 315.109917229338]), ([0, 459], [271.42210385806914, 121.32080988109452, 313.08348689345803]), ([0, 460], [266.2847769711656, 119.45891299685243, 307.15761647907084]), ([0, 461], [264.61527993686366, 119.14162685574937, 305.23186339769734]), ([0, 462], [262.9665866039237, 118.82829443603076, 303.33010723945625]), ([0, 463], [262.9665866039237, 119.2572774484352, 303.33010723945625]), ([0, 464], [262.1499201858991, 119.31456399978114, 302.3880882728741]), ([0, 465], [262.1499201858991, 119.74221476680545, 302.3880882728741]), ([0, 466], [262.1499201858991, 120.16986553382975, 302.3880882728741]), ([0, 467], [261.3383105258808, 120.22414937732201, 301.4519022410695]), ([0, 468], [261.3383105258808, 120.65047614816356, 301.4519022410695]), ([0, 469], [260.5317108020355, 120.70310908283537, 300.5214951353872]), ([0, 470], [259.7300747687985, 120.75541812252457, 299.5968136118937]), ([0, 471], [255.79477060563485, 119.3430740509161, 295.0574679511074]), ([0, 472], [253.49031321279128, 118.68143538673915, 292.39929256416053]), ([0, 473], [251.22700684481993, 118.03161169870823, 289.7885845948377]), ([0, 474], [246.09992507247668, 116.02427136369619, 283.8745318480042]), ([0, 475], [240.49080997110968, 113.772161324016, 277.4044570480497]), ([0, 476], [239.80759744278268, 113.84014821508933, 276.6163762041632]), ([0, 477], [237.7810543658014, 113.26601610899512, 274.27877302497313]), ([0, 478], [237.7810543658014, 113.6539134244369, 274.27877302497313]), ([0, 479], [238.45275225949013, 114.36396274761842, 275.05357181882897]), ([0, 480], [239.12825580696742, 115.07803501314093, 275.83276040755084]), ([0, 481], [239.12825580696742, 115.46813004708378, 275.83276040755084]), ([0, 482], [239.12825580696742, 115.85822508102663, 275.83276040755084]), ([0, 483], [239.12825580696742, 116.24832011496947, 275.83276040755084]), ([0, 484], [239.80759744278268, 116.96977428285811, 276.6163762041632]), ([0, 485], [239.80759744278268, 117.3609775413292, 276.6163762041632]), ([0, 486], [239.80759744278268, 117.7521807998003, 276.6163762041632]), ([0, 487], [239.80759744278268, 118.1433840582714, 276.6163762041632]), ([0, 488], [238.45275225949013, 117.8649003827496, 275.05357181882897]), ([0, 489], [237.7810543658014, 117.92078389429629, 274.27877302497313]), ([0, 490], [234.47853972183194, 116.66550508182503, 270.4693456218485]), ([0, 491], [234.47853972183194, 117.04801493455233, 270.4693456218485]), ([0, 492], [234.47853972183194, 117.43052478727962, 270.4693456218485]), ([0, 493], [234.47853972183194, 117.81303464000692, 270.4693456218485]), ([0, 494], [234.47853972183194, 118.19554449273421, 270.4693456218485]), ([0, 495], [234.47853972183194, 118.57805434546151, 270.4693456218485]), ([0, 496], [234.47853972183194, 118.9605641981888, 270.4693456218485]), ([0, 497], [234.47853972183194, 119.3430740509161, 270.4693456218485]), ([0, 498], [234.47853972183194, 119.7255839036434, 270.4693456218485]), ([0, 499], [234.47853972183194, 120.10809375637069, 270.4693456218485]), ([0, 500], [234.47853972183194, 120.49060360909797, 270.4693456218485]), ([0, 501], [234.47853972183194, 120.87311346182527, 270.4693456218485]), ([0, 502], [234.47853972183194, 121.25562331455257, 270.4693456218485]), ([0, 503], [234.47853972183194, 121.63813316727986, 270.4693456218485]), ([0, 504], [234.47853972183194, 122.02064302000716, 270.4693456218485]), ([0, 505], [234.47853972183194, 122.40315287273445, 270.4693456218485]), ([0, 506], [234.47853972183194, 122.78566272546175, 270.4693456218485]), ([0, 507], [234.47853972183194, 123.16817257818904, 270.4693456218485]), ([0, 508], [234.47853972183194, 123.55068243091634, 270.4693456218485]), ([0, 509], [234.47853972183194, 123.93319228364363, 270.4693456218485]), ([0, 510], [234.47853972183194, 124.31570213637093, 270.4693456218485]), ([0, 511], [234.47853972183194, 124.69821198909823, 270.4693456218485]), ([0, 512], [234.47853972183194, 125.08072184182552, 270.4693456218485]), ([0, 513], [234.47853972183194, 125.46323169455282, 270.4693456218485]), ([0, 514], [234.47853972183194, 125.84574154728011, 270.4693456218485]), ([0, 515], [230.00619700234196, 123.82062807630155, 265.31052976530094]), ([0, 516], [228.14128189151216, 123.18884878644458, 263.15936330774446]), ([0, 517], [228.14128189151216, 123.56102053504411, 263.15936330774446]), ([0, 518], [228.14128189151216, 123.93319228364363, 263.15936330774446]), ([0, 519], [228.75955094812872, 124.6422349374796, 263.87253231399853]), ([0, 520], [228.75955094812872, 125.0154152816038, 263.87253231399853]), ([0, 521], [229.38118016266168, 125.72932550514572, 264.58957723876483]), ([0, 522], [230.6346292345888, 126.79261019911326, 266.03542192312966]), ([0, 523], [231.26650493112191, 127.51725720508843, 266.7642860927821]), ([0, 524], [232.54070055057713, 128.59918023922617, 268.234061773734]), ([0, 525], [232.54070055057713, 128.9785288535012, 268.234061773734]), ([0, 526], [233.18307817640746, 129.71521967072584, 268.9750398449322]), ([0, 527], [237.11313005578512, 132.28823895445106, 273.5083270333299]), ([0, 528], [237.11313005578512, 132.67504667069215, 273.5083270333299]), ([0, 529], [236.44894761865407, 132.68913210573734, 272.74219726572954]), ([0, 530], [235.78847569793157, 132.7031388512013, 271.9803475526968]), ([0, 531], [234.47853972183194, 132.34840904364412, 270.4693456218485]), ([0, 532], [233.82901468105123, 132.36324322075822, 269.720123057799]), ([0, 533], [234.47853972183194, 133.11342874909872, 270.4693456218485]), ([0, 534], [235.78847569793157, 134.24172596831667, 271.9803475526968]), ([0, 535], [236.44894761865407, 135.003477433163, 272.74219726572954]), ([0, 536], [237.11313005578512, 135.76950840062085, 273.5083270333299]), ([0, 537], [237.7810543658014, 136.53985503550098, 274.27877302497313]), ([0, 538], [238.45275225949013, 137.31455391125613, 275.05357181882897]), ([0, 539], [238.45275225949013, 137.70354698182626, 275.05357181882897]), ([0, 540], [238.45275225949013, 138.0925400523964, 275.05357181882897]), ([0, 541], [236.44894761865407, 137.31782276058865, 272.74219726572954]), ([0, 542], [235.78847569793157, 137.3189002025474, 271.9803475526968]), ([0, 543], [235.1316832865167, 137.319971642044, 271.2227421277589]), ([0, 544], [235.1316832865167, 137.70354698182626, 271.2227421277589]), ([0, 545], [235.1316832865167, 138.08712232160852, 271.2227421277589]), ([0, 546], [235.1316832865167, 138.47069766139074, 271.2227421277589]), ([0, 547], [233.82901468105123, 138.08499725047398, 269.720123057799]), ([0, 548], [233.82901468105123, 138.4664475191217, 269.720123057799]), ([0, 549], [236.44894761865407, 140.40361653048953, 272.74219726572954]), ([0, 550], [241.17792657102714, 143.60512756676167, 278.19704121104417]), ([0, 553], [251.9769382085358, 151.26837399794647, 290.653625145867]), ([0, 554], [251.9769382085358, 151.67942936207132, 290.653625145867]), ([0, 555], [243.96611069323555, 147.25523810195295, 281.41319197648977]), ([0, 556], [251.9769382085358, 152.50154009032101, 290.653625145867]), ([0, 562], [258.14151162036546, 158.7591352053471, 297.7644171983653]), ([0, 563], [258.9333567480353, 159.6685299359826, 298.67780498118236]), ([0, 564], [259.7300747687985, 160.58352094188356, 299.5968136118937]), ([0, 565], [260.5317108020355, 161.50416004041352, 300.5214951353872]), ([0, 566], [261.3383105258808, 162.43049969063716, 301.4519022410695]), ([0, 567], [261.3383105258808, 162.85682646147873, 301.4519022410695]), ([0, 568], [262.1499201858991, 163.79024377030888, 302.3880882728741]), ([0, 569], [263.7883571870609, 165.24425637819152, 304.27801382457955]), ([0, 570], [266.2847769711656, 167.2424781955934, 307.15761647907084]), ([0, 576], [262.9665866039237, 167.73235785013728, 303.33010723945625]), ([0, 577], [262.9665866039237, 168.16134086254172, 303.33010723945625]), ([0, 580], [263.7883571870609, 169.9778158056918, 304.27801382457955]), ([0, 581], [263.7883571870609, 170.40813939001, 304.27801382457955]), ([0, 582], [263.7883571870609, 170.8384629743282, 304.27801382457955]), ([0, 583], [264.61527993686366, 171.80567930647916, 305.23186339769734]), ([0, 584], [267.12745031601105, 173.8725166004705, 308.12963425273875]), ([0, 585], [267.97547396780794, 174.86164696104922, 309.1078235678268]), ([0, 586], [267.12745031601105, 174.74405803706435, 308.12963425273875]), ([0, 587], [267.12745031601105, 175.17982875536126, 308.12963425273875]), ([0, 588], [266.2847769711656, 175.06160704629647, 307.15761647907084]), ([0, 589], [266.2847769711656, 175.49600309355776, 307.15761647907084]), ([0, 590], [266.2847769711656, 175.93039914081905, 307.15761647907084]), ([0, 591], [266.2847769711656, 176.36479518808034, 307.15761647907084]), ([0, 592], [267.12745031601105, 177.35868234684585, 308.12963425273875]), ([0, 593], [270.5521612174984, 180.0738691300805, 312.0800141790559]), ([0, 594], [270.5521612174984, 180.51522665245815, 312.0800141790559]), ([0, 595], [272.2976590318048, 182.12404600822182, 314.0934336253724]), ([0, 596], [274.9585482080114, 184.35230556850357, 317.16275056633697]), ([0, 597], [276.7615550815066, 186.01266018528662, 319.2425063077556]), ([0, 598], [277.67195493374834, 187.0775161299153, 320.29264613113634]), ([0, 599], [277.67195493374834, 187.53048832393446, 320.29264613113634]), ([0, 600], [277.67195493374834, 187.9834605179536, 320.29264613113634]), ([0, 601], [277.67195493374834, 188.43643271197277, 320.29264613113634]), ([0, 602], [277.67195493374834, 188.88940490599194, 320.29264613113634]), ([0, 603], [277.67195493374834, 189.3423771000111, 320.29264613113634]), ([0, 604], [277.67195493374834, 189.79534929403027, 320.29264613113634]), ([0, 605], [277.67195493374834, 190.24832148804944, 320.29264613113634]), ([0, 606], [277.67195493374834, 190.7012936820686, 320.29264613113634]), ([0, 607], [277.67195493374834, 191.15426587608778, 320.29264613113634]), ([0, 608], [277.67195493374834, 191.60723807010694, 320.29264613113634]), ([0, 609], [277.67195493374834, 192.0602102641261, 320.29264613113634]), ([0, 610], [277.67195493374834, 192.51318245814528, 320.29264613113634]), ([0, 611], [277.67195493374834, 192.96615465216445, 320.29264613113634]), ([0, 612], [277.67195493374834, 193.4191268461836, 320.29264613113634]), ([0, 613], [277.67195493374834, 193.87209904020276, 320.29264613113634]), ([0, 614], [280.43944950119436, 196.26186596413112, 323.48493164074904]), ([0, 615], [286.1433027113881, 200.72042441418745, 330.06428618259474]), ([0, 616], [287.1165792512228, 201.8715263577113, 331.1869538226716]), ([0, 617], [289.0831311639024, 203.72579553475666, 333.45535761597756]), ([0, 618], [289.0831311639024, 204.19738302442045, 333.45535761597756]), ([0, 619], [288.0964993169266, 203.97044160447984, 332.31728472309027]), ([0, 620], [287.1165792512228, 203.74504400372254, 331.1869538226716]), ([0, 621], [287.1165792512228, 204.21342341522535, 331.1869538226716]), ([0, 622], [283.26266543577015, 201.9343960773761, 326.7414913552532]), ([0, 623], [283.26266543577015, 202.39648851691243, 326.7414913552532]), ([0, 624], [283.26266543577015, 202.85858095644875, 326.7414913552532]), ([0, 625], [283.26266543577015, 203.3206733959851, 326.7414913552532]), ([0, 626], [282.3152986617375, 203.10121812369692, 325.6487104477105]), ([0, 627], [282.3152986617375, 203.56176510356926, 325.6487104477105]), ([0, 628], [282.3152986617375, 204.0223120834416, 325.6487104477105]), ([0, 629], [288.0964993169266, 208.67022136495174, 332.31728472309027]), ([0, 630], [288.0964993169266, 209.14019934099892, 332.31728472309027]), ([0, 631], [288.0964993169266, 209.61017731704612, 332.31728472309027]), ([0, 632], [288.0964993169266, 210.0801552930933, 332.31728472309027]), ([0, 633], [288.0964993169266, 210.5501332691405, 332.31728472309027]), ([0, 634], [288.0964993169266, 211.02011124518768, 332.31728472309027]), ([0, 635], [288.0964993169266, 211.49008922123488, 332.31728472309027]), ([0, 636], [288.0964993169266, 211.96006719728206, 332.31728472309027]), ([0, 637], [288.0964993169266, 212.43004517332926, 332.31728472309027]), ([0, 638], [294.1194226475941, 217.3508947134749, 339.2646844037124]), ([0, 639], [304.73745234606315, 225.69462212905822, 351.51250694536265]), ([0, 640], [305.84157355021557, 227.01128216206865, 352.78610298501974]), ([0, 641], [308.07399379510764, 229.17086650990063, 355.361184028706]), ([0, 642], [310.33924374948344, 231.3622094510831, 357.97413391127003]), ([0, 643], [312.6380529624426, 233.5860167321349, 360.6257941624646]), ([0, 644], [329.7354464838262, 246.8981565025713, 380.34751728072445]), ([0, 645], [329.7354464838262, 247.43606098296908, 380.34751728072445]), ([0, 646], [329.7354464838262, 247.97396546336682, 380.34751728072445]), ([0, 647], [329.7354464838262, 248.5118699437646, 380.34751728072445]), ([0, 648], [329.7354464838262, 249.04977442416234, 380.34751728072445]), ([0, 649], [329.7354464838262, 249.5876789045601, 380.34751728072445]), ([0, 650], [329.7354464838262, 250.12558338495785, 380.34751728072445]), ([0, 651], [329.7354464838262, 250.66348786535562, 380.34751728072445]), ([0, 652], [329.7354464838262, 251.2013923457534, 380.34751728072445]), ([0, 653], [329.7354464838262, 251.73929682615113, 380.34751728072445]), ([0, 654], [329.7354464838262, 252.2772013065489, 380.34751728072445]), ([0, 655], [329.7354464838262, 252.81510578694665, 380.34751728072445]), ([0, 656], [329.7354464838262, 253.35301026734442, 380.34751728072445]), ([0, 657], [329.7354464838262, 253.8909147477422, 380.34751728072445]), ([0, 658], [329.7354464838262, 254.42881922813993, 380.34751728072445]), ([0, 659], [329.7354464838262, 254.9667237085377, 380.34751728072445]), ([0, 660], [329.7354464838262, 255.50462818893544, 380.34751728072445]), ([0, 661], [329.7354464838262, 256.0425326693332, 380.34751728072445]), ([0, 662], [329.7354464838262, 256.580437149731, 380.34751728072445]), ([0, 698], [329.7354464838262, 275.94499844405027, 380.34751728072445]), ([0, 699], [329.7354464838262, 276.48290292444807, 380.34751728072445]), ([0, 700], [329.7354464838262, 277.0208074048458, 380.34751728072445]), ([0, 701], [329.7354464838262, 277.55871188524355, 380.34751728072445]), ([0, 702], [329.7354464838262, 278.0966163656413, 380.34751728072445]), ([0, 703], [329.7354464838262, 278.6345208460391, 380.34751728072445]), ([0, 704], [318.5368841504132, 269.6910976738409, 367.430054429681]), ([0, 705], [316.15084007438014, 268.1866832604856, 364.67776937777325]), ([0, 706], [316.15084007438014, 268.7024268821404, 364.67776937777325]), ([0, 707], [313.8002762076561, 267.2165484182651, 361.9664104976411]), ([0, 713], [267.12745031601105, 230.086939260773, 308.12963425273875]), ([0, 714], [264.61527993686366, 228.35478480685296, 305.23186339769734]), ([0, 715], [263.7883571870609, 228.07149968864974, 304.27801382457955]), ([0, 716], [262.1499201858991, 227.08255728990605, 302.3880882728741]), ([0, 717], [258.9333567480353, 224.71867176175328, 298.67780498118236]), ([0, 718], [258.14151162036546, 224.4525704627321, 297.7644171983653]), ([0, 719], [258.14151162036546, 224.87368222720252, 297.7644171983653]), ([0, 720], [262.1499201858991, 228.79316035800326, 302.3880882728741]), ([0, 724], [306.95372472676183, 269.89895208437946, 354.0689615413289]), ([0, 725], [306.95372472676183, 270.3996922552225, 354.0689615413289]), ([0, 751], [329.7354464838262, 304.4539359051315, 380.34751728072445]), ([0, 752], [329.7354464838262, 304.99184038552926, 380.34751728072445]), ([0, 753], [329.7354464838262, 305.529744865927, 380.34751728072445]), ([0, 754], [317.33937706714096, 294.5613467393201, 366.0487384355844]), ([0, 755], [312.6380529624426, 290.70748807274435, 360.6257941624646]), ([0, 756], [310.33924374948344, 289.07619605376027, 357.97413391127003]), ([0, 757], [309.20246996285533, 288.52171748573124, 356.6628733474925]), ([0, 758], [308.07399379510764, 287.9712862065199, 355.361184028706]), ([0, 759], [308.07399379510764, 288.4738538962346, 355.361184028706]), ([0, 760], [308.07399379510764, 288.97642158594925, 355.361184028706]), ([0, 761], [309.20246996285533, 290.5393518737433, 356.6628733474925]), ([0, 762], [310.33924374948344, 292.11377429600645, 357.97413391127003]), ([0, 763], [310.33924374948344, 292.6200373363808, 357.97413391127003]), ([0, 924], [329.7354464838262, 397.51141101394376, 380.34751728072445]), ([0, 925], [329.7354464838262, 398.04931549434156, 380.34751728072445]), ([0, 926], [329.7354464838262, 398.5872199747393, 380.34751728072445]), ([0, 927], [329.7354464838262, 399.12512445513704, 380.34751728072445]), ([0, 928], [329.7354464838262, 399.66302893553484, 380.34751728072445]), ([0, 929], [329.7354464838262, 400.2009334159326, 380.34751728072445]), ([0, 930], [329.7354464838262, 400.7388378963303, 380.34751728072445]), ([0, 931], [329.7354464838262, 401.2767423767281, 380.34751728072445]), ([0, 932], [329.7354464838262, 401.81464685712587, 380.34751728072445]), ([0, 933], [329.7354464838262, 402.3525513375236, 380.34751728072445]), ([0, 934], [329.7354464838262, 402.89045581792135, 380.34751728072445]), ([0, 935], [329.7354464838262, 403.42836029831915, 380.34751728072445]), ([0, 936], [329.7354464838262, 403.9662647787169, 380.34751728072445]), ([0, 937], [329.7354464838262, 404.50416925911463, 380.34751728072445]), ([0, 938], [329.7354464838262, 405.04207373951243, 380.34751728072445]), ([0, 939], [329.7354464838262, 405.5799782199102, 380.34751728072445]), ([0, 940], [311.48440701055165, 383.63903310434995, 359.2950716747803]), ([0, 941], [310.33924374948344, 382.7348585230171, 357.97413391127003]), ([0, 942], [310.33924374948344, 383.24112156339146, 357.97413391127003]), ([0, 943], [310.33924374948344, 383.74738460376585, 357.97413391127003]), ([0, 944], [310.33924374948344, 384.2536476441402, 357.97413391127003]), ([0, 945], [310.33924374948344, 384.7599106845146, 357.97413391127003]), ([0, 946], [311.48440701055165, 386.68782012239774, 359.2950716747803]), ([0, 947], [311.48440701055165, 387.1959512920724, 359.2950716747803]), ([0, 948], [310.33924374948344, 386.27869980563764, 357.97413391127003]), ([0, 949], [310.33924374948344, 386.784962846012, 357.97413391127003]), ([0, 950], [309.20246996285533, 385.8725767073154, 356.6628733474925]), ([0, 951], [309.20246996285533, 386.3769853043184, 356.6628733474925]), ([0, 952], [309.20246996285533, 386.8813939013214, 356.6628733474925]), ([0, 953], [308.07399379510764, 385.9719857008853, 355.361184028706]), ([0, 954], [308.07399379510764, 386.47455339059997, 355.361184028706]), ([0, 955], [306.95372472676183, 385.56993154911356, 354.0689615413289]), ([0, 956], [304.73745234606315, 383.2831578447222, 351.51250694536265]), ([0, 957], [298.27658763201237, 375.64359812710205, 344.0599449606553]), ([0, 958], [288.0964993169266, 363.2929754844768, 332.31728472309027]), ([0, 959], [281.37424766619836, 355.27515121311177, 324.5632147462182]), ([0, 960], [279.5108420525149, 353.3783076520376, 322.4137894829982]), ([0, 961], [278.5883640259389, 352.6665097620369, 321.34971757051306]), ([0, 962], [277.67195493374834, 351.95939475289146, 320.29264613113634]), ([0, 963], [277.67195493374834, 352.41236694691065, 320.29264613113634]), ([0, 964], [277.67195493374834, 352.8653391409298, 320.29264613113634]), ([0, 965], [276.7615550815066, 352.1598906420475, 319.2425063077556]), ([0, 966], [277.67195493374834, 353.7712835289681, 320.29264613113634]), ([0, 967], [277.67195493374834, 354.2242557229873, 320.29264613113634]), ([0, 968], [277.67195493374834, 354.67722791700646, 320.29264613113634]), ([0, 969], [281.37424766619836, 359.8652694458393, 324.5632147462182]), ([0, 970], [283.26266543577015, 362.74256503601885, 326.7414913552532]), ([0, 971], [287.1165792512228, 368.146217441209, 331.1869538226716]), ([0, 972], [289.0831311639024, 371.13935436540163, 333.45535761597756]), ([0, 973], [290.0765439857715, 372.8879554009591, 334.60125231568884]), ([0, 974], [291.07680793055, 374.6486157540032, 335.75504973746706]), ([0, 975], [290.0765439857715, 373.83437153141836, 334.60125231568884]), ([0, 976], [291.07680793055, 375.5982953883606, 335.75504973746706]), ([0, 977], [291.07680793055, 376.0731352055393, 335.75504973746706]), ([0, 978], [293.0981746522899, 379.16289151593134, 338.0866820273106]), ([0, 979], [293.0981746522899, 379.64102883184046, 338.0866820273106]), ([0, 983], [251.22700684481993, 327.04592408183737, 289.7885845948377]), ([0, 984], [251.22700684481993, 327.4557560669023, 289.7885845948377]), ([0, 985], [251.22700684481993, 327.8655880519673, 289.7885845948377]), ([0, 986], [251.22700684481993, 328.27542003703223, 289.7885845948377]), ([0, 987], [253.49031321279128, 331.6463804186927, 292.39929256416053]), ([0, 988], [258.14151162036546, 338.1527468697446, 297.7644171983653]), ([0, 989], [259.7300747687985, 340.6573900719641, 299.5968136118937]), ([0, 990], [266.2847769711656, 349.6888180453317, 307.15761647907084]), ([0, 991], [267.97547396780794, 352.3462186265142, 309.1078235678268]), ([0, 993], [271.42210385806914, 357.7635561457094, 313.08348689345803]), ([0, 994], [271.42210385806914, 358.20633282410756, 313.08348689345803]), ([0, 995], [271.42210385806914, 358.6491095025057, 313.08348689345803]), ([0, 996], [271.42210385806914, 359.0918861809039, 313.08348689345803]), ([0, 997], [271.42210385806914, 359.534662859302, 313.08348689345803]), ([0, 998], [271.42210385806914, 359.97743953770015, 313.08348689345803]), ([0, 999], [270.5521612174984, 359.2650232154057, 312.0800141790559]), ([0, 1000], [267.12745031601105, 355.1531354119886, 308.12963425273875]), ([0, 1001], [264.61527993686366, 352.24480983438946, 305.23186339769734]), ([0, 1002], [256.57226230960333, 341.9568324746263, 295.95429916068525]), ([0, 1003], [251.22700684481993, 335.2425637831366, 289.7885845948377]), ([0, 1004], [245.38451831354504, 327.84652609917356, 283.0493151856554]), ([0, 1005], [241.86898080188968, 323.5441505017121, 278.99416740362597]), ([0, 1006], [241.86898080188968, 323.9387165389094, 278.99416740362597]), ([0, 1007], [241.86898080188968, 324.33328257610657, 278.99416740362597]), ([0, 1008], [241.86898080188968, 324.72784861330376, 278.99416740362597]), ([0, 1009], [241.86898080188968, 325.12241465050096, 278.99416740362597]), ([0, 1010], [243.26303832812536, 327.3931592507397, 280.6022029506209]), ([0, 1011], [243.96611069323555, 328.7373693843598, 281.41319197648977]), ([0, 1012], [245.38451831354504, 331.0489341685184, 283.0493151856554]), ([0, 1013], [246.8195154966652, 333.3875347981057, 284.7045743387879]), ([0, 1014], [246.09992507247668, 332.817027544997, 283.8745318480042]), ([0, 1015], [246.8195154966652, 334.19281869858423, 284.7045743387879]), ([0, 1016], [246.8195154966652, 334.59546064882346, 284.7045743387879]), ([0, 1017], [247.54332639254986, 335.9805017269192, 285.53948511397493]), ([0, 1018], [247.54332639254986, 336.384324445341, 285.53948511397493]), ([0, 1019], [247.54332639254986, 336.78814716376274, 285.53948511397493]), ([0, 1020], [248.27139499958676, 338.1837109700733, 286.379307129016]), ([0, 1021], [249.0037589966357, 339.5875081911704, 287.22408384621076]), ([0, 1022], [249.0037589966357, 339.9937133445091, 287.22408384621076]), ([0, 1023], [247.54332639254986, 338.40343803744986, 285.53948511397493]), ([0, 1024], [246.8195154966652, 337.8165962507375, 284.7045743387879]), ([0, 1025], [246.09992507247668, 337.2331762820235, 283.8745318480042]), ([0, 1026], [246.09992507247668, 337.6346443490259, 283.8745318480042]), ([0, 1027], [246.09992507247668, 338.03611241602835, 283.8745318480042]), ([0, 1028], [245.38451831354504, 337.45375030720794, 283.0493151856554]), ([0, 1029], [241.86898080188968, 333.0137353944452, 278.99416740362597]), ([0, 1030], [240.49080997110968, 331.5085390303225, 277.4044570480497]), ([0, 1031], [239.80759744278268, 330.95795666654834, 276.6163762041632]), ([0, 1032], [239.80759744278268, 331.3491599250194, 276.6163762041632]), ([0, 1033], [239.80759744278268, 331.74036318349056, 276.6163762041632]), ([0, 1034], [239.80759744278268, 332.13156644196164, 276.6163762041632]), ([0, 1035], [239.80759744278268, 332.5227697004327, 276.6163762041632]), ([0, 1036], [239.12825580696742, 331.97087388536585, 275.83276040755084]), ([0, 1037], [239.12825580696742, 332.36096891930873, 275.83276040755084]), ([0, 1038], [239.12825580696742, 332.75106395325156, 275.83276040755084]), ([0, 1039], [239.12825580696742, 333.14115898719444, 275.83276040755084]), ([0, 1040], [239.12825580696742, 333.5312540211373, 275.83276040755084]), ([0, 1041], [238.45275225949013, 332.97806840803185, 275.05357181882897]), ([0, 1042], [238.45275225949013, 333.367061478602, 275.05357181882897]), ([0, 1043], [238.45275225949013, 333.7560545491721, 275.05357181882897]), ([0, 1044], [238.45275225949013, 334.1450476197423, 275.05357181882897]), ([0, 1045], [238.45275225949013, 334.5340406903124, 275.05357181882897]), ([0, 1046], [238.45275225949013, 334.9230337608825, 275.05357181882897]), ([0, 1047], [238.45275225949013, 335.31202683145267, 275.05357181882897]), ([0, 1048], [238.45275225949013, 335.7010199020228, 275.05357181882897]), ([0, 1049], [239.12825580696742, 337.04210932662295, 275.83276040755084]), ([0, 1050], [239.12825580696742, 337.4322043605658, 275.83276040755084]), ([0, 1051], [239.80759744278268, 338.7820218359703, 276.6163762041632]), ([0, 1052], [239.80759744278268, 339.1732250944414, 276.6163762041632]), ([0, 1053], [239.80759744278268, 339.5644283529125, 276.6163762041632]), ([0, 1054], [240.49080997110968, 340.92416617437897, 277.4044570480497]), ([0, 1055], [240.49080997110968, 341.316483972048, 277.4044570480497]), ([0, 1056], [240.49080997110968, 341.708801769717, 277.4044570480497]), ([0, 1057], [241.17792657102714, 343.0785513375786, 278.19704121104417]), ([0, 1058], [241.86898080188968, 344.45615047316426, 278.99416740362597]), ([0, 1059], [243.26303832812536, 346.83832870926847, 280.6022029506209]), ([0, 1060], [244.67325884017245, 349.24812640318254, 282.2288823880158]), ([0, 1061], [246.09992507247668, 351.68602669411024, 283.8745318480042]), ([0, 1062], [246.8195154966652, 353.11699035982934, 284.7045743387879]), ([0, 1063], [246.09992507247668, 352.48896282811506, 283.8745318480042]), ([0, 1064], [246.8195154966652, 353.92227426030786, 284.7045743387879]), ([0, 1065], [244.67325884017245, 351.24382998262934, 282.2288823880158]), ([0, 1066], [244.67325884017245, 351.64297069851864, 282.2288823880158]), ([0, 1067], [242.56400660879166, 349.00726562635276, 279.79587478122255]), ([0, 1068], [243.96611069323555, 351.42263579466066, 281.41319197648977]), ([0, 1069], [249.0037589966357, 359.08535555142896, 287.22408384621076]), ([0, 1074], [329.7354464838262, 478.1970830736076, 380.34751728072445]), ([0, 1075], [329.7354464838262, 478.7349875540054, 380.34751728072445]), ([0, 1076], [329.7354464838262, 479.2728920344031, 380.34751728072445]), ([0, 1077], [329.7354464838262, 479.81079651480087, 380.34751728072445]), ([0, 1078], [329.7354464838262, 480.34870099519867, 380.34751728072445]), ([0, 1079], [329.7354464838262, 480.8866054755964, 380.34751728072445]), ([0, 1080], [329.7354464838262, 481.42450995599415, 380.34751728072445]), ([0, 1081], [329.7354464838262, 481.9624144363919, 380.34751728072445]), ([0, 1082], [329.7354464838262, 482.5003189167897, 380.34751728072445]), ([0, 1086], [282.3152986617375, 414.9528288649681, 325.6487104477105]), ([0, 1087], [277.67195493374834, 408.5809190052871, 320.29264613113634]), ([0, 1088], [274.0658256488945, 403.7217627421725, 316.13300137618654]), ([0, 1089], [270.5521612174984, 398.98720022939403, 312.0800141790559]), ([0, 1090], [268.82889904413855, 396.8844268106776, 310.09224338810657]), ([0, 1091], [266.2847769711656, 393.5628188187211, 307.15761647907084]), ([0, 1092], [263.7883571870609, 390.30349097661383, 304.27801382457955]), ([0, 1093], [262.9665866039237, 389.5165752632344, 303.33010723945625]), ([0, 1094], [262.1499201858991, 388.7345472250934, 302.3880882728741]), ([0, 1096], [253.49031321279128, 376.72051441574695, 292.39929256416053]), ([0, 1097], [249.0037589966357, 370.4590998449131, 287.22408384621076]), ([0, 1098], [243.96611069323555, 363.362249694819, 281.41319197648977]), ([0, 1099], [240.49080997110968, 358.57846706948493, 277.4044570480497]), ([0, 1100], [239.12825580696742, 356.9369560577083, 275.83276040755084]), ([0, 1101], [236.44894761865407, 353.32338665364944, 272.74219726572954]), ([0, 1102], [234.47853972183194, 350.7615349509297, 270.4693456218485]), ([0, 1103], [230.6346292345888, 345.38758505277735, 266.03542192312966]), ([0, 1104], [229.38118016266168, 343.8846730334194, 264.58957723876483]), ([0, 1105], [229.38118016266168, 344.25886745456563, 264.58957723876483]), ([0, 1106], [226.91471585983737, 340.927330027586, 261.7445280211437]), ([0, 1107], [222.72367889144988, 334.993853079799, 256.91019636903815]), ([0, 1108], [219.82363098921743, 330.9905569380876, 253.56501152048295]), ([0, 1109], [218.11957183426227, 328.7805617860658, 251.59939127613814]), ([0, 1110], [216.44172897399872, 326.6045665594597, 249.66401134324477]), ([0, 1111], [215.88816956485806, 326.12144374724073, 249.02548446001396]), ([0, 1112], [215.88816956485806, 326.473626731849, 249.02548446001396]), ([0, 1113], [215.88816956485806, 326.82580971645723, 249.02548446001396]), ([0, 1122], [219.82363098921743, 336.01099875513336, 253.56501152048295]), ([0, 1123], [218.68464844523186, 334.6267540646452, 252.2512031706359]), ([0, 1124], [218.68464844523186, 334.9834990050126, 252.2512031706359]), ([0, 1125], [218.68464844523186, 335.34024394538, 252.2512031706359]), ([0, 1126], [218.68464844523186, 335.69698888574743, 252.2512031706359]), ([0, 1127], [219.82363098921743, 337.80401368979255, 253.56501152048295]), ([0, 1128], [219.82363098921743, 338.1626166767244, 253.56501152048295]), ([0, 1129], [219.82363098921743, 338.5212196636562, 253.56501152048295]), ([0, 1130], [219.82363098921743, 338.8798226505881, 253.56501152048295]), ([0, 1131], [219.82363098921743, 339.2384256375199, 253.56501152048295]), ([0, 1132], [219.82363098921743, 339.59702862445175, 253.56501152048295]), ([0, 1133], [219.82363098921743, 339.9556316113836, 253.56501152048295]), ([0, 1134], [220.39758302835378, 341.2027835137157, 254.22706115891762]), ([0, 1135], [221.554525721416, 343.35530087332006, 255.56158641434502]), ([0, 1149], [220.39758302835378, 346.59587282109794, 254.22706115891762]), ([0, 1150], [220.39758302835378, 346.9554121082568, 254.22706115891762]), ([0, 1151], [220.39758302835378, 347.31495139541556, 254.22706115891762]), ([0, 1152], [219.25266051911558, 345.8683894322753, 252.90640110094924]), ([0, 1153], [219.25266051911558, 346.22606098287747, 252.90640110094924]), ([0, 1154], [219.25266051911558, 346.58373253347963, 252.90640110094924]), ([0, 1155], [219.25266051911558, 346.94140408408174, 252.90640110094924]), ([0, 1156], [219.82363098921743, 348.2035003108159, 253.56501152048295]), ([0, 1157], [219.82363098921743, 348.56210329774774, 253.56501152048295]), ([0, 1158], [219.82363098921743, 348.92070628467957, 253.56501152048295]), ([0, 1159], [219.82363098921743, 349.2793092716114, 253.56501152048295]), ([0, 1160], [219.82363098921743, 349.6379122585432, 253.56501152048295]), ([0, 1161], [219.82363098921743, 349.9965152454751, 253.56501152048295]), ([0, 1162], [219.82363098921743, 350.35511823240694, 253.56501152048295]), ([0, 1163], [219.82363098921743, 350.71372121933877, 253.56501152048295]), ([0, 1164], [219.82363098921743, 351.0723242062706, 253.56501152048295]), ([0, 1171], [221.554525721416, 356.3666596432564, 255.56158641434502]), ([0, 1172], [221.554525721416, 356.72808627575466, 255.56158641434502]), ([0, 1173], [221.554525721416, 357.08951290825286, 255.56158641434502]), ([0, 1174], [221.554525721416, 357.4509395407511, 255.56158641434502]), ([0, 1175], [220.9745400519882, 356.8756845864084, 254.8925770258258]), ([0, 1176], [220.39758302835378, 356.30343357438596, 254.22706115891762]), ([0, 1177], [220.9745400519882, 357.5966455653708, 254.8925770258258]), ([0, 1178], [220.9745400519882, 357.95712605485204, 254.8925770258258]), ([0, 1179], [220.9745400519882, 358.3176065443333, 254.8925770258258]), ([0, 1180], [220.39758302835378, 357.74159072302126, 254.22706115891762]), ([0, 1181], [220.39758302835378, 358.10113001018004, 254.22706115891762]), ([0, 1182], [220.39758302835378, 358.4606692973389, 254.22706115891762]), ([0, 1183], [220.39758302835378, 358.82020858449766, 254.22706115891762]), ([0, 1184], [220.9745400519882, 360.1200089917394, 254.8925770258258]), ([0, 1185], [223.90523686965383, 365.2613978297779, 258.27311518266697]), ([0, 1186], [225.09939813295867, 367.5766680768216, 259.65057179697453]), ([0, 1187], [226.30636541517293, 369.9167669592223, 261.04280006398244]), ([0, 1188], [228.14128189151216, 373.288263845329, 263.15936330774446]), ([0, 1189], [229.38118016266168, 375.6911988308521, 264.58957723876483]), ([0, 1190], [230.6346292345888, 378.1203954009164, 266.03542192312966]), ([0, 1191], [230.6346292345888, 378.49663460032025, 266.03542192312966]), ([0, 1192], [230.00619700234196, 377.84052264495654, 265.31052976530094]), ([0, 1193], [230.00619700234196, 378.21573666943016, 265.31052976530094]), ([0, 1194], [229.38118016266168, 377.5621709365834, 264.58957723876483]), ([0, 1195], [228.75955094812872, 376.91214756543235, 263.87253231399853]), ([0, 1196], [228.75955094812872, 377.2853279095565, 263.87253231399853]), ([0, 1197], [229.38118016266168, 378.6847542000222, 264.58957723876483]), ([0, 1206], [210.50442468792892, 350.6117742355227, 242.8153726280934]), ([0, 1207], [209.98078184044653, 350.08215177966775, 242.2113542882225]), ([0, 1208], [209.45973771677296, 349.55515772309747, 241.6103335579788]), ([0, 1209], [207.91200566467856, 347.3114091364288, 239.8250355267622]), ([0, 1210], [206.89282916632231, 345.9464109224802, 238.64942260751337]), ([0, 1211], [206.89282916632231, 346.2839196160631, 238.64942260751337]), ([0, 1212], [207.40116535592014, 347.4730780106525, 239.23578482522225]), ([0, 1213], [207.40116535592014, 347.8114159639248, 239.23578482522225]), ([0, 1214], [207.40116535592014, 348.14975391719713, 239.23578482522225]), ([0, 1215], [207.91200566467856, 349.3464369243376, 239.8250355267622]), ([0, 1216], [208.9412730194542, 351.4167250947101, 241.01228817788478]), ([0, 1217], [210.50442468792892, 354.3891782674431, 242.8153726280934]), ([0, 1218], [211.03068574964874, 355.61941008056635, 243.42241105966363]), ([1, 199], [266.69167959771414, 6.1007900561568595, 308.12963425273875]), ([1, 200], [270.979327179671, 6.641650175972328, 313.08348689345803]), ([1, 201], [273.61873621064177, 7.1534310120429225, 316.13300137618654]), ([1, 202], [277.2189827397292, 7.70052729832581, 320.29264613113634]), ([1, 206], [314.4573535555137, 10.79020330827743, 363.3170314323338]), ([1, 212], [329.1975420034284, 14.523420970739489, 380.34751728072445]), ([1, 213], [329.1975420034284, 15.061325451137247, 380.34751728072445]), ([1, 214], [329.1975420034284, 15.599229931535007, 380.34751728072445]), ([1, 215], [329.1975420034284, 16.137134411932767, 380.34751728072445]), ([1, 216], [329.1975420034284, 16.675038892330523, 380.34751728072445]), ([1, 217], [329.1975420034284, 17.212943372728283, 380.34751728072445]), ([1, 218], [313.2883671110694, 16.893000187361586, 361.9664104976411]), ([1, 219], [312.12803982547285, 17.340446656970716, 360.6257941624646]), ([1, 220], [298.8459955775804, 17.090865760155744, 345.2800156874662]), ([1, 221], [295.70024825571113, 17.39413225033595, 341.64548920654545]), ([1, 222], [292.6200373363808, 17.691080688637403, 338.0866820273106]), ([1, 223], [291.60751125563206, 18.106348738094802, 336.91683191648946]), ([1, 224], [288.6115436742386, 18.391912096887754, 333.45535761597756]), ([1, 225], [285.67651102670396, 18.671667387366274, 330.06428618259474]), ([1, 226], [279.0548700426413, 18.69485240481747, 322.4137894829982]), ([1, 227], [277.2189827397292, 19.024832148804943, 320.29264613113634]), ([1, 228], [277.2189827397292, 19.47780434282411, 320.29264613113634]), ([1, 229], [277.2189827397292, 19.930776536843275, 320.29264613113634]), ([1, 230], [277.2189827397292, 20.38374873086244, 320.29264613113634]), ([1, 231], [280.9152358429256, 21.114543870546694, 324.5632147462182]), ([1, 232], [286.64819983971995, 22.01383234063209, 331.1869538226716]), ([1, 233], [286.64819983971995, 22.4822117521349, 331.1869538226716]), ([1, 234], [286.64819983971995, 22.95059116363771, 331.1869538226716]), ([1, 235], [286.64819983971995, 23.41897057514052, 331.1869538226716]), ([1, 236], [286.64819983971995, 23.887349986643333, 331.1869538226716]), ([1, 237], [286.64819983971995, 24.355729398146142, 331.1869538226716]), ([1, 238], [283.7527634777026, 24.573360235814114, 327.841631056786]), ([1, 239], [283.7527634777026, 25.03700854215023, 327.841631056786]), ([1, 240], [329.1975420034284, 29.584746421876737, 380.34751728072445]), ([1, 241], [329.1975420034284, 30.122650902274493, 380.34751728072445]), ([1, 242], [329.1975420034284, 30.660555382672253, 380.34751728072445]), ([1, 243], [329.1975420034284, 31.198459863070013, 380.34751728072445]), ([1, 244], [329.1975420034284, 31.736364343467773, 380.34751728072445]), ([1, 245], [329.1975420034284, 32.27426882386553, 380.34751728072445]), ([1, 246], [329.1975420034284, 32.81217330426329, 380.34751728072445]), ([1, 247], [329.1975420034284, 33.350077784661046, 380.34751728072445]), ([1, 248], [329.1975420034284, 33.88798226505881, 380.34751728072445]), ([1, 249], [329.1975420034284, 34.425886745456566, 380.34751728072445]), ([1, 250], [329.1975420034284, 34.96379122585432, 380.34751728072445]), ([1, 255], [313.2883671110694, 35.83363676107003, 361.9664104976411]), ([1, 256], [310.976275840877, 36.07731304689913, 359.2950716747803]), ([1, 257], [310.976275840877, 36.58544421657377, 359.2950716747803]), ([1, 258], [312.12803982547285, 37.230958998790065, 360.6257941624646]), ([1, 259], [314.4573535555137, 38.02262118154904, 363.3170314323338]), ([1, 260], [329.1975420034284, 40.342836029831915, 380.34751728072445]), ([1, 261], [329.1975420034284, 40.88074051022967, 380.34751728072445]), ([1, 262], [329.1975420034284, 41.41864499062743, 380.34751728072445]), ([1, 263], [329.1975420034284, 41.95654947102519, 380.34751728072445]), ([1, 264], [329.1975420034284, 42.49445395142295, 380.34751728072445]), ([1, 265], [329.1975420034284, 43.032358431820704, 380.34751728072445]), ([1, 266], [329.1975420034284, 43.57026291221847, 380.34751728072445]), ([1, 267], [329.1975420034284, 44.108167392616224, 380.34751728072445]), ([1, 268], [329.1975420034284, 44.64607187301399, 380.34751728072445]), ([1, 269], [329.1975420034284, 45.183976353411744, 380.34751728072445]), ([1, 270], [329.1975420034284, 45.7218808338095, 380.34751728072445]), ([1, 271], [329.1975420034284, 46.259785314207264, 380.34751728072445]), ([1, 272], [302.05939337948985, 42.939815725515714, 348.9927040281916]), ([1, 273], [302.05939337948985, 43.433376825809, 348.9927040281916]), ([1, 274], [302.05939337948985, 43.92693792610228, 348.9927040281916]), ([1, 275], [303.1459379599916, 44.58028499411642, 350.2480734671419]), ([1, 276], [305.3426476553539, 45.40225643241373, 352.78610298501974]), ([1, 277], [306.4529845559188, 46.068095717556425, 354.0689615413289]), ([1, 278], [307.57142610539296, 46.738795143466575, 355.361184028706]), ([1, 279], [308.6980613658523, 47.4144081182845, 356.6628733474925]), ([1, 280], [308.6980613658523, 47.91881671528753, 356.6628733474925]), ([1, 281], [309.8329807091091, 48.60125187593868, 357.97413391127003]), ([1, 282], [309.8329807091091, 49.10751491631304, 357.97413391127003]), ([1, 283], [310.976275840877, 49.796854628114296, 359.2950716747803]), ([1, 284], [310.976275840877, 50.30498579778893, 359.2950716747803]), ([1, 285], [310.976275840877, 50.813116967463564, 359.2950716747803]), ([1, 286], [309.8329807091091, 51.132567077810485, 357.97413391127003]), ([1, 287], [307.57142610539296, 51.26190435089883, 355.361184028706]), ([1, 288], [305.3426476553539, 51.38936717075401, 352.78610298501974]), ([1, 289], [297.7900026603451, 50.60483705339198, 344.0599449606553]), ([1, 290], [292.6200373363808, 50.204418170457494, 338.0866820273106]), ([1, 291], [288.6115436742386, 49.98827390436159, 333.45535761597756]), ([1, 292], [282.8005729962338, 49.443891030387285, 326.7414913552532]), ([1, 293], [277.2189827397292, 48.92099695406986, 320.29264613113634]), ([1, 294], [274.51000245237026, 48.89148736488294, 317.16275056633697]), ([1, 295], [272.733238682452, 49.02068015534268, 315.109917229338]), ([1, 296], [271.8534540415409, 49.306753919299084, 314.0934336253724]), ([1, 297], [271.8534540415409, 49.75095890956304, 314.0934336253724]), ([1, 298], [271.8534540415409, 50.195163899826994, 314.0934336253724]), ([1, 299], [271.8534540415409, 50.63936889009095, 314.0934336253724]), ([1, 301], [272.733238682452, 51.69453543654319, 315.109917229338]), ([1, 302], [268.3903527161709, 51.30992037220915, 310.09224338810657]), ([1, 303], [262.53760359151926, 50.619995463724294, 303.33010723945625]), ([1, 304], [260.1066998545607, 50.57630274949792, 300.5214951353872]), ([1, 305], [259.3063715473159, 50.844386577905084, 299.5968136118937]), ([1, 306], [259.3063715473159, 51.268089799387624, 299.5968136118937]), ([1, 307], [259.3063715473159, 51.691793020870165, 299.5968136118937]), ([1, 308], [258.5109532296861, 51.95563275694672, 298.67780498118236]), ([1, 309], [257.72039985589504, 52.21785879433167, 297.7644171983653]), ([1, 310], [258.5109532296861, 52.80043979364504, 298.67780498118236]), ([1, 311], [258.5109532296861, 53.2228433119942, 298.67780498118236]), ([1, 312], [257.72039985589504, 53.48119408774292, 297.7644171983653]), ([1, 313], [252.3190741104122, 52.77261680740647, 291.5238455804355]), ([1, 314], [250.0729102459278, 52.711446767524, 288.9286778156245]), ([1, 315], [248.59755384329696, 52.80666993403367, 287.22408384621076]), ([1, 316], [248.59755384329696, 53.21287508737239, 287.22408384621076]), ([1, 317], [329.1975420034284, 71.00339141250417, 380.34751728072445]), ([1, 318], [329.1975420034284, 71.54129589290193, 380.34751728072445]), ([1, 319], [329.1975420034284, 72.07920037329968, 380.34751728072445]), ([1, 320], [329.1975420034284, 72.61710485369744, 380.34751728072445]), ([1, 321], [329.1975420034284, 73.1550093340952, 380.34751728072445]), ([1, 322], [329.1975420034284, 73.69291381449297, 380.34751728072445]), ([1, 323], [329.1975420034284, 74.23081829489072, 380.34751728072445]), ([1, 324], [329.1975420034284, 74.76872277528848, 380.34751728072445]), ([1, 325], [329.1975420034284, 75.30662725568624, 380.34751728072445]), ([1, 326], [329.1975420034284, 75.844531736084, 380.34751728072445]), ([1, 327], [329.1975420034284, 76.38243621648175, 380.34751728072445]), ([1, 328], [329.1975420034284, 76.92034069687952, 380.34751728072445]), ([1, 348], [164.92088209956492, 43.92500618011288, 190.54591863770148]), ([1, 349], [164.92088209956492, 44.194484745635044, 190.54591863770148]), ([1, 352], [165.89482431668833, 45.26868572040352, 191.67118981075876]), ([1, 353], [165.89482431668833, 45.53975569477719, 191.67118981075876]), ([1, 354], [166.88033812451025, 46.082969187977504, 192.80983054230782]), ([1, 361], [278.13389687418373, 79.98621870891559, 321.34971757051306]), ([1, 362], [276.31006804222187, 79.9132059533877, 319.2425063077556]), ([1, 363], [277.2189827397292, 80.62905053541144, 320.29264613113634]), ([1, 364], [277.2189827397292, 81.08202272943059, 320.29264613113634]), ([1, 365], [277.2189827397292, 81.53499492344976, 320.29264613113634]), ([1, 366], [277.2189827397292, 81.98796711746893, 320.29264613113634]), ([1, 367], [278.13389687418373, 82.71302161944679, 321.34971757051306]), ([1, 368], [279.0548700426413, 83.44287780686824, 322.4137894829982]), ([1, 369], [279.9819626341451, 84.17758353706323, 323.48493164074904]), ([1, 376], [243.56812356323027, 76.01554183100814, 281.41319197648977]), ([1, 377], [242.16830676114273, 75.9743707485938, 279.79587478122255]), ([1, 378], [242.16830676114273, 76.37007059624273, 279.79587478122255]), ([1, 379], [242.16830676114273, 76.76577044389165, 279.79587478122255]), ([1, 380], [242.86619813509415, 77.38383764108393, 280.6022029506209]), ([1, 381], [245.69845700547427, 78.68774113247215, 283.8745318480042]), ([1, 382], [252.3190741104122, 81.22035555514903, 291.5238455804355]), ([1, 383], [263.35803360274275, 85.204069695005, 304.27801382457955]), ([1, 384], [265.0143734367222, 86.17297436913027, 306.19171202473416]), ([1, 385], [266.69167959771414, 87.1541436593837, 308.12963425273875]), ([1, 386], [267.5383198504053, 87.86797759792724, 309.1078235678268]), ([1, 387], [268.3903527161709, 88.58635824945512, 310.09224338810657]), ([1, 388], [268.3903527161709, 89.02490457742272, 310.09224338810657]), ([1, 389], [267.5383198504053, 89.1794399501351, 309.1078235678268]), ([1, 390], [263.35803360274275, 88.21633478523245, 304.27801382457955]), ([1, 391], [261.72226941887476, 88.09605800700686, 302.3880882728741]), ([1, 392], [260.1066998545607, 87.97726612727789, 300.5214951353872]), ([1, 393], [257.72039985589504, 87.59124700984667, 297.7644171983653]), ([1, 394], [257.72039985589504, 88.0123587743171, 297.7644171983653]), ([1, 395], [255.37748712993235, 87.6295298975258, 295.0574679511074]), ([1, 396], [253.8390685327641, 87.51641088302814, 293.28001332489595]), ([1, 397], [253.0767890476807, 87.66712300344494, 292.39929256416053]), ([1, 398], [251.56588284441096, 87.55479255859402, 290.653625145867]), ([1, 399], [251.56588284441096, 87.96584792271886, 290.653625145867]), ([1, 400], [251.56588284441096, 88.37690328684373, 290.653625145867]), ([1, 401], [251.56588284441096, 88.78795865096858, 290.653625145867]), ([1, 402], [252.3190741104122, 89.46607693130629, 291.5238455804355]), ([1, 403], [253.0767890476807, 90.14826799410848, 292.39929256416053]), ([1, 404], [253.0767890476807, 90.56179215921908, 292.39929256416053]), ([1, 405], [253.0767890476807, 90.97531632432967, 292.39929256416053]), ([1, 406], [252.3190741104122, 91.11522120653774, 291.5238455804355]), ([1, 407], [252.3190741104122, 91.5275072753456, 291.5238455804355]), ([1, 408], [252.3190741104122, 91.93979334415346, 291.5238455804355]), ([1, 409], [251.56588284441096, 92.07640156396741, 290.653625145867]), ([1, 410], [251.56588284441096, 92.48745692809227, 290.653625145867]), ([1, 411], [252.3190741104122, 93.17665155057705, 291.5238455804355]), ([1, 412], [253.0767890476807, 93.8699854801038, 292.39929256416053]), ([1, 413], [263.35803360274275, 98.11377722455121, 304.27801382457955]), ([1, 414], [265.0143734367222, 99.16387502779313, 306.19171202473416]), ([1, 415], [264.18360737579206, 99.28468904645781, 305.23186339769734]), ([1, 416], [260.9119837550392, 98.48148406440207, 301.4519022410695]), ([1, 417], [259.3063715473159, 98.29914738394983, 299.5968136118937]), ([1, 418], [259.3063715473159, 98.72285060543237, 299.5968136118937]), ([1, 423], [244.27411812428312, 94.99549038166566, 282.2288823880158]), ([1, 424], [240.78448786536478, 94.03185065330422, 278.19704121104417]), ([1, 425], [239.41639418431157, 93.88878203306336, 276.6163762041632]), ([1, 426], [238.73816077302456, 94.012903180227, 275.83276040755084]), ([1, 427], [236.06322339741646, 93.34526153950128, 272.74219726572954]), ([1, 428], [232.80268163778362, 92.43635888559056, 268.9750398449322]), ([1, 429], [231.52354602438922, 92.30677325155386, 267.4971550106194]), ([1, 430], [230.2583900351849, 92.17860385395474, 266.03542192312966]), ([1, 431], [229.6309829778683, 92.3026500205157, 265.31052976530094]), ([1, 432], [229.6309829778683, 92.67786404498933, 265.31052976530094]), ([1, 433], [252.3190741104122, 102.24694506435004, 291.5238455804355]), ([1, 434], [252.3190741104122, 102.6592311331579, 291.5238455804355]), ([1, 435], [252.3190741104122, 103.07151720196576, 291.5238455804355]), ([1, 436], [251.56588284441096, 103.17489639533848, 290.653625145867]), ([1, 437], [251.56588284441096, 103.58595175946334, 290.653625145867]), ([1, 438], [251.56588284441096, 103.99700712358819, 290.653625145867]), ([1, 439], [250.81717485975497, 104.09732420649962, 289.7885845948377]), ([1, 440], [250.0729102459278, 104.19704593580326, 288.9286778156245]), ([1, 441], [249.33304956472685, 104.29617759570273, 288.07385924220546]), ([1, 442], [248.59755384329696, 104.39472440805118, 287.22408384621076]), ([1, 443], [248.59755384329696, 104.80092956138989, 287.22408384621076]), ([1, 444], [249.33304956472685, 105.51839842690238, 288.07385924220546]), ([1, 445], [250.0729102459278, 106.24012526787783, 288.9286778156245]), ([1, 446], [251.56588284441096, 107.28545003658702, 290.653625145867]), ([1, 447], [253.0767890476807, 108.34333125897442, 292.39929256416053]), ([1, 448], [253.8390685327641, 109.08443631391658, 293.28001332489595]), ([1, 449], [256.9346669295051, 110.83456220488455, 296.85659885324833]), ([1, 450], [262.53760359151926, 113.68049828717744, 303.33010723945625]), ([1, 451], [266.69167959771414, 115.91501106698034, 308.12963425273875]), ([1, 452], [287.62652134087944, 125.48411960459936, 332.31728472309027]), ([1, 453], [288.6115436742386, 126.38544722989533, 333.45535761597756]), ([1, 454], [291.60751125563206, 128.17388975125004, 336.91683191648946]), ([1, 455], [288.6115436742386, 127.32862220922291, 333.45535761597756]), ([1, 456], [287.62652134087944, 127.36403150878812, 332.31728472309027]), ([1, 457], [270.979327179671, 120.43525652429821, 313.08348689345803]), ([1, 458], [263.35803360274275, 117.47833851887053, 304.27801382457955]), ([1, 459], [261.72226941887476, 117.17631016465961, 302.3880882728741]), ([1, 460], [261.72226941887476, 117.60396093168391, 302.3880882728741]), ([1, 461], [261.72226941887476, 118.03161169870823, 302.3880882728741]), ([1, 462], [260.9119837550392, 118.09251552311416, 301.4519022410695]), ([1, 463], [260.1066998545607, 118.15304339798674, 300.5214951353872]), ([1, 464], [259.3063715473159, 118.21319879362932, 299.5968136118937]), ([1, 465], [259.3063715473159, 118.63690201511186, 299.5968136118937]), ([1, 466], [260.1066998545607, 119.42807624041104, 300.5214951353872]), ([1, 467], [260.1066998545607, 119.85308718788582, 300.5214951353872]), ([1, 468], [260.1066998545607, 120.2780981353606, 300.5214951353872]), ([1, 469], [259.3063715473159, 120.33171490104203, 299.5968136118937]), ([1, 470], [258.5109532296861, 120.38500272951069, 298.67780498118236]), ([1, 471], [255.37748712993235, 119.3430740509161, 295.0574679511074]), ([1, 472], [253.0767890476807, 118.68143538673915, 292.39929256416053]), ([1, 473], [250.81717485975497, 118.03161169870823, 289.7885845948377]), ([1, 474], [247.13950367412806, 116.7047656238938, 285.53948511397493]), ([1, 475], [242.16830676114273, 114.75295581818855, 279.79587478122255]), ([1, 476], [239.41639418431157, 113.84014821508933, 276.6163762041632]), ([1, 477], [238.06375918892, 113.58597660647816, 275.05357181882897]), ([1, 478], [238.06375918892, 113.97496967704829, 275.05357181882897]), ([1, 479], [238.06375918892, 114.36396274761842, 275.05357181882897]), ([1, 480], [238.73816077302456, 115.07803501314093, 275.83276040755084]), ([1, 481], [238.73816077302456, 115.46813004708378, 275.83276040755084]), ([1, 482], [238.73816077302456, 115.85822508102663, 275.83276040755084]), ([1, 483], [239.41639418431157, 116.578571024387, 276.6163762041632]), ([1, 484], [239.41639418431157, 116.96977428285811, 276.6163762041632]), ([1, 485], [239.41639418431157, 117.3609775413292, 276.6163762041632]), ([1, 486], [239.41639418431157, 117.7521807998003, 276.6163762041632]), ([1, 487], [239.41639418431157, 118.1433840582714, 276.6163762041632]), ([1, 488], [238.73816077302456, 118.19879528468374, 275.83276040755084]), ([1, 489], [237.39315705035963, 117.92078389429629, 274.27877302497313]), ([1, 490], [235.40382891865272, 117.31726768004752, 271.9803475526968]), ([1, 491], [234.09602986910465, 117.04801493455233, 270.4693456218485]), ([1, 492], [234.09602986910465, 117.43052478727962, 270.4693456218485]), ([1, 493], [234.09602986910465, 117.81303464000692, 270.4693456218485]), ([1, 494], [234.09602986910465, 118.19554449273421, 270.4693456218485]), ([1, 495], [234.09602986910465, 118.57805434546151, 270.4693456218485]), ([1, 496], [234.09602986910465, 118.9605641981888, 270.4693456218485]), ([1, 497], [234.09602986910465, 119.3430740509161, 270.4693456218485]), ([1, 498], [234.09602986910465, 119.7255839036434, 270.4693456218485]), ([1, 499], [234.09602986910465, 120.10809375637069, 270.4693456218485]), ([1, 500], [234.09602986910465, 120.49060360909797, 270.4693456218485]), ([1, 501], [234.09602986910465, 120.87311346182527, 270.4693456218485]), ([1, 502], [234.09602986910465, 121.25562331455257, 270.4693456218485]), ([1, 503], [234.09602986910465, 121.63813316727986, 270.4693456218485]), ([1, 504], [234.09602986910465, 122.02064302000716, 270.4693456218485]), ([1, 505], [234.09602986910465, 122.40315287273445, 270.4693456218485]), ([1, 506], [234.09602986910465, 122.78566272546175, 270.4693456218485]), ([1, 507], [234.09602986910465, 123.16817257818904, 270.4693456218485]), ([1, 508], [234.09602986910465, 123.55068243091634, 270.4693456218485]), ([1, 509], [234.09602986910465, 123.93319228364363, 270.4693456218485]), ([1, 510], [234.09602986910465, 124.31570213637093, 270.4693456218485]), ([1, 511], [234.09602986910465, 124.69821198909823, 270.4693456218485]), ([1, 512], [234.09602986910465, 125.08072184182552, 270.4693456218485]), ([1, 513], [234.09602986910465, 125.46323169455282, 270.4693456218485]), ([1, 514], [232.16135193630214, 124.80569409647615, 268.234061773734]), ([1, 515], [229.00698574151542, 123.48415897826811, 264.58957723876483]), ([1, 516], [227.76911014291264, 123.18884878644458, 263.15936330774446]), ([1, 517], [227.76911014291264, 123.56102053504411, 263.15936330774446]), ([1, 518], [227.76911014291264, 123.93319228364363, 263.15936330774446]), ([1, 519], [228.38637060400453, 124.6422349374796, 263.87253231399853]), ([1, 520], [229.00698574151542, 125.35513108399945, 264.58957723876483]), ([1, 521], [229.00698574151542, 125.72932550514572, 264.58957723876483]), ([1, 522], [230.2583900351849, 126.79261019911326, 266.03542192312966]), ([1, 523], [230.8892349393909, 127.51725720508843, 266.7642860927821]), ([1, 524], [231.52354602438922, 128.2458857880195, 267.4971550106194]), ([1, 525], [232.16135193630214, 128.9785288535012, 268.234061773734]), ([1, 526], [232.80268163778362, 129.71521967072584, 268.9750398449322]), ([1, 527], [236.72632233954403, 132.28823895445106, 273.5083270333299]), ([1, 528], [236.72632233954403, 132.67504667069215, 273.5083270333299]), ([1, 529], [236.72632233954403, 133.06185438693325, 273.5083270333299]), ([1, 530], [236.06322339741646, 133.07485632697495, 272.74219726572954]), ([1, 531], [234.74810794673448, 132.71706756465707, 271.2227421277589]), ([1, 532], [234.09602986910465, 132.73091889637143, 270.4693456218485]), ([1, 533], [235.40382891865272, 133.85707918903782, 271.9803475526968]), ([1, 534], [235.40382891865272, 134.24172596831667, 271.9803475526968]), ([1, 535], [236.72632233954403, 135.38270068437976, 273.5083270333299]), ([1, 536], [237.39315705035963, 136.15195772005922, 274.27877302497313]), ([1, 537], [238.06375918892, 136.925560840686, 275.05357181882897]), ([1, 538], [238.73816077302456, 137.70354698182626, 275.83276040755084]), ([1, 539], [238.73816077302456, 138.09364201576912, 275.83276040755084]), ([1, 540], [238.06375918892, 138.0925400523964, 275.05357181882897]), ([1, 541], [236.72632233954403, 137.70354698182626, 273.5083270333299]), ([1, 542], [236.06322339741646, 137.70354698182626, 272.74219726572954]), ([1, 543], [234.74810794673448, 137.319971642044, 271.2227421277589]), ([1, 544], [234.74810794673448, 137.70354698182626, 271.2227421277589]), ([1, 545], [234.74810794673448, 138.08712232160852, 271.2227421277589]), ([1, 546], [234.74810794673448, 138.47069766139074, 271.2227421277589]), ([1, 547], [233.44756441240352, 138.08499725047398, 269.720123057799]), ([1, 548], [234.09602986910465, 138.85107654000814, 270.4693456218485]), ([1, 549], [236.06322339741646, 140.40361653048953, 272.74219726572954]), ([1, 550], [239.41639418431157, 142.78918934195053, 276.6163762041632]), ([1, 551], [240.78448786536478, 143.99856627242403, 278.19704121104417]), ([1, 552], [250.81717485975497, 150.40833851884, 289.7885845948377]), ([1, 553], [250.81717485975497, 150.81817050390495, 289.7885845948377]), ([1, 554], [242.86619813509415, 146.43403122851265, 280.6022029506209]), ([1, 555], [241.47441476469248, 145.98943376296768, 278.99416740362597]), ([1, 556], [241.47441476469248, 146.38399980016487, 278.99416740362597]), ([1, 561], [257.72039985589504, 158.33802344087667, 297.7644171983653]), ([1, 562], [257.72039985589504, 158.7591352053471, 297.7644171983653]), ([1, 563], [258.5109532296861, 159.6685299359826, 298.67780498118236]), ([1, 564], [258.5109532296861, 160.09093345433175, 298.67780498118236]), ([1, 565], [260.1066998545607, 161.50416004041352, 300.5214951353872]), ([1, 566], [260.1066998545607, 161.92917098788828, 300.5214951353872]), ([1, 567], [260.9119837550392, 162.85682646147873, 301.4519022410695]), ([1, 568], [260.9119837550392, 163.2831532323203, 301.4519022410695]), ([1, 569], [262.53760359151926, 164.7294767633062, 303.33010723945625]), ([1, 570], [264.18360737579206, 166.19393601254893, 305.23186339769734]), ([1, 571], [265.8503809239043, 167.6768742428547, 307.15761647907084]), ([1, 576], [262.53760359151926, 167.73235785013728, 303.33010723945625]), ([1, 577], [262.53760359151926, 168.16134086254172, 303.33010723945625]), ([1, 578], [259.3063715473159, 166.51536604263913, 299.5968136118937]), ([1, 579], [263.35803360274275, 169.54749222137357, 304.27801382457955]), ([1, 580], [263.35803360274275, 169.9778158056918, 304.27801382457955]), ([1, 581], [264.18360737579206, 170.94233418433606, 305.23186339769734]), ([1, 582], [264.18360737579206, 171.3740067454076, 305.23186339769734]), ([1, 583], [266.69167959771414, 173.4367458821736, 308.12963425273875]), ([1, 584], [267.5383198504053, 174.4244928436466, 309.1078235678268]), ([1, 585], [267.5383198504053, 174.86164696104922, 309.1078235678268]), ([1, 586], [267.5383198504053, 175.29880107845185, 309.1078235678268]), ...]}
# No need to use the code below
# p3p part
#d = (f - Z' * b ) / ( Z' * a)
#Ix = X' * ( d * a + b ) + Cx
#Iy = Y' * ( d * a + b ) + Cy
# Height = 370
# Width = 1226
# def find_impts(X, Y, Z):
# f = 7.070912e+02
# baseline = 0.53790448812
# a = -1/baseline
# b = 0
# d = (f - Z * b) / (Z * a)
# Ix = X * (d*a + b) + 0.5*Width
# Iy = Y * (d*a + b) + 0.5*Height
# return (int(Iy), int(Ix))
# inv_c = []
# hold_pts = []
# for c in combination:
# inv_c.append(np.linalg.inv(c))
# for i, pt in enumerate(final_output):
# pose_num = int(i/304696)
# temp_pt = np.array([pt[0], pt[1], pt[2], 1]).T
# out_pt = np.matmul(inv_c[pose_num], temp_pt)
# hold_pts.append(find_impts(out_pt[0], out_pt[1], out_pt[2]))
# Correct R|t Matrix
Q = np.array([ [-9.1e-01, 5.5e-02, -4.2e-01, -1.9e+02],
[4.2e-02, 9.983072e-01, 4.2e-02, 1.7e+00],
[4.2e-01, 2.1e-02, -9.2e-01, 5.5e+01] ])
row = [0,0,0,1]
row = np.array(row)
Q=np.vstack((Q,row))
Q=np.linalg.inv(Q)
Q = Q[:3, :]
# Calibration Matrix as given
cal_mat = [[7.070912e+02, 0.000000e+00, 6.018873e+02],
[0.000000e+00, 7.070912e+02, 1.831104e+02],
[0.000000e+00, 0.000000e+00, 1.000000e+00] ]
cal_mat = np.array(cal_mat)
# Correct projection matrix, the one we should be getting after GN
P = np.matmul(cal_mat, Q) # 3x4 matrix
print("Correct projection matrix: \n", P)
Correct projection matrix: [[-8.88191631e+02 5.41139423e+01 -2.46276119e+02 -1.55303217e+05] [-3.62607430e+01 7.13441345e+02 -1.49909078e+02 1.42607815e+02] [-4.12056509e-01 4.15693433e-02 -8.96946037e-01 -2.90293725e+01]]
# getting actual 2D points from the 3D points
pts_3d = [] # 3D points from the point cloud
actual_pts_2d = [] # actual 2D pixel values
for i in range(0, 10000, 100): #taking random 100 points and storing them in arrays
pt_3d = Pixel_Point_Map_alt[0][i][1]
pt_3d = np.append(pt_3d, 1) # 1x4
pts_3d.append(pt_3d)
actual_pt_2d = np.matmul(P, pt_3d)#3x4 multiplied with 4x1 gives us a 3x1 point (homogeneous)
actual_pt_2d = actual_pt_2d/actual_pt_2d[2] # last element becomes 1
actual_pts_2d.append(actual_pt_2d)
pts_3d = np.array(pts_3d) # 100x4
actual_pts_2d = np.array(actual_pts_2d) # 100x3
P_est = np.array([ [-8.8e+02,5.4e+01,-2.4e+02,-1.5e+05],
[-3.6e+01,7.1e+02,-1.4e+02,1.4e+02],
[-4.1e-01,4.1e-02,-8.9e-01,-2.9e+01] ])
print("Running Gauss newton: \n ")
sum_sq_error = 10000
while True: # number of iterations for the algorithm, to be updated later
prev_error = sum_sq_error
pts_2d = [] # corresponding 2D location estimated based on our P matrix
J = []
for pt_3d in pts_3d:
pt_2d = np.matmul(P_est, pt_3d)
pt_2d = pt_2d/pt_2d[2]
pts_2d.append(pt_2d)
error = actual_pts_2d - pts_2d # 100 x 3
error = np.delete(error, 2, axis=1) # 100 x 2 i.e. 100 points and 2 coordinates for each
# print("error:", error)
sum_sq_error = 0
for obj in error:
sq_error = np.matmul(obj.T, obj)
sum_sq_error = sum_sq_error + sq_error
print("squared sum error:", sum_sq_error)
if(abs(sum_sq_error - prev_error) < 0.0001):
break
#calculating J
for pt_3d in pts_3d:
X = P_est[0][0]*pt_3d[0] + P_est[0][1]*pt_3d[1] + P_est[0][2]*pt_3d[2] + P_est[0][3]
Y = P_est[1][0]*pt_3d[0] + P_est[1][1]*pt_3d[1] + P_est[1][2]*pt_3d[2] + P_est[1][3]
Z = P_est[2][0]*pt_3d[0] + P_est[2][1]*pt_3d[1] + P_est[2][2]*pt_3d[2] + P_est[2][3]
X1 = pt_3d[0]
Y1 = pt_3d[1]
Z1 = pt_3d[2]
J1 = X1/Z
J2 = Y1/Z
J3 = Z1/Z
J4 = 1/Z
J5 = 0
J6 = 0
J7 = 0
J8 = 0
J9 = (-X*X1)/(Z*Z)
J10 = (-X*Y1)/(Z*Z)
J11 = (-X*Z1)/(Z*Z)
J12 = -1/(Z*Z)
J13 = 0
J14 = 0
J15 = 0
J16 = 0
J17 = J1
J18 = J2
J19 = J3
J20 = J4
J21 = (-Y*X1)/(Z*Z)
J22 = (-Y*Y1)/(Z*Z)
J23 = (-Y*Z1)/(Z*Z)
J24 = J12
J = np.append(J, J1)
J = np.append(J, J2)
J = np.append(J, J3)
J = np.append(J, J4)
J = np.append(J, J5)
J = np.append(J, J6)
J = np.append(J, J7)
J = np.append(J, J8)
J = np.append(J, J9)
J = np.append(J, J10)
J = np.append(J, J11)
J = np.append(J, J12)
J = np.append(J, J13)
J = np.append(J, J14)
J = np.append(J, J15)
J = np.append(J, J16)
J = np.append(J, J17)
J = np.append(J, J18)
J = np.append(J, J19)
J = np.append(J, J20)
J = np.append(J, J21)
J = np.append(J, J22)
J = np.append(J, J23)
J = np.append(J, J24)
J = J.reshape(200,12)
JTJ = np.matmul(J.T, J)
JTJ = np.linalg.pinv(JTJ) # 12 x 12
error = np.reshape(error, (200,1))
e = np.matmul(J.T, error) # 12x1
delP = np.matmul(JTJ, e)
delP = delP.reshape(3,4)
P_est = P_est + delP
print("Predicted projection matrix after Gauss Newton: \n")
print(P_est)
Running Gauss newton: squared sum error: 32645.978847411752 squared sum error: 706.196939784812 squared sum error: 211.25944127999875 squared sum error: 87.50098466547279 squared sum error: 34.541663211769595 squared sum error: 14.152836373888634 squared sum error: 5.940890759024705 squared sum error: 2.6168313721759913 squared sum error: 1.345465510770324 squared sum error: 0.7974659759632362 squared sum error: 0.6061518468055369 squared sum error: 0.5121805798971303 squared sum error: 0.48593394347171415 squared sum error: 0.4683356770052628 squared sum error: 0.4658225899515666 squared sum error: 0.461971068778703 squared sum error: 0.4622343288904261 squared sum error: 0.4612024123619762 squared sum error: 0.4615088769808321 squared sum error: 0.461177527159591 squared sum error: 0.4613318525179309 squared sum error: 0.46121244635145436 squared sum error: 0.46127911815405037 Predicted projection matrix after Gauss Newton: [[-8.35009190e+02 5.27761395e+01 -2.48564166e+02 -1.50002610e+05] [-3.71030542e+01 6.84481189e+02 -1.42073396e+02 2.09148375e+02] [-3.80680000e-01 4.05996313e-02 -8.71207964e-01 -2.86543676e+01]]