implemented FFT res waterfall colorscale_max slider

This commit is contained in:
2025-12-21 17:44:42 +03:00
parent 657da0d285
commit 8544a44d60

View File

@ -459,9 +459,10 @@ def main():
freq_shared: Optional[np.ndarray] = None freq_shared: Optional[np.ndarray] = None
# Параметры контраста водопада спектров # Параметры контраста водопада спектров
spec_clip = _parse_spec_clip(getattr(args, "spec_clip", None)) spec_clip = _parse_spec_clip(getattr(args, "spec_clip", None))
# Ползунки управления Y для B-scan # Ползунки управления Y для B-scan и контрастом
ymin_slider = None ymin_slider = None
ymax_slider = None ymax_slider = None
contrast_slider = None
# Линейный график последнего свипа # Линейный график последнего свипа
line_obj, = ax_line.plot([], [], lw=1) line_obj, = ax_line.plot([], [], lw=1)
@ -520,12 +521,14 @@ def main():
ax_spec.tick_params(axis="x", labelbottom=False) ax_spec.tick_params(axis="x", labelbottom=False)
except Exception: except Exception:
pass pass
# Слайдеры для управления осью Y B-scan (мин/макс) # Слайдеры для управления осью Y B-scan (мин/макс) и контрастом
try: try:
ax_smin = fig.add_axes([0.92, 0.55, 0.02, 0.35]) ax_smin = fig.add_axes([0.92, 0.55, 0.02, 0.35])
ax_smax = fig.add_axes([0.95, 0.55, 0.02, 0.35]) ax_smax = fig.add_axes([0.95, 0.55, 0.02, 0.35])
ax_sctr = fig.add_axes([0.98, 0.55, 0.02, 0.35])
ymin_slider = Slider(ax_smin, "Y min", 0, max(1, fft_bins - 1), valinit=0, valstep=1, orientation="vertical") ymin_slider = Slider(ax_smin, "Y min", 0, max(1, fft_bins - 1), valinit=0, valstep=1, orientation="vertical")
ymax_slider = Slider(ax_smax, "Y max", 0, max(1, fft_bins - 1), valinit=max(1, fft_bins - 1), valstep=1, orientation="vertical") ymax_slider = Slider(ax_smax, "Y max", 0, max(1, fft_bins - 1), valinit=max(1, fft_bins - 1), valstep=1, orientation="vertical")
contrast_slider = Slider(ax_sctr, "Int max", 0, 100, valinit=100, valstep=1, orientation="vertical")
def _on_ylim_change(_val): def _on_ylim_change(_val):
try: try:
@ -538,6 +541,8 @@ def main():
ymin_slider.on_changed(_on_ylim_change) ymin_slider.on_changed(_on_ylim_change)
ymax_slider.on_changed(_on_ylim_change) ymax_slider.on_changed(_on_ylim_change)
# Контраст влияет на верхнюю границу цветовой шкалы (процент от авто-диапазона)
contrast_slider.on_changed(lambda _v: fig.canvas.draw_idle())
except Exception: except Exception:
pass pass
@ -739,7 +744,13 @@ def main():
if y_min_fft is not None and y_max_fft is not None and np.isfinite(y_min_fft) and np.isfinite(y_max_fft) and y_min_fft != y_max_fft: if y_min_fft is not None and y_max_fft is not None and np.isfinite(y_min_fft) and np.isfinite(y_max_fft) and y_min_fft != y_max_fft:
vmin_v, vmax_v = y_min_fft, y_max_fft vmin_v, vmax_v = y_min_fft, y_max_fft
if vmin_v is not None and vmax_v is not None and vmin_v != vmax_v: if vmin_v is not None and vmax_v is not None and vmin_v != vmax_v:
img_fft_obj.set_clim(vmin=vmin_v, vmax=vmax_v) # Применим скалирование контрастом (верхняя граница)
try:
c = float(contrast_slider.val) / 100.0 if contrast_slider is not None else 1.0
except Exception:
c = 1.0
vmax_eff = vmin_v + c * (vmax_v - vmin_v)
img_fft_obj.set_clim(vmin=vmin_v, vmax=vmax_eff)
# Возвращаем обновлённые артисты # Возвращаем обновлённые артисты
return (line_obj, img_obj, fft_line_obj, img_fft_obj) return (line_obj, img_obj, fft_line_obj, img_fft_obj)