You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.2 KiB

import math
import model
import calc_way
from scipy import stats
model = model.Model()
alpha = model.alpha
beta = model.beta
3 months ago
q = model.q
"""
计算地面点的竖直垂线在图像中的斜率
参数点在图像中的坐标xy相机的外部偏转角参数alphabeta
返回值斜率k
"""
def get_k(alpha,beta,x,y):
gamma = math.atan(1 / (math.tan(alpha) * math.tan(beta)))
seta = math.atan(1 / math.sqrt(pow(math.tan(beta), 2) + 1 / pow(math.tan(alpha), 2)))
Xw,Yw = calc_way.calc_distance(x,y,alpha,beta)
u = Xw * math.cos(gamma) - Yw * math.sin(gamma)
v = Xw * math.sin(gamma) + Yw * math.cos(gamma)
tanlamda = -v/u/math.sqrt(1+(math.tan(math.pi/2-seta))**2)
lamda = math.atan(tanlamda)
k = math.tan(math.pi/2-lamda)
return k
def get_k2(alpha,beta,Xw,Yw):
gamma = math.atan(1 / (math.tan(alpha) * math.tan(beta)))
seta = math.atan(1 / math.sqrt(pow(math.tan(beta), 2) + 1 / pow(math.tan(alpha), 2)))
u = Xw * math.cos(gamma) - Yw * math.sin(gamma)
v = Xw * math.sin(gamma) + Yw * math.cos(gamma)
tanlamda = -v / u / math.sqrt(1 + (math.tan(math.pi / 2 - seta)) ** 2)
lamda = math.atan(tanlamda)
k = math.tan(math.pi / 2 - lamda)
return k
"""
计算地面点的竖直垂线在图像中的截距
参数点在图像中的坐标xy斜率k
返回值截距b
"""
def get_b(x,y,k):
b = y - x * k
return b
"""
将检测到的路沿上侧数据点拟合为一条直线
参数上侧数据点坐标x_top,y_top
返回值拟合出直线的斜率slope截距interceptr方值
"""
def linear_regression(x, y):
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
return slope, intercept, abs(r_value)
"""
计算图像中两条直线的交点
参数 line1: 第一条直线的系数 (A1, B1, C1)
line2: 第二条直线的系数 (A2, B2, C2)
返回值交点在图像中的二维坐标xy
"""
def find_intersection(line1, line2):
A1, B1, C1 = line1
A2, B2, C2 = line2
# 计算行列式
denominator = A1 * B2 - A2 * B1
if denominator == 0:
# 直线平行或重合
return None
else:
x = (B1 * C2 - B2 * C1) / denominator
y = (A2 * C1 - A1 * C2) / denominator
return (x, y)