Khám phá những nguyên lý cơ bản của luồng quang học trong thị giác máy tính. Tìm hiểu cách các vectơ chuyển động thúc đẩy khả năng hiểu video và tăng cường khả năng theo dõi trong Ultralytics YOLO26.
Luồng quang học là mô hình chuyển động biểu kiến của các vật thể, bề mặt và cạnh trong một cảnh hình ảnh do chuyển động tương đối giữa người quan sát và cảnh đó gây ra. Trong lĩnh vực thị giác máy tính , khái niệm này rất quan trọng để hiểu động lực học theo thời gian trong các chuỗi video. Bằng cách phân tích sự dịch chuyển của các pixel giữa hai khung hình liên tiếp, các thuật toán luồng quang học tạo ra một trường vectơ, trong đó mỗi vectơ biểu thị hướng và độ lớn của chuyển động tại một điểm cụ thể. Tín hiệu hình ảnh cấp thấp này cho phép các hệ thống trí tuệ nhân tạo không chỉ nhận biết được những gì có trong hình ảnh, mà còn cả cách nó chuyển động, thu hẹp khoảng cách giữa phân tích hình ảnh tĩnh và hiểu video động.
Việc tính toán luồng quang học thường dựa trên giả định về sự ổn định độ sáng, cho rằng cường độ của một pixel trên một vật thể vẫn không đổi từ khung hình này sang khung hình khác, ngay cả khi nó di chuyển. Các thuật toán sử dụng nguyên tắc này để giải các vectơ chuyển động bằng hai phương pháp chính:
Mặc dù thường được sử dụng cùng nhau, điều quan trọng là phải phân biệt giữa luồng quang học và theo dõi đối tượng . Luồng quang học là một thao tác cấp thấp mô tả chuyển động tức thời của pixel; nó không tự hiểu được danh tính hoặc tính bền vững của đối tượng.
Ngược lại, theo dõi đối tượng là một tác vụ cấp cao giúp định vị các thực thể cụ thể và gán cho chúng một ID nhất quán theo thời gian. Các trình theo dõi tiên tiến, chẳng hạn như những trình được tích hợp trong Ultralytics YOLO26 , thường thực hiện phát hiện đối tượng để tìm đối tượng và sau đó sử dụng các tín hiệu chuyển động—đôi khi được lấy từ luồng quang học—để liên kết các phát hiện trên các khung hình. Luồng quang học trả lời câu hỏi "các pixel này đang di chuyển nhanh như thế nào ngay bây giờ?", trong khi theo dõi trả lời câu hỏi "Xe số 5 đã đi đâu?".
Khả năng ước tính chuyển động ở cấp độ pixel là nền tảng cho rất nhiều công nghệ tiên tiến:
Ví dụ sau đây minh họa cách tính toán luồng quang học dày đặc bằng thư viện OpenCV , một công cụ tiêu chuẩn trong hệ sinh thái thị giác máy tính. Đoạn mã này sử dụng thuật toán Farneback để tạo ra bản đồ luồng giữa hai khung hình liên tiếp.
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")
Đối với các ứng dụng cấp cao yêu cầu theo dõi sự tồn tại của đối tượng thay vì chỉ theo dõi chuyển động pixel thô, người dùng nên xem xét các chế độ theo dõi có sẵn trong Ultralytics YOLO11 và YOLO26 . Các mô hình này đơn giản hóa sự phức tạp của phân tích chuyển động, cung cấp ID đối tượng và quỹ đạo mạnh mẽ ngay từ đầu cho các tác vụ từ giám sát giao thông đến phân tích bán lẻ .