Optical Flow
입력 영상과 이전 프레임의 비교로부터 움직임을 추정해 흐름장(FlowField)으로 출력합니다. 블록 단위로 휘도(0.299/0.587/0.114의 가중)의 시간 차이와 공간 기울기를 구하고, 법선 플로우 -It・∇I / |∇I|²(Lucas-Kanade의 1탭 버전)로 변위를 구한 뒤, 1/deltaTime을 곱해 “UV 변위/초”로 고치고 있습니다.
- Block Size — Small8 / Medium16(기본값) / Large32 드롭다운. 블록이 클수록 큰 움직임을 잡아내고, 결과는 거칠어집니다
- Scale — 추정 결과에 곱하는 배율. 0~8로 클램프됩니다, 기본값 1(
currentScale)
이상치 억제를 위해 1프레임당 변위는 1블록 2개분이 상한으로 클램프됩니다. 너무 빠른 움직임은 한계에 걸립니다.
연결 직후와 프로젝트 로드 직후의 1프레임은 비교의 기준을 만들기만 하고 추정은 하지 않습니다(출력은 클리어됩니다).
출력 해상도는 입력의 1/8, 포맷은 RGHalf입니다. 장은 저주파이므로 소비하는 쪽이 bilinear로 읽는다는 전제로 가볍게 만들어져 있습니다.
추정 결과를 확인할 때는 Field Visualize를, 움직임의 양을 하나의 값으로 만들고 싶을 때는 Motion Amount를 사용합니다.
영상
입력 포트
| Port ID | 타입 |
|---|---|
In | RenderTexture |
출력 포트
| Port ID | 타입 |
|---|---|
Flow | FlowFieldOutput |
스크립트에서 설정할 수 있는 멤버
| 경로 | 타입 |
|---|---|
currentScale | float |
Synapse Apps (스크립팅)
await synapse.modules.create({ type: "OpticalFlow" }) 