2017-04-20 22 views
-4

画像処理に使用されるコードです。このコードは、指がカメラに置かれたときの赤の色の強さをチェックすることによって、毎分ハートビートを計算するアプリで見つかりました。私は画像処理が必要ないくつかの場所でdecodeYUVメソッドに気づいた。私はここで2つのことを知っている:誰かがこの画像処理アルゴリズムを説明できますか?

  1. なぜそれが使われているのですか?
  2. アルゴリズムは赤色の強度をどのように見つけ出すのですか?

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とhttps://en.wikipedia.org/wiki/YUV –

答えて

0

YUVカラーモデルです。多分あなたはRGBについてよく知っていますか? これは、YUVが輝度情報から色情報を分離する主な違いと似ています。これは多くのアプリケーションで便利です。

YUVをRGB値に変換する変換式があります。

赤の値はアルゴリズムによってどのように計算されますか? コードを読んでください。ここではもちろんの変換章のために特に重要である

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

:必要な数学は、私はあなたが少なくとも読み取り示唆コードのご理解を向上させるために...ラインで

を行下に書かれていますあなた...

関連する問題