수학과 신호 처리
실제 구현의 좌표, 정규화, 시간 변화와 적응형 증거 기준.
두 좌표 경로를 구분하기
기존 PoseNormalizer의 보정 기준 계산과 V3의 종횡비 보정 계산은 다릅니다. 서로 다른 길이 단위의 변수를 한 수식에 섞지 않습니다. 이 문서는 실제 소스에서 확인한 식만 다룹니다.
영상 종횡비 보정
ImagePlaneGeometry.Project는 정규화된 영상 좌표를 영상 높이 단위의 등방성 평면 좌표로 변환합니다.
| 표기 | 구현 변수 | 단위와 의미 |
|---|---|---|
CanonicalNormalizedPoint.X/Y | 각 축 크기로 정규화된 좌표 | |
PoseImageDimensions.Width/Height | 영상 픽셀 크기 | |
AspectCorrectImagePoint.X/Y | 영상 높이 단위, 미터 아님 |
return new AspectCorrectImagePoint(
point.X * dimensions.AspectRatio, point.Y);
이 변환은 화면의 가로·세로 크기가 다른 문제를 보정합니다. 깊이나 실제 세계 거리를 복원하지 않습니다. 유효하지 않은 영상 크기는 예외 또는 TryProject 실패가 됩니다. 기본 관절 신뢰도 기준은 이 경로에서 0.50이며 기존 보정 경로의 0.45와 구분됩니다.
기존 경로의 몸 기준 변위
PoseNormalizer.TryNormalize는 필터링한 골반의 수평 이동을 보정 시 어깨 너비로 나눕니다.
h_{x,t}는 filteredHip.X, h_{x,0}는 profile.HipCenter.X, S_0는 profile.ShoulderWidth입니다. 결과는 어깨 너비에 대한 비율입니다. 이 값 자체가 좌우 이동을 확정하지는 않습니다. 어깨의 동반 이동, 몸통 기울기, 시간 조건을 추가로 평가합니다.
시간 기반 스무딩
dt는 단조 캡처 시각 차이(초), tau는 SmoothingTimeConstantSeconds(기존 기본값 0.045 s)입니다. filteredShoulder와 filteredHip 등이 이 갱신을 사용합니다. 샘플 간격에 따라 가중치를 조절하기 위한 식입니다.
첫 샘플 또는 기본값 0.35 s를 넘는 타임스탬프 간격에서는 alpha = 1로 과거 필터 상태를 이어 쓰지 않습니다. 0 이하의 시간 차이와 중복·역순 시퀀스는 거부됩니다. 이 설정은 지연 시간 보장이 아닙니다.
기존 몸통 상승 속도
torsoCenter.Y와 previousTorsoCenter.Y는 필터링된 어깨·골반 중심의 중점이며, T_0는 profile.TorsoLength입니다. 단위는 몸통 길이/초입니다. 첫 샘플, 간격 리셋 또는 미분 불가 조건에서 코드는 속도를 0으로 초기화합니다. 이를 실제로 정지했다는 관측으로 확대 해석하면 안 됩니다.
V3 점프의 적응형 증거 기준
JumpV3Parameters는 로컬 정지 관측의 노이즈를 반영하되 최소 기준을 낮추지 않습니다.
f는 해당 신호의 절대 하한(floor), m은 restMedian, MAD는 rawRestMad입니다. RobustStatistics.GaussianConsistencyFactor가 1.4826입니다. 중앙 절대 편차는 로 계산됩니다. 변위와 속도 하한의 단위는 해당 입력 신호 단위를 따릅니다.
음수 또는 비유한 하한과 MAD, 비유한 중앙값은 NaN을 반환합니다. 이 수식은 신체 검증된 임계값을 뜻하지 않습니다. V3 일부 절대 하한은 합성 증거에서 유래합니다.
수치적 예외
종횡비 보정 경로의 AngleDegrees는 분모가 1e-12 이하이면 NaN을 반환합니다. 기존 MotionMath.Angle은 두 변 중 길이가 1e-6 이하이면 0을 반환합니다. 두 구현 모두 역코사인 전에 코사인을 [-1,1]로 제한하지만 예외 반환값은 다릅니다. 경로를 바꾸며 동일한 의미로 취급하지 않습니다.