home     zurück
letzte Änderung am 25.02.2016

Auto-Justage


Das Ausgangsbild ist folgendes:
0
1
2
3
4
5
6







Auch wenn es jetzt nicht mehr nötig sein sollte, habe ich mein Fenster trotzdem mal etwas veruneinheitlicht.

Ein Script für vollständiges Auto-justieren wollte ich mir dann doch nicht antun.
Das ist alles so unpräzise und die Ergebnisse sind nur begrenzt reproduzierbar.
Hier das Script, mit dem ich die fünf Varianten [x0, x1, x2, y0, y1] jeweils mehrmals durchgespielt habe:
if __name__=="__main__":
  cam=IP_Cam()

  cx=7  # Anzahl Elemente auf der X-Achse
  cy=5  # Anzahl Elemente auf der Y-Achse
  w=91  # Breite eines Elements
  h=96  # Höhe eines Elements
  y=0
  e=0   # zu treffendes Element

  #for d in range(20, 70):
  for d in range(575, 590):
    #d2=d/100.0
    d2=d/1000.0
    # wegen der Kamera-Ungenauigkeit werden jedesmal beide
    # Bilder neu von der Kamera geholt
    img=cam.getImageGrayscale()
    #x=e
    #dest=img[:, 1+x*w:1+x*w+w]    # zu treffendes Element holen
    y=e
    dest=img[y*h:y*h+h, :]
    cam.saveImage(dest, "d_%2.3f-1"%(d2,))

    #cam.gotoDirection(cam.LEFT, d2)  # schwenken
    cam.gotoDirection(cam.UP, d2)  # schwenken
    time.sleep(0.4)

    img=cam.getImageGrayscale()     # mittleres Element holen
    #cam.saveImage(img, "2")
    #x=3
    #cur=img[:, 1+x*w:1+x*w+w]
    y=2
    cur=img[y*h:y*h+h, :]
    cam.saveImage(cur, "d_%2.3f-2"%(d2,))
    diff=cam.removeNoise(cur-dest)
    dis=np.sum(diff)
    cam.saveImage(diff, "d_%2.3f-3-%8d"%(d2, dis))
   
    print("%2.3f"%(d2), dis)
    #cam.gotoDirection(cam.RIGHT, d2) # zurück-schwenken
    cam.gotoDirection(cam.DOWN, d2) # zurück-schwenken
    time.sleep(0.4)

# x=2: 0.89 0.91 0.95 0.96     -> 0.93
# x=1: 1.70 1.71 1.77          -> 1.72
# x=0: 2.61 2.62 2.64 2.67     -> 2.63

# y=1: 0.314 0.318 0.331 0.338 -> 0.325
# y=0: 0.576 0.579 0.581 0.586 -> 0.581

Die ermittelten Werte stehen unten als Kommentar. Also genauer gesagt: die Ranges, in denen die Werte lagen. Was für ein Schrott....
Und zu den für die 4x4-Matrix ermittelten Werten passen sie auch nur zur Hälfte. Also 0.86 & 2.3 in x und 0.23 & 0.57 in y.

Abgesehen von der ungenügenden Präzision der Kamera, ergibt sich ein gewisses Problem durch die sich ändernde Perspektive.
Der Ziel-Bildausschnitt vor dem Schwenk und der in die Bildmitte geholte Bildausschnitt sind nie gleich.

Hier zwei Beispiele, bei denen ich zwei solche Bildausschnitte übereinander in ein animiertes GIF gelegt habe:
Drucker mit Wackelarsch Biege-Regal

Aber eigentlich stört mich das ja alles nicht, weil ich meine Werte für die 7x5-Matrix jetzt habe.
Die Idee mit mehreren gewichteten Matrix-Elementen hatte ich ja wegen der ungenügenden Kamera-Präzision als untauglich identifiziert.
Somit muss ich jetzt nur noch den findBrightestArea() von einer 4x4-Matrix auf eine 7x5-Matrix umbauen und wäre quasi fertig.
Wir werden sehen....

Bewegungs-Nachführung V2