Ähnlichkeit zweiter np.arrays

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
m.g.o.d
User
Beiträge: 75
Registriert: Samstag 4. April 2020, 13:17

Hallo Zusammen,

bei folgendem Problem komme ich gerade nicht weiter:

Ich habe aus einem Videobild einen festen Teilbereicht definiert, diesen in eine Graustufe gewandelt und anschließend Canny angewandt. Dieses (Video)-Bild habe ich als .jpg Referenz gespeichert. Das ist Input1 (Es ist ein Fernsehlogo, von der Position her fest unten rechts im Bild)

Nun gibt es ein Video als Input2, welches den gleichen Teilbereich definiert. Auch dieses Video durchläuft Canny u.a., so wie Input1. Das Logo (Input1) ist immer an der selben Stelle. Ich möchte nun beide Arrays (Input1 und Input2) auf eine Ähnlichkeit hin Vergleichen (z.B. zu 90% ähnlich) um mich einem Threshold anzunähern, ab welcher Ähnlichkeit das Logo noch da ist und wann nicht (z.B. wenn es ausgeblendet wird.

Folgendes habe ich testweise versucht, aber irgendwie lässt sich das auf mein Problem nicht genau anwenden:

Code: Alles auswählen

picture1 = np.random.rand(100,100)
picture2 = np.random.rand(100,100)
picture1_norm = picture1/np.sqrt(np.sum(picture1**2))
picture2_norm = picture2/np.sqrt(np.sum(picture2**2))
print(np.sum(picture1_norm**2))
print("np.sum(picture2_norm*picture1_norm)


Also eigentlich ist das genau das, was ich suche. Nur lässt sich das auf mein Canny np.Array nicht so anwenden, die Werte ergeben keinen Sinn für mich :-/

Auch versucht habe ich np.isclose()...trotz rtol /atol Parameter bin ich nicht auf sinnvolle Ähnlichkeitswerte gekommen.

Hätte jemand einen Tipp für mich? Wie immer bin ich für jeden Hinweis sehr dankbar,

Besten Gruß & guten Rutsch ins neue Jahr,
Marc
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Solche Probleme werden im Rahmen von Computer Vision (CV) diskutiert. Der Standard dafür ist die OpenCV, die es auch für Python gibt. Darin gibt es diverse Verfahren, wie zb Template matching oder SURF/SIFT, bis hin zu KNNs. In der Dokumentation gibts viele bespiele.
Antworten