feat: add new arguments, correct yandex map
This commit is contained in:
@@ -3,14 +3,16 @@
|
||||
Модуль для управления общим окном визуализации
|
||||
"""
|
||||
|
||||
from PIL import Image
|
||||
from enum import Enum
|
||||
from scipy.interpolate import make_interp_spline
|
||||
|
||||
import cv2
|
||||
import matplotlib
|
||||
import matplotlib.axes
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.patches as patches
|
||||
import numpy as np
|
||||
from enum import Enum
|
||||
import cv2
|
||||
from PIL import Image
|
||||
import matplotlib
|
||||
|
||||
# Настройки matplotlib
|
||||
matplotlib.use('TkAgg')
|
||||
@@ -93,14 +95,14 @@ class VisualizationManager:
|
||||
self.ax_matches.axis('off')
|
||||
|
||||
# Сопоставление точек (средний средний угол)
|
||||
self.ax_chunk_matches = self.fig.add_subplot(gs[1, 2])
|
||||
self.ax_chunk_matches = self.fig.add_subplot(gs[1, 1:3])
|
||||
self.ax_chunk_matches.set_title('Chunk Matching')
|
||||
self.ax_chunk_matches.axis('off')
|
||||
|
||||
# Визуализация движения ключевых точек (левый нижний угол)
|
||||
self.ax_motion_vectors = self.fig.add_subplot(gs[1, 1])
|
||||
self.ax_motion_vectors.set_title('Motion Vectors - Движение ключевых точек')
|
||||
self.ax_motion_vectors.axis('off')
|
||||
# self.ax_motion_vectors = self.fig.add_subplot(gs[1, 1])
|
||||
# self.ax_motion_vectors.set_title('Motion Vectors - Движение ключевых точек')
|
||||
# self.ax_motion_vectors.axis('off')
|
||||
|
||||
# Визуализация движения ключевых точек на основе матрицы гомографии
|
||||
self.ax_motion_gomography = self.fig.add_subplot(gs[0, 1])
|
||||
@@ -157,7 +159,7 @@ class VisualizationManager:
|
||||
# Рисуем текущую целевую точку
|
||||
if self.target_idx < len(self.target_pts):
|
||||
pt = self.target_pts[self.target_idx]
|
||||
self.ax_global_map.plot(pt[0], pt[1], 'yo', markersize=8, label='Цель (0, 0)')
|
||||
self.ax_global_map.plot(pt[0], pt[1], 'yo', markersize=8, label='Цель')
|
||||
|
||||
self.ax_global_map.legend()
|
||||
|
||||
@@ -208,7 +210,37 @@ class VisualizationManager:
|
||||
self.ax_error_plot.grid(True, alpha=0.3)
|
||||
|
||||
if len(self.error_times) > 1:
|
||||
self.ax_error_plot.plot(self.error_times, self.position_errors, 'b-', linewidth=2)
|
||||
# Оригинальный график (более прозрачный)
|
||||
self.ax_error_plot.plot(self.error_times, self.position_errors, 'b-',
|
||||
linewidth=1, alpha=0.4, label='Погрешность данных')
|
||||
|
||||
if len(self.error_times) > 5:
|
||||
# Сглаженный график
|
||||
smoothed_times = np.linspace(self.error_times[0], self.error_times[-1], 300)
|
||||
spl = make_interp_spline(self.error_times, self.position_errors, k=3)
|
||||
smoothed_errors = spl(smoothed_times)
|
||||
|
||||
|
||||
self.ax_error_plot.plot(smoothed_times, smoothed_errors, 'orange',
|
||||
linewidth=2, label='Сглаженный тренд')
|
||||
|
||||
# if len(self.position_errors) > 5: # Достаточно данных для сглаживания
|
||||
# window_size = min(11, len(self.position_errors) // 3) # Адаптивный размер окна
|
||||
# if window_size % 2 == 0: # Должен быть нечетным
|
||||
# window_size += 1
|
||||
|
||||
# # Метод скользящего среднего
|
||||
# smoothed_errors = np.convolve(
|
||||
# self.position_errors,
|
||||
# np.ones(window_size) / window_size,
|
||||
# mode='valid'
|
||||
# )
|
||||
|
||||
# # Корректируем временную ось для сглаженных данных
|
||||
# offset = (window_size - 1) // 2
|
||||
# smoothed_times = self.error_times[offset:offset + len(smoothed_errors)]
|
||||
|
||||
self.ax_error_plot.legend(loc='upper right')
|
||||
|
||||
# Автоматически масштабируем оси
|
||||
if len(self.position_errors) > 0:
|
||||
@@ -219,6 +251,7 @@ class VisualizationManager:
|
||||
else:
|
||||
self.ax_error_plot.set_ylim(0, 1)
|
||||
|
||||
|
||||
def update_matches(self, img1: np.ndarray, img2: np.ndarray,
|
||||
kp1, kp2, matches, transformation_info=None):
|
||||
"""Обновляет визуализацию сопоставления точек"""
|
||||
|
||||
Reference in New Issue
Block a user