linear_regression.py
# Questo lavoro è concesso in licenza MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tutti i diritti riservati.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Esempio di regressione lineare
#
# Questo esempio mostra come usare il metodo get_regression() sulla OpenMV Cam
# per ottenere la regressione lineare di una ROI. Usando questo metodo è possibile costruire facilmente
# un robot in grado di tracciare linee che puntano tutte nella stessa direzione generale
# ma che non sono effettivamente collegate. Usare find_blobs() su linee che sono ben
# collegate per ottenere migliori opzioni di filtraggio e controllo.
#
# get_regression() viene eseguito in tempo O(N^2) sull'immagine. Per mantenere gestibile questa operazione
# la ROI sorgente viene ridotta in scala per area in un buffer temporaneo prima di adattare la linea;
# la dimensione del buffer è configurabile tramite l'argomento nominato target_size=(w, h)
# (predefinito (80, 60)). Passare una tupla più grande per operare a risoluzione più alta.
import csi
import time
THRESHOLD = (0, 100) # Soglia in scala di grigi per gli oggetti scuri.
BINARY_VISIBLE = True # Prima un passaggio binario per vedere su cosa sta operando la regressione lineare.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
clock = time.clock() # per elaborare un fotogramma a volte.
while True:
clock.tick()
img = csi0.snapshot().binary([THRESHOLD]) if BINARY_VISIBLE else csi0.snapshot()
# Restituisce un oggetto linea simile agli oggetti linea restituiti da find_lines() e
# find_line_segments(). Si dispone di x1, y1, x2, y2, length,
# theta (rotazione in gradi), rho e attributi magnitude.
#
# magnitude rappresenta quanto bene ha funzionato la regressione lineare. In generale,
# più grande è il valore, meglio è...
line = img.get_regression([(255, 255) if BINARY_VISIBLE else THRESHOLD])
if line:
img.draw_line(line, color=127)
print(
"FPS %f, mag = %s" % (clock.fps(), str(line.magnitude) if (line) else "N/A")
)
# Informazioni sui valori rho negativi:
#
# Una tupla [theta+0:-rho] è la stessa cosa di [theta+180:+rho].