2016-06-22 11 views
0

Ich änderte etwas Labview Code, den ich online fand, um in meinem Programm zu verwenden. Es funktioniert, ich verstehe fast alles, aber es gibt einen Abschnitt, der mich verwirrt. Dies ist das Programm:Kann jemand diesen Labview Code erklären

Compare Pictures

Dieses Programm dauert 2 Bilder, subtrahiert sie und gibt das Bild sowie eine prozentuale Differenz. Was ich verstehe, ist, dass es die Bilder nimmt, sie subtrahiert, das subtrahierte Bild in ein Array von farbigen Pixeln konvertiert, dann passiert Mathe und die Pixel werden mit dem Schwellenwert verglichen. Es fügt eine 1 für jedes Pixel größer als der Schwellenwert hinzu, teilt es durch die Bildgröße und gibt einen Prozentsatz aus. Der Teil, den ich nicht verstehe, ist der Mathe-Teil, der ganze Quotienten- und Rest-Abschnitt mit einer "zufälligen" 256. Weil ich nicht verstehe, wie man diese Zahlen bekommt, habe ich einen Prozentsatz, aber ich verstehe nicht, was sie sind bedeuten. Hier ist ein Bild der Frontplatte mit 2 verschiedenen Tests.

Test Pictures

In der Spitze ein, habe ich einen Prozentsatz von 15, und den Boden eines Prozentsatz von 96. Das sagt mir, dass der Boden eines „96 Prozent anders“ ist. Aber gibt es trotzdem, um sicherzustellen, dass das genau ist?

Die andere Frage, die ich habe, ist Schwelle, weil ich nicht genau weiß, was das auch tut. Wenn ich den Schwellenwert für das untere Bild auf 30 ändere, beträgt mein Prozentsatz 8% mit demselben Bild.

Ich bin mir sicher, sobald ich den Quotienten/Rest Teil verstehe, wird alles einen Sinn ergeben, aber ich kann nicht scheinen, es zu bekommen. Danke für Ihre Hilfe.

Antwort

1

Meine beste Vermutung ist, dass jemand versucht, den Unterschied zwischen zwei Bildern mit einer einzigen Zahl zu charakterisieren. Der remainder-quotient Teil ist ein "armer Mann" -Ansatz, um jedes 2D-Array-Element der Differenz in 2 untere Bytes (2 Reste) und das obere 2-Byte-Wort aufzuteilen. Dann werden die unteren 2 Bytes der Differenz summiert und das Ergebnis wird den oberen 2 Bytes (als ein Wort) hinzugefügt. Vielleicht 3 verschiedene Bytes jeweils unterschiedliche Kanal der Kamera (z. B. RGB-Farbe) dargestellt?

Dann wird der Wert mit dem Schwellenwert verglichen und die Anzahl der Pixel über dem Schwellenwert berechnet. Diese Zahl wird durch die Gesamtzahl der Pixel dividiert, um den %% Unterschied zu berechnen. Das Ergebnis ist %% der Pixel, die sich vom Hauptbild um den Schwellenwert unterscheiden.

z. Wenn ein bestimmter Pixel Ihres Bildes 0x00112233 war und das entsprechende Master-Bildpixel einen Wert von 0x00011122 hatte, dann ist die Anzahl verglichen mit dem Schwellenwert (0x11 - 0x01) + (0x22 - 0x11) + (0x33 - 0x22) = 0x10 + 0x11 + 0x11 = 0x32 = 50 dezimal.

Ob dies das bestmögliche Vergleichs-/Differenzkriterium ist, liegt weit außerhalb dieses Themas.

+1

Wie oben, aber kürzere Antwort: Es teilt die Farbinformationen in Rot, Grün, Blau Komponenten, so dass sie zusammen addiert werden können. Es ist ein seltsamer Weg, die Byte-Aufteilung zu machen. Ich hätte "Color To RGB.vi" oder die Funktion Split Number (was "Color To RGB.vi" intern verwendet). – srm

+0

Danke euch beiden, ich verstehe jetzt das ganze Programm viel mehr. Um es für jeden Interessierten weiter zu erklären, braucht es 2 Bilder, subtrahiert sie und das Bild wird in ein Array von jedem Pixel umgewandelt. Das Array reicht von 0 (schwarz) bis 16777215 (weiß). Der Rest-Quotienten-Abschnitt wandelt sie in ihre RGB-Werte um und fügt sie hinzu (max. 765, 255 + 255 + 255), dann wird der Schwellenwert (z. B. 30%, 229.5, ich habe ihn ein wenig modifiziert) jeden Wert kleiner als diese Zahl in eine 0 und über diese Zahl in 1. Es addiert alle 1 und teilt sich durch die Gesamtbildgröße, und Sie erhalten einen Prozentsatz von hellen Pixeln. –