From e1f32f2646e35ef69e638df55deb5c082027cffa Mon Sep 17 00:00:00 2001 From: Havoc <2993167370@qq.com> Date: Sat, 31 May 2025 13:03:35 +0800 Subject: [PATCH] vertical: step - 3 --- logs/robot_2025-05-31.log | 36 ++++++++++++++++++++++++++++++++ utils/base_line_handler.py | 1 - utils/detect_dual_track_lines.py | 27 ++++++++++-------------- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/logs/robot_2025-05-31.log b/logs/robot_2025-05-31.log index 0044a13..796187a 100644 --- a/logs/robot_2025-05-31.log +++ b/logs/robot_2025-05-31.log @@ -569,3 +569,39 @@ 2025-05-31 13:00:28 | INFO | utils.log_helper - ℹ️ 保存双轨迹线检测结果图像到: logs/image/dual_track_20250531_130028_867883.jpg 2025-05-31 13:00:28 | INFO | utils.log_helper - ℹ️ 保存原始图像到: logs/image/dual_track_orig_20250531_130028_867883.jpg 2025-05-31 13:00:28 | INFO | utils.log_helper - ℹ️ 双轨迹线检测结果: {'timestamp': '20250531_130028_867883', 'center_point': (945, 1080), 'deviation': 3.410605131648481e-13, 'left_track_mid_x': 608.5, 'right_track_mid_x': 1219.0, 'track_width': 610.5, 'center_slope': 0.02351973684210257} +2025-05-31 13:01:48 | DEBUG | utils.log_helper - 🐞 步骤1: 创建黄色掩码 +2025-05-31 13:01:49 | DEBUG | utils.log_helper - 🐞 步骤1.5: 底部区域掩码 +2025-05-31 13:01:50 | DEBUG | utils.log_helper - 🐞 步骤2: 边缘检测 +2025-05-31 13:01:51 | DEBUG | utils.log_helper - 🐞 步骤3: 检测到 54 条直线 +2025-05-31 13:01:52 | DEBUG | utils.log_helper - 🐞 步骤3.2: 筛选出 11 条垂直候选线 (合并前) +2025-05-31 13:01:53 | DEBUG | utils.log_helper - 🐞 步骤3.5: 合并筛选出 7 条垂直候选线 (合并后) +2025-05-31 13:01:54 | DEBUG | utils.log_helper - 🐞 步骤4: 找到 7 条垂直线 +2025-05-31 13:01:55 | DEBUG | utils.log_helper - 🐞 左侧候选线数量: 4, 右侧候选线数量: 3 +2025-05-31 13:01:56 | DEBUG | utils.log_helper - 🐞 选择最佳线对,评分: 0.95 +2025-05-31 13:01:57 | INFO | utils.log_helper - ℹ️ 保存双轨迹线检测结果图像到: logs/image/dual_track_20250531_130157_840099.jpg +2025-05-31 13:01:57 | INFO | utils.log_helper - ℹ️ 保存原始图像到: logs/image/dual_track_orig_20250531_130157_840099.jpg +2025-05-31 13:01:57 | INFO | utils.log_helper - ℹ️ 双轨迹线检测结果: {'timestamp': '20250531_130157_840099', 'center_point': (945, 1080), 'deviation': 3.410605131648481e-13, 'left_track_mid_x': 608.5, 'right_track_mid_x': 1219.0, 'track_width': 610.5, 'center_slope': 0.02351973684210257} +2025-05-31 13:02:17 | DEBUG | utils.log_helper - 🐞 步骤1: 创建黄色掩码 +2025-05-31 13:02:18 | DEBUG | utils.log_helper - 🐞 步骤1.5: 底部区域掩码 +2025-05-31 13:02:19 | DEBUG | utils.log_helper - 🐞 步骤2: 边缘检测 +2025-05-31 13:02:20 | DEBUG | utils.log_helper - 🐞 步骤3: 检测到 54 条直线 +2025-05-31 13:02:21 | DEBUG | utils.log_helper - 🐞 步骤3.2: 筛选出 11 条垂直候选线 (合并前) +2025-05-31 13:02:22 | DEBUG | utils.log_helper - 🐞 步骤3.5: 合并筛选出 4 条垂直候选线 (合并后) +2025-05-31 13:02:23 | DEBUG | utils.log_helper - 🐞 步骤4: 找到 4 条垂直线 +2025-05-31 13:02:24 | DEBUG | utils.log_helper - 🐞 左侧候选线数量: 2, 右侧候选线数量: 2 +2025-05-31 13:02:25 | DEBUG | utils.log_helper - 🐞 选择最佳线对,评分: 0.95 +2025-05-31 13:02:26 | INFO | utils.log_helper - ℹ️ 保存双轨迹线检测结果图像到: logs/image/dual_track_20250531_130226_932552.jpg +2025-05-31 13:02:26 | INFO | utils.log_helper - ℹ️ 保存原始图像到: logs/image/dual_track_orig_20250531_130226_932552.jpg +2025-05-31 13:02:26 | INFO | utils.log_helper - ℹ️ 双轨迹线检测结果: {'timestamp': '20250531_130226_932552', 'center_point': (945, 1080), 'deviation': 0.0, 'left_track_mid_x': 637.0, 'right_track_mid_x': 1219.0, 'track_width': 582.0, 'center_slope': 0.025372292418772317} +2025-05-31 13:03:10 | DEBUG | utils.log_helper - 🐞 步骤1: 创建黄色掩码 +2025-05-31 13:03:11 | DEBUG | utils.log_helper - 🐞 步骤1.5: 底部区域掩码 +2025-05-31 13:03:12 | DEBUG | utils.log_helper - 🐞 步骤2: 边缘检测 +2025-05-31 13:03:13 | DEBUG | utils.log_helper - 🐞 步骤3: 检测到 54 条直线 +2025-05-31 13:03:14 | DEBUG | utils.log_helper - 🐞 步骤3.2: 筛选出 11 条垂直候选线 (合并前) +2025-05-31 13:03:15 | DEBUG | utils.log_helper - 🐞 步骤3.5: 合并筛选出 4 条垂直候选线 (合并后) +2025-05-31 13:03:16 | DEBUG | utils.log_helper - 🐞 步骤4: 找到 4 条垂直线 +2025-05-31 13:03:17 | DEBUG | utils.log_helper - 🐞 左侧候选线数量: 2, 右侧候选线数量: 2 +2025-05-31 13:03:18 | DEBUG | utils.log_helper - 🐞 选择最佳线对,评分: 0.95 +2025-05-31 13:03:19 | INFO | utils.log_helper - ℹ️ 保存双轨迹线检测结果图像到: logs/image/dual_track_20250531_130319_793352.jpg +2025-05-31 13:03:19 | INFO | utils.log_helper - ℹ️ 保存原始图像到: logs/image/dual_track_orig_20250531_130319_793352.jpg +2025-05-31 13:03:19 | INFO | utils.log_helper - ℹ️ 双轨迹线检测结果: {'timestamp': '20250531_130319_793352', 'center_point': (945, 1080), 'deviation': 0.0, 'left_track_mid_x': 637.0, 'right_track_mid_x': 1219.0, 'track_width': 582.0, 'center_slope': 0.025372292418772317} diff --git a/utils/base_line_handler.py b/utils/base_line_handler.py index d3915bd..97a7614 100644 --- a/utils/base_line_handler.py +++ b/utils/base_line_handler.py @@ -129,7 +129,6 @@ def _merge_collinear_lines_iterative(lines, # 过滤掉初始太短的线 current_lines = [line for line in lines if np.linalg.norm(np.array(line[:2]) - np.array(line[2:])) >= min_initial_len] - print(f"合并前: {len(lines)} 条线, 过滤后: {len(current_lines)} 条线") if not current_lines or len(current_lines) < 2: return np.array([[line] for line in current_lines]) if current_lines else np.array([]) diff --git a/utils/detect_dual_track_lines.py b/utils/detect_dual_track_lines.py index 00afd47..7a838d8 100644 --- a/utils/detect_dual_track_lines.py +++ b/utils/detect_dual_track_lines.py @@ -145,23 +145,18 @@ def detect_dual_track_lines(image, observe=False, delay=1000, save_log=True, cv2.imshow("合并前的垂直候选线", pre_merge_lines_img) cv2.waitKey(delay) - # 合并共线线段,参数说明: - # min_initial_len: 最小初始线段长度 - # max_angle_diff_deg: 最大允许角度差(度) - # max_ep_gap_abs: 端点间最大绝对距离 - # max_ep_gap_factor: 端点间最大相对距离因子 - # max_p_dist_abs: 点到线段最大绝对距离 - # max_p_dist_factor: 点到线段最大相对距离因子 - vertical_only_lines_tmp = vertical_only_lines.copy() - vertical_only_lines = _merge_collinear_lines_iterative(vertical_only_lines, - min_initial_len=5.0, - max_angle_diff_deg=10.0, - max_ep_gap_abs=max_line_gap / 2.0, - max_ep_gap_factor=0.25, - max_p_dist_abs=max_line_gap / 4.0, - max_p_dist_factor=1) if observe: - print(f"合并前: {len(lines)} 条线, 合并后: {len(vertical_only_lines)} 条线") + vertical_only_lines_tmp = vertical_only_lines.copy() + + vertical_only_lines = _merge_collinear_lines_iterative(vertical_only_lines, + min_initial_len=5.0, # 最小初始线段长度 + max_angle_diff_deg=10.0, # 最大允许角度差(度) + max_ep_gap_abs=max_line_gap, # 端点间最大绝对距离 + max_ep_gap_factor=1, # 端点间最大相对距离因子 + max_p_dist_abs=max_line_gap, # 点到线段最大绝对距离 + max_p_dist_factor=1) # 点到线段最大相对距离因子 + if observe: + print(f"合并前: {len(vertical_only_lines_tmp)} 条线, 合并后: {len(vertical_only_lines)} 条线") debug(f"步骤3.5: 合并筛选出 {len(vertical_only_lines)} 条垂直候选线 (合并后)", "可视化") # 创建两个图像用于对比显示