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].

results matching ""

    No results matching ""