2017-04-20 4 views
-4

Hier ist der Code für die Bildverarbeitung. Ich fand diesen Code in einer App, die Herzschläge pro Minute berechnet, indem die Intensität der roten Farbe überprüft wird, wenn der Finger auf die Kamera gelegt wird. Ich habe die decodeYUV-Methode an mehreren Stellen bemerkt, an denen Bildverarbeitung erforderlich ist. Ich möchte zwei Dinge hier wissen:Kann jemand diesen Bildverarbeitungsalgorithmus erklären?

  1. Was ist YUV und warum wird es verwendet?
  2. Wie funktioniert der Algorithmus, um die Intensität von Rot herauszufinden?

e

private static int decodeYUV420SPtoRedSum(byte[] yuv420sp, int width, int height) { 

     if (yuv420sp == null) return 0; 

     final int frameSize = width * height; 

     int sum = 0; 
     for (int j = 0, yp = 0; j < height; j++) { 
      int uvp = frameSize + (j >> 1) * width, u = 0, v = 0; 
      for (int i = 0; i < width; i++, yp++) { 
       int y = (0xff & yuv420sp[yp]) - 16; 
       if (y < 0) y = 0; 
       if ((i & 1) == 0) { 
        v = (0xff & yuv420sp[uvp++]) - 128; 
        u = (0xff & yuv420sp[uvp++]) - 128; 
       } 
       int y1192 = 1192 * y; 
       int r = (y1192 + 1634 * v); 
       int g = (y1192 - 833 * v - 400 * u); 
       int b = (y1192 + 2066 * u); 

       if (r < 0) r = 0; 
       else if (r > 262143) r = 262143; 
       if (g < 0) g = 0; 
       else if (g > 262143) g = 262143; 
       if (b < 0) b = 0; 
       else if (b > 262143) b = 262143; 

       int pixel = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff); 
       int red = (pixel >> 16) & 0xff; 
       sum += red; 
      } 
     } 
     return sum; 
    }` 
+0

https://www.google.com/search?q=YUV+color und https://en.wikipedia.org/wiki/YUV –

Antwort

0

YUV ist ein Farbmodell. Vielleicht sind Sie mit RGB vertraut? Es ist etwas Ähnliches mit dem Hauptunterschied, dass YUV Farbinformationen von Intensitätsinformationen trennt. Dies ist in vielen Anwendungen nützlich.

Es gibt Umrechnungsformeln, um YUV in RGB-Werte zu konvertieren.

Wie berechnet der Algorithmus, was der rote Wert ist? Lesen Sie den Code und Sie werden es wissen. Die Mathematik erforderlich ist abgewertet Zeile für Zeile ...

um Ihr Verständnis des Codes zu verbessern Ich schlage vor, Sie zumindest lesen:

https://en.wikipedia.org/wiki/YUV

Hier natürlich die Umwandlung Kapitel sind von besonderem Interesse für Sie ...

Verwandte Themen