개발

논문 "Algorithmic Principles of Remote-PPG"

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 이고, 이 두가지 반사의 합이 카메라로 들어가게 된다.

2023-07-17-195628.png

카메라에 들어오는 빛 (pixel) 을 C(t)C(t), specular reflection 을 vs(t)v_s(t), diffuse reflection을 vd(t)v_d(t), noise를 vn(t)v_n(t) 이라 하면 이미지의 색상값을 아래 수식으로 표현 할 수 있다.

2023-07-17-211532.png

이를 조금 더 가다듬으면... (상세 내용은 논문참조)

2023-07-17-211357.png

기본적으로 color를 3-dim vector로 생각한다. 또한, vector의 크기와 방향(unit vector)을 구분해 표기한다.

Existing rPPG methods

이 파트에선 기존 방법들을 위 수식에 기반해 분석했다.

2SR을 제외한 기존 방법들은 (PCA, ICA, CHROM, PBV) 얼굴 이미지에서 RGB 평균값을 구해 3-class time-series data를 분석한 것이다. 이는 위 수식 상 Ck(t)C_k(t) 를 모든 kk 에 대해 평균 낸 값을 사용하는 것이며 이러면 noise term vn(t)v_n(t) 가 사라진다.

2023-07-17-212012.png

위 수식을 전개하면,

2023-07-17-212050.png

이렇게 되고, 세 신호 (i(t),s(t),p(t)i(t), s(t), p(t))의 linear mixture로 구성되어 linear projection을 통해 세 신호를 분리할 수 있다 한다.

Model-based methods (PBV, CHROM)

PBV, CHROM 은 model-based method 로써 각 color component의 knowledge 를 활용한다. (ex. usu_s)

먼저, temporal normalization을 통해 수식 (8)의 DC component 를 normalize 해준다. Temporal normalization : RGB 각 time series를 각각의 temporal mean 으로 나눠줌.

2023-07-18-230054.png

C(t)ˉ\bar{C(t)} 는 temporal mean 이고, 이는 영상 데이터를 통해 구할 수 있다. 이를 통해 normalization matrix N을 정의할 수 있고, 이를 C(t)C(t)에 적용하여 Cn(t)C_n(t)를 정의한다.

2023-07-18-230506.png

이러면 신호가 Intensity, Specular, Pulse 파트로 나뉘게 되고, Cn(t)1C_n(t) - 1이 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 을 p(t)p(t)와 나란한 zz vector 로 projection 한다. zz는 아래 수식을 통해 구한다.

2023-07-18-231901.png

2023-07-18-232011.png

위 수식에서 첫번째 항으로 들어간 expectation은 ensemble average 인데, ergodic process로 가정해 time average를 쓴다.

2023-07-18-232152.png

이때, upbvu_{pbv}가 prior knowledge 이고, 논문상엔 [0.33,0.77,0.53]T[0.33, 0.77, 0.53]^T 를 썼다 한다.

CHROM

CHROM은 prior knowledge로 average skin-tone vector uskin=[0.77,0.51,0.38]Tu_{skin} = [0.77, 0.51, 0.38]^T를 사용한다.

이를 이용해 mapping matrix MM을 구하고, 이를 signal 에 적용해준다.

2023-07-18-233748.png

이럼 specular reflection vector 가 white color 와 유사해진다 하는데 왜 그런지 모르겠다.

2023-07-18-233906.png

어쨌든, 이 신호를 white color vector 11 과 수직한 평면(PcP_c)에 projection 시키면 아래 신호가 나온다.

2023-07-18-235351.png

그럼 신호 SS 는 motion-induced signal과 pulsatile signal 의 linear mixture가 되는데, 이 때, 신호 SS의 첫번째 컴포넌트 S1S_1S2S_2에 각각 in-phase signal / anti-phase signal 로 들어간단다. (왜 그런지 모르겠다 ㅠ)

이렇게 in-phase / anti-phase 로 각각 들어가면 alpha-tuning 이라는 기법을 이용해 신호를 조합하면 pulsatile signal 은 증폭하고, motion-induced signal 은 감소 시킬 수 있다. (보강/상쇄간섭 느낌)

2023-07-18-234442.png

POS

본 논문에서 제안하는 새로운 방법이다. CHROM 과 비슷하나, CHROM 에선 specular reflection signal 을 없애고 motion-induced + pulsatile signal 을 얻어냈지만, POS 에선 motion-induced (intensity signal) 를 없애고 specular + pulsatile signal 을 얻어낸다.

Cn(t)C_n(t) 에서 intensity signal 의 방향은 11 (white color) 이기 때문에, 11 에 수직한 plane 에 projection 시키면 intensity signal 은 쉽게 사라진다.

2023-07-18-234003.png

이제, PpP_p 의 두 axis 를 어떻게 잡느냐가 매우 중요한데, 어떤 축에 대해 projection 하는지에 따라 나오는 signal 의 퀄리티가 매우 달라진다. 아래 그림에서 zzPpP_p 의 axis 라 가정하고 시그널을 뽑은 것인데, z2z_2에서 가장 좋은 신호가 나오고, z3z_3 에서 가장 안 좋은 신호가 나오는 걸 볼 수 있다.

2023-07-18-235616.png

다행히 본 논문에서 최적의 axes 를 찾아줬다.

2023-07-18-235910.png

위 matrix 를 이용해 projection 하면 CHROM 과 동일하게 두 컴포넌트를 가지는 signal SS 가 나오고, 똑같이 alpha-tuning 을 진행해주면 된다. 다만 여기선 가운데 부호가 반대인데, axes의 특성상 in/anti-phase 가 바뀐단다.

2023-07-19-000034.png

끝!

다음엔 해당 논문을 구현해 코드를 올려봐야겠다.