87 lines
3.5 KiB
Python
87 lines
3.5 KiB
Python
# RozK
|
|
|
|
import math
|
|
|
|
print("\n--- sensor size (millimeters) ---\n")
|
|
|
|
# https://www.sony-semicon.com/files/62/pdf/p-13_IMX677-AAPH5-J_Flyer.pdf
|
|
|
|
sensor_total_array_width = 5700 # p
|
|
sensor_total_array_height = 5160 # p
|
|
sensor_total_array_diagonal = math.hypot(sensor_total_array_width, sensor_total_array_height)
|
|
|
|
sensor_pixel_size = 1.12 * 0.001 # mm
|
|
|
|
sensor_total_width = sensor_total_array_width * sensor_pixel_size
|
|
sensor_total_height = sensor_total_array_height * sensor_pixel_size
|
|
sensor_total_diagonal = math.hypot(sensor_total_width, sensor_total_height)
|
|
|
|
# sensor_total_diagonal = 8.35 # mm
|
|
# sensor_total_width = sensor_total_diagonal * (sensor_total_array_width / sensor_total_array_diagonal)
|
|
# sensor_total_height = sensor_total_diagonal * (sensor_total_array_height / sensor_total_array_diagonal)
|
|
|
|
print("sensor total: width = %.6f, height = %.6f, diagonal = %.6f" % (
|
|
sensor_total_width,
|
|
sensor_total_height,
|
|
sensor_total_diagonal))
|
|
|
|
sensor_active_array_width = 5599 # p
|
|
sensor_active_array_height = 4927 # p
|
|
sensor_active_array_diagonal = math.hypot(sensor_active_array_width, sensor_active_array_height)
|
|
|
|
sensor_active_width = (sensor_active_array_width / sensor_total_array_width) * sensor_total_width
|
|
sensor_active_height = (sensor_active_array_height / sensor_total_array_height) * sensor_total_height
|
|
sensor_active_diagonal = (sensor_active_array_diagonal / sensor_total_array_diagonal) * sensor_total_diagonal
|
|
|
|
print("sensor active: width = %.6f, height = %.6f, diagonal = %.6f" % (
|
|
sensor_active_width,
|
|
sensor_active_height,
|
|
sensor_active_diagonal))
|
|
|
|
# https://community.gopro.com/s/article/HERO11-Black-Video-Settings-And-Resolutions
|
|
|
|
gopro_array_width = 5312 # p
|
|
gopro_array_height = 4648 # p
|
|
gopro_array_diagonal = math.hypot(gopro_array_width, gopro_array_height)
|
|
|
|
gopro_sensor_width = (gopro_array_width / sensor_total_array_width) * sensor_total_width
|
|
gopro_sensor_height = (gopro_array_height / sensor_total_array_height) * sensor_total_height
|
|
gopro_sensor_diagonal = (gopro_array_diagonal / sensor_total_array_diagonal) * sensor_total_diagonal
|
|
|
|
print("gopro active: width = %.6f, height = %.6f, diagonal = %.6f" % (
|
|
gopro_sensor_width,
|
|
gopro_sensor_height,
|
|
gopro_sensor_diagonal))
|
|
|
|
# https://thinglabs.io/gopro-focal-length-guide
|
|
|
|
gopro_focal_length = 2.92 # mm
|
|
|
|
print("\n--- fisheye field of view (degrees) ---\n")
|
|
|
|
# https://en.wikipedia.org/wiki/Fisheye_lens
|
|
|
|
equidistant_angle = lambda length: math.degrees(length / gopro_focal_length)
|
|
|
|
gopro_fov_width = 2.0 * equidistant_angle(gopro_sensor_width * 0.5)
|
|
gopro_fov_height = 2.0 * equidistant_angle(gopro_sensor_height * 0.5)
|
|
gopro_fov_diagonal = 2.0 * equidistant_angle(gopro_sensor_diagonal * 0.5)
|
|
|
|
print("gopro fov: width = %.6f, height = %.6f, diagonal = %.6f" % (
|
|
gopro_fov_width,
|
|
gopro_fov_height,
|
|
gopro_fov_diagonal))
|
|
|
|
print("\n--- rectilinear focal length (mm) ---\n")
|
|
|
|
rectilinear_focal_length = lambda length: length * math.tan(math.radians(90.0 - equidistant_angle(length)))
|
|
|
|
rectilinear_focal_length_width = rectilinear_focal_length(gopro_sensor_width * 0.5)
|
|
rectilinear_focal_length_height = rectilinear_focal_length(gopro_sensor_height * 0.5)
|
|
rectilinear_focal_length_diagonal = rectilinear_focal_length(gopro_sensor_diagonal * 0.5)
|
|
|
|
print("rectilinear focal length: width = %.6f, height = %.6f, diagonal = %.6f" % (
|
|
rectilinear_focal_length_width,
|
|
rectilinear_focal_length_height,
|
|
rectilinear_focal_length_diagonal))
|