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.

171 lines
5.4 KiB

4 months ago
import numpy as np
4 months ago
4 months ago
import calc_way
from scipy import stats
import calc_slope_line
import matplotlib.pyplot as plt
4 months ago
# 车胎横向分界线
k = 0.62849534
b = 21.8122503
"""
读取yolo网络识别路沿的坐标数据,筛选出目标区域的数据点并将路沿上下侧数据分离
参数保存数据的txt文件路径
返回值在目标区域内的下侧数据点坐标x_boty_bot上侧数据点坐标x_top,y_top
"""
4 months ago
# 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
4 months ago
def get_data(txt_name):
with open(txt_name, 'r', encoding='utf-8') as f:
lines = f.readlines()
data = []
4 months ago
if not data:
return None, None, None, None
4 months ago
for i, line in enumerate(lines, 1):
data.append(line.split())
4 months ago
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)
4 months ago
# print(r_2)
4 months ago
x_bot = []
y_bot = []
x_top = []
y_top = []
4 months ago
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)
4 months ago
# print(f"r2_bot = {r2_bot},r2_top = {r2_top}")
4 months ago
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)
4 months ago
# print(f"len(x_bot): {len(x_bot)},delet: {delet})")
4 months ago
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 = []
4 months ago
for i in range(len(data)):
data[i][1] = 960 - int(data[i][1])
4 months ago
# if k * int(data[i][0]) + b - int(data[i][1]) < 0:
# continue
4 months ago
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])
4 months ago
else:
4 months ago
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')
4 months ago
4 months ago
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
4 months ago