2017-04-20 7 views
-4

다음은 이미지 처리에 사용되는 코드입니다. 손가락을 카메라에 올려 놓으면 붉은 색의 강도를 확인하여 분당 심장 박동을 계산하는 앱에서이 코드를 발견했습니다. 이미지 프로세싱이 필요한 여러 장소에서 decodeYUV 메소드를 발견했습니다. 나는 여기서 두 가지를 알 것이다 :누군가이 이미지 처리 알고리즘을 설명 할 수 있습니까?

  1. YUV 란 무엇이며 왜 사용 되는가?
  2. 빨간색의 강도를 알아 내기 위해 알고리즘이 어떻게 작동합니까?

전자

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 여기

은 물론 변환 장에 대한 특별한 관심입니다 : 필요한 수학은

당신이 최소한 읽기 제안 코드의 이해를 개선하기 위해 ... 라인으로 라인을 작성 너 ...