Yolo 비전 선전
선전
지금 참여하기
용어집

옵티컬 플로우

컴퓨터 비전에서 광학 흐름의 기초를 탐구하세요. 모션 벡터가 비디오 이해를 주도하고 Ultralytics 추적 성능을 향상시키는 방식을 학습하세요.

광학 흐름은 관찰자와 장면 사이의 상대적 운동으로 인해 시각적 장면 내에서 물체, 표면 및 경계의 겉보기 운동 패턴을 의미합니다. 컴퓨터 비전 분야에서 이 개념은 영상 시퀀스 내 시간적 역학을 이해하는 데 기초가 됩니다. 두 연속 프레임 간 픽셀 변위를 분석함으로써, 광학 흐름 알고리즘은 벡터장을 생성합니다. 여기서 각 벡터는 특정 지점의 이동 방향과 크기를 나타냅니다. 이 저수준 시각적 단서는 인공지능 시스템이 단순히 이미지에 무엇이 있는지 인식하는 것을 넘어, 그것이 어떻게 움직이는지까지 인지할 수 있게 하여 정적 이미지 분석과 동적 영상 이해 사이의 간극을 메웁니다.

광학 흐름의 핵심 메커니즘

광학 흐름 계산은 일반적으로 밝기 불변성 가정에 의존하며, 이는 물체가 움직이는 동안에도 물체 상의 픽셀 강도가 프레임 간에 일정하게 유지된다는 것을 전제로 합니다. 알고리즘은 이 원리를 활용하여 두 가지 주요 접근법을 통해 운동 벡터를 구합니다:

  • 희소 광학 흐름: 이 방법은 특징 추출을 통해 검출된 모서리나 경계선과 같은 특정 하위 집합의 특징에 대한 운동 벡터를 계산합니다. 루카스-카나데(Lucas-Kanade) 방법과 같은 알고리즘은 계산 효율성이 높으며, 특정 관심 지점의 추적이 충분한 실시간 추론 작업에 이상적입니다.
  • 고밀도 광학 흐름: 이 접근법은 프레임 내 모든 픽셀에 대해 운동 벡터를 계산합니다. 훨씬 더 많은 연산이 필요하지만, 이미지 분할 및 구조 분석과 같은 정밀한 작업에 필수적인 포괄적인 운동 맵을 제공합니다. 현대적인 딥러닝 아키텍처는 대규모 데이터셋으로부터 복잡한 운동 패턴을 학습함으로써 고밀도 흐름 추정에서 전통적인 수학적 방법을 종종 능가합니다.

옵티컬 플로우 vs. 객체 추적

광학 흐름과 객체 추적은 종종 함께 사용되지만, 이를 구분하는 것이 매우 중요하다. 광학 흐름은 순간적인 픽셀 움직임을 설명하는 저수준 연산으로, 객체의 정체성이나 지속성을 본질적으로 이해하지 못한다.

반면, 객체 추적은 특정 개체를 찾아 시간에 걸쳐 일관된 ID를 할당하는 고차원 작업이다. Ultralytics 통합된 것과 같은 고급 추적기는 일반적으로 객체 탐지를 수행하여 개체를 찾은 후, 때로는 광학 흐름에서 파생된 동작 단서를 사용하여 프레임 간 탐지 결과를 연결한다. 광학 흐름은 "이 픽셀들이 지금 얼마나 빠르게 움직이는가"에 대한 답을 제공하는 반면, 추적은 "5번 차량이 어디로 갔는가?"에 대한 답을 제공합니다.

실제 애플리케이션

픽셀 단위의 움직임 추정 능력은 다양한 정교한 기술의 기반이 됩니다:

  • 자율주행 차량 및 로봇공학: 광학 흐름은 시각적 주행 거리 측정(visual odometry)에 활용되어 로봇이나 차량이 환경에 대한 자신의 상대적 움직임을 추정할 수 있게 합니다. 또한 시각 영역 내 물체의 확장 또는 이동 속도를 분석함으로써 깊이 추정 및 장애물 회피를 지원합니다.
  • 영상 안정화: 카메라와 편집 소프트웨어는 흐름 벡터를 활용해 detect 카메라 흔들림을 detect . 이러한 전체적인 움직임을 보정함으로써 시스템은 영상을 디지털 방식으로 안정화할 수 있습니다. 이는 스마트폰과 액션 카메라 같은 현대 소비자 가전제품의 표준 기능입니다.
  • 동작 인식: 스포츠 분석 및 보안 분야에서 픽셀의 시간적 흐름을 분석하면 시스템이 복잡한 인간 동작을 식별하는 데 도움이 됩니다. 예를 들어, 자세 추정 모델에 흐름 데이터를 추가하면 사지 움직임 속도를 기반으로 걷는 사람과 달리는 사람을 구분할 수 있습니다.
  • 비디오 압축: MPEG 비디오 코딩과 같은 표준은 모션 추정에 크게 의존합니다. 코덱은 모든 전체 프레임을 저장하는 대신 광학 흐름(모션 벡터)과 프레임 간 차이(잔차)를 저장하여 스트리밍 및 저장을 위한 파일 크기를 크게 줄입니다.

구현 예시

다음 예제는 컴퓨터 비전 생태계의 표준 도구인 OpenCV 사용하여 밀도 광학 흐름을 계산하는 방법을 보여줍니다. 이 코드 조각은 Farneback 알고리즘을 사용하여 연속적인 두 프레임 사이의 흐름 맵을 생성합니다.

import cv2
import numpy as np

# Simulate two consecutive frames (replace with actual image paths)
frame1 = np.zeros((100, 100, 3), dtype=np.uint8)
frame2 = np.zeros((100, 100, 3), dtype=np.uint8)
cv2.rectangle(frame1, (20, 20), (40, 40), (255, 255, 255), -1)  # Object at pos 1
cv2.rectangle(frame2, (25, 25), (45, 45), (255, 255, 255), -1)  # Object moved

# Convert to grayscale for flow calculation
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)

# Calculate dense optical flow
flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)

# Compute magnitude and angle of 2D vectors
mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])

print(f"Max motion detected: {np.max(mag):.2f} pixels")

원시 픽셀 움직임보다는 객체 지속성이 필요한 고급 애플리케이션의 경우, 사용자는 Ultralytics YOLO11 YOLO26에서 제공하는 추적 모드를 고려해야 합니다. 이 모델들은 움직임 분석의 복잡성을 추상화하여 교통 모니터링부터 소매 분석에 이르는 다양한 작업에 대해 즉시 사용 가능한 강력한 객체 ID와 궤적을 제공합니다.

Ultralytics 커뮤니티 가입

AI의 미래에 동참하세요. 글로벌 혁신가들과 연결하고, 협력하고, 성장하세요.

지금 참여하기