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.

169 lines
5.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import numpy as np
import calc_way
from scipy import stats
import calc_slope_line
import matplotlib.pyplot as plt
# 车胎横向分界线
k = 0.62849534
b = 21.8122503
"""
读取yolo网络识别路沿的坐标数据,筛选出目标区域的数据点,并将路沿上下侧数据分离
参数保存数据的txt文件路径
返回值在目标区域内的下侧数据点坐标x_bot、y_bot上侧数据点坐标x_top,y_top
"""
# def get_data(txt_name):
# with open(txt_name, 'r', encoding='utf-8') as f:
# lines = f.readlines()
# data = []
# for i, line in enumerate(lines, 1):
# data.append(line.split())
# # print(line.split())
# x_bot = []
# y_bot = []
# x_top = []
# y_top = []
# k_num = 0
# k_num2 = 0
# for i in range(len(data)):
# data[i][1] = 960 - int(data[i][1])
# for i in range(len(data)):
# if k * int(data[i][0]) + b - int(data[i][1]) < 0:
# k_num2 = i
# continue
# if i > 1:
# if (int(data[i][0]) - int(data[i-1][0]))*(int(data[i+2][0]) - int(data[i][0])) < 0:
# k_num = i
# # print(f"k_num:{k_num},data:")
# break
# for i in range(len(data)):
# if k * int(data[i][0]) + b - int(data[i][1]) < 0:
# continue
# if i < k_num:
# x_bot.append(int(data[i][0]))
# y_bot.append(int(data[i][1]))
# else:
# x_top.append(int(data[i][0]))
# y_top.append(int(data[i][1]))
# # print(x_bot, y_bot, x_top, y_top)
# return x_bot, y_bot, x_top, y_top, k_num2
def get_data(txt_name):
with open(txt_name, 'r', encoding='utf-8') as f:
lines = f.readlines()
data = []
for i, line in enumerate(lines, 1):
data.append(line.split())
x = []
y = []
for i in range(len(data)):
data[i][1] = 960 - int(data[i][1])
x.append(int(data[i][0]))
y.append(int(data[i][1]))
x = np.array(x)
y = np.array(y)
slope, intercept, r_2 = calc_slope_line.linear_regression(x, y)
print(r_2)
x_bot = []
y_bot = []
x_top = []
y_top = []
for i in range(len(x)):
if x[i] * slope + intercept - y[i] > 0:
x_bot.append(x[i])
y_bot.append(y[i])
else:
x_top.append(x[i])
y_top.append(y[i])
x_bot = np.array(x_bot)
y_bot = np.array(y_bot)
x_top = np.array(x_top)
y_top = np.array(y_top)
slope_bot, intercept_bot, r2_bot = calc_slope_line.linear_regression(x_bot, y_bot)
slope_top, intercept_top, r2_top = calc_slope_line.linear_regression(x_top, y_top)
print(f"r2_bot = {r2_bot},r2_top = {r2_top}")
if ((1-r2_bot) > 1e-2) or ((1-r2_bot) > 1e-2):
return None, None, None, None
delet = []
for i in range(len(x_bot)):
if abs(y_bot[i] - slope_bot * x_bot[i] - intercept_bot) > 10:
delet.append(i)
print(f"len(x_bot): {len(x_bot)},delet: {delet})")
x_bot = np.delete(x_bot, delet)
y_bot = np.delete(y_bot, delet)
# y_pred = slope_bot * x_bot + intercept_bot
delet = []
for i in range(len(x_top)):
if abs(y_top[i] - slope_top * x_top[i] - intercept_top) > 10:
delet.append(i)
x_top = np.delete(x_top, delet)
y_top = np.delete(y_top, delet)
# y_pred = slope_top * x_top + intercept_top
return x_bot, y_bot, x_top, y_top
txt_name = "C:\\Users\\Administrator\\Desktop\\BYD\\20250520\\frame_7800_2.jpg_zuobiao.txt"
test_name = r'C:\Users\Administrator\Desktop\BYD\error\20250620\20250620\INPUT_MUST_NOT_BE_EMPTY.txt'
def test_get_data(txt_name):
with open(txt_name, 'r', encoding='utf-8') as f:
lines = f.readlines()
data = []
for i, line in enumerate(lines, 1):
data.append(line.split())
x = []
y = []
for i in range(len(data)):
data[i][1] = 960 - int(data[i][1])
# if k * int(data[i][0]) + b - int(data[i][1]) < 0:
# continue
x.append(int(data[i][0]))
y.append(int(data[i][1]))
x = np.array(x)
y = np.array(y)
slope,intercept,r_2 = calc_slope_line.linear_regression(x, y)
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))
axes[0, 0].scatter(x,y, color='blue', label='orgin')
# 绘制拟合线
y_pred = slope * x + intercept
axes[0, 0].plot(x, y_pred, color='red', label='fix')
print(r_2)
x_bot = []
y_bot = []
x_top = []
y_top = []
for i in range(len(x)):
if x[i] * slope + intercept - y[i] > 0:
x_bot.append(x[i])
y_bot.append(y[i])
else:
x_top.append(x[i])
y_top.append(y[i])
x_bot = np.array(x_bot)
y_bot = np.array(y_bot)
x_top = np.array(x_top)
y_top = np.array(y_top)
slope_bot, intercept_bot, r2_bot = calc_slope_line.linear_regression(x_bot, y_bot)
slope_top, intercept_top, r2_top = calc_slope_line.linear_regression(x_top, y_top)
print(f"r2_bot = {r2_bot},r2_top = {r2_top}")
axes[1, 0].scatter(x_bot,y_bot, color='blue', label='orgin')
# 绘制拟合线
y_pred = slope_bot * x_bot + intercept_bot
axes[1, 0].plot(x_bot, y_pred, color='red', label='fix')
axes[1, 1].scatter(x_top,y_top, color='blue', label='orgin')
# 绘制拟合线
y_pred = slope_top * x_top + intercept_top
axes[1, 1].plot(x_top, y_pred, color='red', label='fix')
plt.show()
return x_bot, y_bot, x_top, y_top