The following code sample explains how to leverage scale resolution to compute distances between objects given by their bounding boxes:
import numpy as np
def compute_pixel_distance(box1, box2):
"""Compute Euclidean distance between the centers of two bounding boxes"""
x1_center = (box1[0] + box1[2]) / 2
y1_center = (box1[1] + box1[3]) / 2
x2_center = (box2[0] + box2[2]) / 2
y2_center = (box2[1] + box2[3]) / 2
return np.sqrt((x2_center - x1_center)**2 + (y2_center - y1_center)**2)
def estimate_scale(reference_box, vehicle_type):
"""Estimate feet per pixel using a reference vehicle box"""
vehicle_lengths = {
'motorcycle': 5,
'car': 20,
'truck': 40
}
pixel_length = reference_box[2] - reference_box[0] # width in pixels
return vehicle_lengths[vehicle_type.lower()] / pixel_length
def estimate_actual_distance(landmark_box1, landmark_box2, reference_box, vehicle_type):
pixel_dist = compute_pixel_distance(landmark_box1, landmark_box2)
scale = estimate_scale(reference_box, vehicle_type)
return pixel_dist * scale
# Example inputs:
landmark_box1 = (100, 200, 180, 280)
landmark_box2 = (400, 450, 480, 530)
reference_vehicle_box = (300, 300, 340, 340) # e.g., a car seen from side view
vehicle_type = 'car'
actual_distance_feet = estimate_actual_distance(landmark_box1, landmark_box2, reference_vehicle_box, vehicle_type)
print(f"Estimated actual distance between landmarks: {actual_distance_feet:.2f} feet")
This is a continuation of previous article on agentic retrieval on the analysis side of the aerial drone image processing pipeline using modular functions for specific insights into a scene.
No comments:
Post a Comment