Optical Flow
Optik akış, iki video karesi arasındaki her pikselin hareketini bir hareket vektörleri alanı olarak tahmin eder. Klasik ve derin öğrenme yöntemleri, kullanım alanları ve OpenCV kodu.
Optik akış, iki görüntü, genellikle art arda gelen video kareleri arasındaki parlaklık desenlerinin görünür hareketidir. Optik akış algoritması, ilk karedeki her piksel için, o pikselin içeriğinin ikinci karede nerede göründüğünü gösteren 2B bir yer değiştirme vektörü (dx, dy) tahmin eder. Akış alanı adı verilen sonuç, hareketli nesnelerden ve kameranın kendisinden kaynaklanan hareketi yakalar; bu sayede bilgisayarlı görü sistemleri videoyu sabitleyebilir, öz hareketi tahmin edebilir, kareleri araya ekleyebilir ve eylemleri tanıyabilir. Akış, gerçek 3B hareketi değil, kameranın gördüğünü ölçer: Yerinde dönen tamamen tekdüze bir küre akış üretmez; hareket eden bir gölge ise fiziksel olarak hiçbir şeyin hareket etmediği yerde akış üretir.
Optik Akış Nasıl Tahmin Edilir#
Çoğu yöntem, bir noktanın hareket ederken aynı yoğunluğu koruduğu varsayımı olan parlaklık sabitliğiyle başlar. Bu varsayımı doğrusallaştırınca her piksel için bir denklem elde edilir: Ix·u + Iy·v + It = 0; burada Ix, Iy ve It görüntünün x, y ve zamana göre türevleridir; (u, v) ise bilinmeyen akıştır. Tek bir denklem iki bilinmeyeni belirleyemez; bu, açıklık problemidir: Küçük bir pencereden düz bir kenara bakıldığında yalnızca kenara dik hareket ölçülebilir. Klasik yöntemler bu sorunu çözmek için ikinci bir varsayım ekler:
- Lucas-Kanade yöntemi (1981): Akışın küçük bir pencere içinde sabit olduğunu varsayar ve pencere içindeki tüm piksellerin denklemlerini en küçük kareler yöntemiyle çözer. Pencere köşeler gibi iki yönde gradyan içerdiğinde işe yarar; bu nedenle genellikle seçili özellik noktalarında seyrek akış olarak çalıştırılır.
- Horn-Schunck yöntemi (1981): Akış alanının tüm görüntü boyunca düzgün olduğunu varsayar ve küresel bir optimizasyon çözer; böylece her piksel için yoğun akış üretir.
Her iki varsayım da büyük hareketlerde geçerliliğini yitirir. Bu nedenle pratik yöntemler, görüntü piramidi üzerinde kabadan inceye akış tahmini yapar; tam çözünürlükteki 16 piksellik bir hareket, piramitte üç seviye aşağıda 2 piksellik bir harekete karşılık gelir:
OpenCV, seyrek noktalar için piramitsel Lucas-Kanade yöntemini ve yoğun akış için Gunnar Farnebäck'in 2003 tarihli polinom açılımı algoritmasını uygular. Bu kod, rastgele bir dokuyu bilinen bir miktarda hareket ettirir ve yoğun Farnebäck akışıyla hareketi geri bulur:
import cv2
import numpy as np
# A smooth random texture, then the same texture moved 3 px right and 2 px down
rng = np.random.default_rng(0)
texture = cv2.GaussianBlur(rng.random((240, 320)), (0, 0), 3)
frame1 = cv2.normalize(texture, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)
frame2 = np.roll(frame1, shift=(2, 3), axis=(0, 1))
# Dense Farneback optical flow: one (dx, dy) displacement vector for every pixel
flow = cv2.calcOpticalFlowFarneback(
frame1, frame2, None, pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.2, flags=0
)
print(f"flow field shape: {flow.shape}")
print(f"median motion: dx={np.median(flow[..., 0]):.2f}, dy={np.median(flow[..., 1]):.2f} pixels")Kod flow field shape: (240, 320, 2) ve median motion: dx=3.00, dy=2.00 pixels çıktısını verir: 76.800 pikselin her biri için iki bileşenli bir vektör; böylece yatayda 3 piksellik ve dikeyde 2 piksellik kayma bulunur.
Derin Öğrenme Yöntemleri#
FlowNet, gerçek videolarda temel doğru akış verisi nadiren bulunduğundan, bir evrişimli sinir ağının 2015'te sentetik eğitim verilerinden uçtan uca akış öğrenebileceğini gösterdi. PWC-Net, klasik yöntemlerin piramit, çarpıtma ve maliyet hacmi fikirlerini kompakt bir ağa taşıdı. ECCV 2020 en iyi makale ödülünü kazanan RAFT, ilk karenin her pikselini ikinci karenin her pikseliyle bir korelasyon hacminde karşılaştırır ve tek bir yüksek çözünürlüklü akış alanını yinelenen yinelemeli güncellemelerle iyileştirir. Öğrenilmiş yöntemler, büyük yer değiştirmeleri, hareket bulanıklığını ve dokusuz bölgeleri klasik yöntemlerden çok daha iyi ele alır; ayrıca torchvision önceden eğitilmiş RAFT modelleri sunar. Doğruluk, MPI Sintel ve KITTI 2015 gibi kıyaslama veri kümelerinde, tahmin edilen ve gerçek akış vektörleri arasındaki piksel cinsinden ortalama mesafe olan uç nokta hatası (EPE) ile raporlanır.
Optik Akış ve İlgili Terimler#
- Nesne takibi: Nesnelerin tamamını birçok kare boyunca kalıcı kimliklerle izler; optik akış ise iki kare arasındaki piksel bazında hareketi tanımlar ve nesneler hakkında bilgi sahibi değildir. Takip algoritmaları akışı bir ipucu olarak kullanır: Ultralytics YOLO'nun takip modunda, varsayılan TrackTrack takip algoritması ve BoT-SORT, seyrek Lucas-Kanade akışıyla (
gmc_method: sparseOptFlow) kamera hareketini tahmin eder; yarı çözünürlüklü bir karede 400 köşeye kadar izler, RANSAC ile bu köşelere bir dönme, ölçek ve öteleme uydurur ve yeni tespitlerle eşleştirmeden önce tahmin edilen her takip kutusunu bu harekete göre kaydırır. - Nokta takibi: Her pikselin iki kare arasındaki hareketini tahmin etmek yerine, uzun videolarda seçilen noktaları, örtülmelerin içinden geçerken bile takip eder.
- Sahne akışı: Stereo veya derinlik verilerinden tahmin edilen, uzaydaki noktaların 3B hareketidir. Optik akış, bu hareketin görüntü düzlemine izdüşümüdür.
- Video kodeği hareket vektörleri: H.264, HEVC ve AV1 kodlayıcıları, kareyi kodlamak için gereken bit sayısını en aza indirecek şekilde seçilen her blok için bir hareket vektörü depolar; bu nedenle vektörler çoğu zaman gerçek hareketten farklıdır.
Gerçek Dünya Uygulamaları#
- Video sabitleme: Kare boyunca baskın olan akış kamera sarsıntısını gösterir; yazılım her kareyi ters yönde çarpıtarak bu sarsıntıyı giderir.
- Kare enterpolasyonu: Ağır çekim ve kare hızı dönüştürme işlemleri, pikselleri akış vektörleri boyunca kısmen hareket ettirerek aradaki kareleri sentezler.
- Otonom araçlar ve dronlar: Akış, görsel odometriyi destekler; bir nesnenin akışının genişleme hızı ise yaklaşan çarpışmaya karşı uyarı verir.
- Eylem tanıma: 2014 tarihli iki akışlı ağ, eylemleri tek karelerden oluşan uzamsal akıştan ve art arda gelen 10 optik akış alanı yığınını alan zamansal akıştan sınıflandırdı.










