Khám phá sức mạnh của Optical Flow trong thị giác máy tính. Tìm hiểu cách nó ước tính chuyển động, tăng cường phân tích video và thúc đẩy sự đổi mới trong AI.
Dòng quang học là một khái niệm cơ bản trong thị giác máy tính , liên quan đến việc ước tính chuyển động biểu kiến của các vật thể, bề mặt và cạnh trong một khung cảnh trực quan. Chuyển động này được tính toán dựa trên chuyển động tương đối giữa người quan sát (chẳng hạn như camera) và khung cảnh. Kết quả của quá trình này là một trường vectơ, trong đó mỗi vectơ biểu diễn sự dịch chuyển của một điểm ảnh hoặc đặc điểm giữa hai khung hình video liên tiếp. Bằng cách phân tích các vectơ chuyển động này, hệ thống có thể hiểu chi tiết ở mức độ thấp về động lực học của khung cảnh, trả lời câu hỏi quan trọng về cách các điểm ảnh di chuyển theo thời gian.
Việc tính toán luồng quang học thường dựa trên giả định "độ sáng không đổi". Nguyên lý này giả định rằng cường độ điểm ảnh của một điểm cụ thể trên vật thể vẫn không đổi giữa các khung hình liên tiếp, ngay cả khi vật thể di chuyển. Các thuật toán sử dụng giả định này để track dịch chuyển. Có hai cách tiếp cận chính để xác định các trường chuyển động này:
Điều quan trọng là phải phân biệt luồng quang học với theo dõi đối tượng , vì chúng phục vụ các mục đích khác nhau trong một đường ống thị giác. Luồng quang học là một hoạt động cấp thấp mô tả chuyển động tức thời của các điểm ảnh mà không cần hiểu các điểm ảnh đó biểu diễn điều gì. Về bản chất, nó không duy trì được danh tính của một đối tượng theo thời gian.
Ngược lại, theo dõi đối tượng là một nhiệm vụ cấp cao, xác định vị trí các thực thể cụ thể và gán cho chúng một ID nhất quán trên các khung hình. Các chế độ theo dõi nâng cao, chẳng hạn như chế độ có sẵn trong Ultralytics YOLO11 , thường thực hiện phát hiện đối tượng trước, sau đó sử dụng tín hiệu chuyển động để liên kết các phát hiện. Mặc dù bộ theo dõi có thể sử dụng luồng quang học nội bộ để dự đoán vị trí, mục tiêu của bộ theo dõi là duy trì nhận dạng ("Xe số 4 đã đi đâu?"), trong khi mục tiêu của luồng quang học là lập bản đồ chuyển động ("Các pixel này di chuyển sang phải nhanh như thế nào?").
Dòng quang học là một công cụ đa năng được sử dụng trong nhiều ngành công nghiệp khác nhau để giải quyết các vấn đề phức tạp liên quan đến chuyển động.
Sau đây là Python Ví dụ minh họa cách tính toán luồng quang học dày đặc bằng thư viện OpenCV . Bài viết này sử dụng thuật toán Gunnar Farneback, một phương pháp phổ biến để ước tính luồng dày đặc.
import cv2
import numpy as np
# Load two consecutive frames (ensure these files exist)
frame1 = cv2.imread("frame1.jpg")
frame2 = cv2.imread("frame2.jpg")
# Convert frames to grayscale
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
# Calculate dense optical flow using Farneback's algorithm
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"Flow shape: {flow.shape}") # Output: (Height, Width, 2)
print(f"Max motion magnitude: {np.max(mag):.2f} pixels")
Đối với người dùng muốn tích hợp phân tích chuyển động với phát hiện đối tượng, các mô hình phát hiện Ultralytics có thể được kết hợp với các thuật toán luồng để tạo ra các quy trình phân tích mạnh mẽ. Trong khi luồng quang học cung cấp dữ liệu chuyển động thô, các mô hình cấp cao hơn như YOLO11 cung cấp khả năng hiểu ngữ nghĩa cần thiết để diễn giải chuyển động đó một cách hiệu quả. Hoạt động nghiên cứu và phát triển đang diễn ra đối với các mô hình như YOLO26 nhằm mục đích thống nhất hơn nữa khả năng hiểu không gian và thời gian để phân tích video đầu cuối nhanh hơn nữa.