in opensfm/io.py [0:0]
def camera_from_json(key: str, obj: Dict[str, Any]) -> pygeometry.Camera:
"""
Read camera from a json object
"""
camera = None
pt = obj.get("projection_type", "perspective")
if pt == "perspective":
camera = pygeometry.Camera.create_perspective(
obj["focal"], obj.get("k1", 0.0), obj.get("k2", 0.0)
)
elif pt == "brown":
camera = pygeometry.Camera.create_brown(
obj["focal_x"],
obj["focal_y"] / obj["focal_x"],
np.array([obj.get("c_x", 0.0), obj.get("c_y", 0.0)]),
np.array(
[
obj.get("k1", 0.0),
obj.get("k2", 0.0),
obj.get("k3", 0.0),
obj.get("p1", 0.0),
obj.get("p2", 0.0),
]
),
)
elif pt == "fisheye":
camera = pygeometry.Camera.create_fisheye(
obj["focal"], obj.get("k1", 0.0), obj.get("k2", 0.0)
)
elif pt == "fisheye_opencv":
camera = pygeometry.Camera.create_fisheye_opencv(
obj["focal_x"],
obj["focal_y"] / obj["focal_x"],
np.array([obj.get("c_x", 0.0), obj.get("c_y", 0.0)]),
np.array(
[
obj.get("k1", 0.0),
obj.get("k2", 0.0),
obj.get("k3", 0.0),
obj.get("k4", 0.0),
]
),
)
elif pt == "fisheye62":
camera = pygeometry.Camera.create_fisheye62(
obj["focal_x"],
obj["focal_y"] / obj["focal_x"],
np.array([obj.get("c_x", 0.0), obj.get("c_y", 0.0)]),
np.array(
[
obj.get("k1", 0.0),
obj.get("k2", 0.0),
obj.get("k3", 0.0),
obj.get("k4", 0.0),
obj.get("k5", 0.0),
obj.get("k6", 0.0),
obj.get("p1", 0.0),
obj.get("p2", 0.0),
]
),
)
elif pt == "fisheye624":
camera = pygeometry.Camera.create_fisheye624(
obj["focal_x"],
obj["focal_y"] / obj["focal_x"],
np.array([obj.get("c_x", 0.0), obj.get("c_y", 0.0)]),
np.array(
[
obj.get("k1", 0.0),
obj.get("k2", 0.0),
obj.get("k3", 0.0),
obj.get("k4", 0.0),
obj.get("k5", 0.0),
obj.get("k6", 0.0),
obj.get("p1", 0.0),
obj.get("p2", 0.0),
obj.get("s0", 0.0),
obj.get("s1", 0.0),
obj.get("s2", 0.0),
obj.get("s3", 0.0),
]
),
)
elif pt == "radial":
camera = pygeometry.Camera.create_radial(
obj["focal_x"],
obj["focal_y"] / obj["focal_x"],
np.array([obj.get("c_x", 0.0), obj.get("c_y", 0.0)]),
np.array(
[
obj.get("k1", 0.0),
obj.get("k2", 0.0),
]
),
)
elif pt == "simple_radial":
camera = pygeometry.Camera.create_simple_radial(
obj["focal_x"],
obj["focal_y"] / obj["focal_x"],
np.array([obj.get("c_x", 0.0), obj.get("c_y", 0.0)]),
obj.get("k1", 0.0),
)
elif pt == "dual":
camera = pygeometry.Camera.create_dual(
obj.get("transition", 0.5),
obj["focal"],
obj.get("k1", 0.0),
obj.get("k2", 0.0),
)
elif pygeometry.Camera.is_panorama(pt):
camera = pygeometry.Camera.create_spherical()
else:
raise NotImplementedError
camera.id = key
camera.width = int(obj.get("width", 0))
camera.height = int(obj.get("height", 0))
return camera