rPPG (remote Photoplethysmogram)의 POS 알고리즘으로 잘 알려진 "Algorithmic Principles of Remote-PPG" 를 읽어보며 정리한 글.
Abstract
-
해당 논문 이전에 rPPG 알고리즘들이 여럿 나왔다. (ex. PCA/ICA, CHROM, PBV, 2SR)
-
수학적으로 rPPG 모델링을 수행해 이전 알고리즘들의 장/단점을 분석하고
-
수학적 모델에 기반한 POS (Plane-Orthogonal-to-Skin) 알고리즘을 새로 제안한다.
Skin reflection model
해당 파트에선 수학적으로 rPPG 문제를 모델링했다.
rPPG 문제의 구성요소는 크게 3가지로, 광원 (Light source), 카메라, 혈관 (Blood vessels) 이다. 이때, 광원이 피부 표면에서 반사되는 것이 specular reflection, 피하조직까지 내려갔다 반사되는 것이 diffuse reflection 이고, 이 두가지 반사의 합이 카메라로 들어가게 된다.
카메라에 들어오는 빛 (pixel) 을 , specular reflection 을 , diffuse reflection을 , noise를 이라 하면 이미지의 색상값을 아래 수식으로 표현 할 수 있다.
이를 조금 더 가다듬으면... (상세 내용은 논문참조)
기본적으로 color를 3-dim vector로 생각한다. 또한, vector의 크기와 방향(unit vector)을 구분해 표기한다.
Existing rPPG methods
이 파트에선 기존 방법들을 위 수식에 기반해 분석했다.
2SR을 제외한 기존 방법들은 (PCA, ICA, CHROM, PBV) 얼굴 이미지에서 RGB 평균값을 구해 3-class time-series data를 분석한 것이다. 이는 위 수식 상 를 모든 에 대해 평균 낸 값을 사용하는 것이며 이러면 noise term 가 사라진다.
위 수식을 전개하면,
이렇게 되고, 세 신호 ()의 linear mixture로 구성되어 linear projection을 통해 세 신호를 분리할 수 있다 한다.
Model-based methods (PBV, CHROM)
PBV, CHROM 은 model-based method 로써 각 color component의 knowledge 를 활용한다. (ex. )
먼저, temporal normalization을 통해 수식 (8)의 DC component 를 normalize 해준다. Temporal normalization : RGB 각 time series를 각각의 temporal mean 으로 나눠줌.
는 temporal mean 이고, 이는 영상 데이터를 통해 구할 수 있다. 이를 통해 normalization matrix N을 정의할 수 있고, 이를 에 적용하여 를 정의한다.
이러면 신호가 Intensity, Specular, Pulse 파트로 나뉘게 되고, 이 DC component 가 제거된 신호가 된다. (zero-mean)
왜 zero-mean signal 을 만들까?
이제 살펴볼 PBV, CHROM 방법은 위 신호를 특정 plane 에 projection 하여 신호를 de-mixing 한다. 이때, 신호가 zero-mean 이 아니라면 plane을 signal의 mean을 중심으로 하도록 정의해야 하는데, 이보다 signal을 zero-mean 으로 바꾸고, plane을 origin을 중심으로 하도록 정의하는게 projection 연산시 편하다
PBV
PBV는 위 signal 을 와 나란한 vector 로 projection 한다. 는 아래 수식을 통해 구한다.
위 수식에서 첫번째 항으로 들어간 expectation은 ensemble average 인데, ergodic process로 가정해 time average를 쓴다.
이때, 가 prior knowledge 이고, 논문상엔 를 썼다 한다.
CHROM
CHROM은 prior knowledge로 average skin-tone vector 를 사용한다.
이를 이용해 mapping matrix 을 구하고, 이를 signal 에 적용해준다.
이럼 specular reflection vector 가 white color 와 유사해진다 하는데 왜 그런지 모르겠다.
어쨌든, 이 신호를 white color vector 과 수직한 평면()에 projection 시키면 아래 신호가 나온다.
그럼 신호 는 motion-induced signal과 pulsatile signal 의 linear mixture가 되는데, 이 때, 신호 의 첫번째 컴포넌트 과 에 각각 in-phase signal / anti-phase signal 로 들어간단다. (왜 그런지 모르겠다 ㅠ)
이렇게 in-phase / anti-phase 로 각각 들어가면 alpha-tuning 이라는 기법을 이용해 신호를 조합하면 pulsatile signal 은 증폭하고, motion-induced signal 은 감소 시킬 수 있다. (보강/상쇄간섭 느낌)
POS
본 논문에서 제안하는 새로운 방법이다. CHROM 과 비슷하나, CHROM 에선 specular reflection signal 을 없애고 motion-induced + pulsatile signal 을 얻어냈지만, POS 에선 motion-induced (intensity signal) 를 없애고 specular + pulsatile signal 을 얻어낸다.
에서 intensity signal 의 방향은 (white color) 이기 때문에, 에 수직한 plane 에 projection 시키면 intensity signal 은 쉽게 사라진다.
이제, 의 두 axis 를 어떻게 잡느냐가 매우 중요한데, 어떤 축에 대해 projection 하는지에 따라 나오는 signal 의 퀄리티가 매우 달라진다. 아래 그림에서 가 의 axis 라 가정하고 시그널을 뽑은 것인데, 에서 가장 좋은 신호가 나오고, 에서 가장 안 좋은 신호가 나오는 걸 볼 수 있다.
다행히 본 논문에서 최적의 axes 를 찾아줬다.
위 matrix 를 이용해 projection 하면 CHROM 과 동일하게 두 컴포넌트를 가지는 signal 가 나오고, 똑같이 alpha-tuning 을 진행해주면 된다. 다만 여기선 가운데 부호가 반대인데, axes의 특성상 in/anti-phase 가 바뀐단다.
끝!
다음엔 해당 논문을 구현해 코드를 올려봐야겠다.