linear_regression.py

# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Beispiel für lineare Regression
#
# Dieses Beispiel zeigt, wie die Methode get_regression() auf Ihrer OpenMV Cam verwendet wird,
# um die lineare Regression einer ROI zu ermitteln. Mit dieser Methode können Sie einfach
# einen Roboter bauen, der Linien verfolgen kann, die alle ungefähr in dieselbe Richtung zeigen,
# aber nicht tatsächlich verbunden sind. Verwenden Sie find_blobs() für Linien, die schön
# verbunden sind, um bessere Filteroptionen und Kontrolle zu erhalten.
#
# get_regression() läuft in O(N^2)-Zeit auf dem Bild. Um dies handhabbar zu halten,
# wird die Quell-ROI vor dem Anpassen der Linie flächenskaliert in einen temporären Puffer verkleinert;
# die Puffergröße ist über das Schlüsselwortargument target_size=(w, h) konfigurierbar
# (Standard (80, 60)). Übergeben Sie ein größeres Tupel, um mit höherer Auflösung zu arbeiten.

import csi
import time

THRESHOLD = (0, 100)  # Graustufen-Schwellenwert für dunkle Dinge.
BINARY_VISIBLE = True  # Zuerst ein Binärdurchgang, um zu sehen, worauf die lineare Regression läuft.

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)

clock = time.clock()  # um manchmal einen Frame zu verarbeiten.

while True:
    clock.tick()
    img = csi0.snapshot().binary([THRESHOLD]) if BINARY_VISIBLE else csi0.snapshot()

    # Gibt ein Linienobjekt zurück, das den von find_lines() und
    # find_line_segments() zurückgegebenen Linienobjekten ähnlich ist. Sie haben die Attribute x1, y1, x2, y2, length,
    # theta (Rotation in Grad), rho und magnitude.
    #
    # magnitude gibt an, wie gut die lineare Regression funktioniert hat. Im Allgemeinen
    # gilt: je größer der Wert, desto besser...
    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")
    )

# Zu negativen rho-Werten:
#
# Ein [theta+0:-rho]-Tupel ist dasselbe wie [theta+180:+rho].

results matching ""

    No results matching ""