如何修改Python脚本实现物体与双IR相机的动态距离计算?
基于透视成像模型的距离计算修正方案
你前任助理的线性公式是小偏移场景下的近似简化(假设物体偏离中心的距离远小于12.5cm,此时直线距离≈垂直距离+偏移量),但当物体偏离较大时误差会明显增大。要适配任意位置的距离计算,需要基于小孔成像模型推导准确的逻辑。
第一步:明确关键参数
先确认以下核心参数(从相机手册获取或通过简单标定得到):
pixel_size:你给出的0.0264583333cm(单像素的物理尺寸)focal_length:相机的光学焦距(比如8mm焦距需转换为0.8cm,统一单位为cm)center_x/center_y:两台相机画面的中心像素坐标(比如前置相机宽度为640像素,则center_x=320)
第二步:距离计算逻辑推导
假设相机光轴指向原“中心位置”(物体在光轴上时,到相机的垂直距离为12.5cm)。当物体偏离光轴时:
- 计算像素相对于中心的偏移量:
dx = val_x - center_x(前置相机)、dy = val_2x - center_y(侧置相机) - 计算偏移对应的视场角正切值:
tanθ = (dx * pixel_size) / focal_length,θ为视线与光轴的夹角 - 若要计算物体到相机的直线距离:
垂直距离(沿光轴)为12.5cm,直线距离为斜边,公式为:distance = 12.5 / math.cos(θ) - 若物体在固定平面上移动(比如原中心所在的平面),直线距离也可简化为:
distance = sqrt(12.5² + (dx*pixel_size)²)
第三步:Python函数实现
以计算直线距离为例,替换原固定值的代码:
import math # 相机参数(根据实际情况修改) PIXEL_SIZE = 0.0264583333 # cm FOCAL_LENGTH = 0.8 # 示例:8mm焦距转cm CENTER_X = 320 # 前置相机中心x像素 CENTER_Y = 240 # 侧置相机中心y像素 def calculate_distance(val, center_pixel): # val: 物体在画面中的像素位置 # center_pixel: 对应相机的中心像素坐标 dx = val - center_pixel tan_theta = abs(dx) * PIXEL_SIZE / FOCAL_LENGTH theta = math.atan(tan_theta) return 12.5 / math.cos(theta) # 替换原代码中的距离计算 distance_back = calculate_distance(int(val_x), CENTER_X) distance_side = calculate_distance(int(val_2x), CENTER_Y)
补充说明
如果你的最终目标是定位最高温区域的三维坐标,需要对两台相机做外参标定(确定它们的相对位置和姿态),然后通过三角测量联立两台相机的成像方程求解空间坐标,这是更精准的定位方案。
内容的提问来源于stack exchange,提问作者Feliaria
相关产品推荐
相关产品推荐

