Optik akışın mekansal türevlerini hesaplamak için Python kütüphanesi

Python'da OpenCV kullanarak bir videodan farklı görüntü hızı değişmezlerini (ör. Kıvrılma, ıraksama, deformasyon, vb.) Hesaplamaya çalışıyorum. Bunu yapmak için, uzamsal türevleri optik akışının x, y yönlerinde hesaplamalıyım. Ne yazık ki, OpenCV sadece, türevlerini değil, optik akışı hesaplamak için API'ler tedarik ediyor gibi görünmektedir.

Are there any Python libraries out there for computing spatial derivatives of optical flow? I found this SO question that was somewhat similar Lucas Kanade Optical Flow, Direction Vector, and there is code the person wrote for computing spatial derivatives, but if at all possible I'd love a library rather than writing the code myself. Any suggestions would be appreciated!

0
Bu gerçekten bir kütüphane de değil ... aynı zamanda birilerinin kendilerini yazdığını da kodluyor: P
katma yazar Magsol, kaynak
Çok iyi olabilirdi; "optik akış türevleri" için bulduğum tek sonuç etrafında benim googling 1) optik akış, ve 2) sindirilmesi zor olan çok teknik bilimsel makaleler. Zaten var olan bir kütüphaneyi umuyordum, ama bunun yerine, o konuda ne yaptığımı anlayabilseydim kendim yazabilirdim. Ana fikri anlıyorum, ama teknik detaylarını açıklıyorum, çünkü iyi bir açıklama bulamadım.
katma yazar Magsol, kaynak
Kodu neden kendiniz yazıyorsunuz? Bu kişinin kodunu bir klasöre dökün, bir __ init __. Py ve içe aktarın ekleyin.
katma yazar Blender, kaynak
Python'daki bir kütüphane, içinde Python dosyaları bulunan bir klasördür. Ayrıca, optik akışın türevini oldukça basit bir iş olarak hesaplamıyor mu? Verileri yumuşatmanız, bir polinomla yaklaşmanız ve daha sonra polinomları ayırt etmeniz yeterlidir.
katma yazar Blender, kaynak

1 cevap

Gördüğüm yol budur (optik akışla biraz çalıştım):

Optik akış alanının bireysel kısmi türevlerini hesaplamak istersiniz; x yönü için bir ve y için bir tane.

Sorunu şu şekilde çözmeye çalışırdım:

  • Akış dizinizi/matrisinizi iki matris olarak ayırın: x ve y akış.
  • Bunların her biri için, naif rotaya gidebilir ve basit bir fark yaratabilirsiniz: derivasyon = current_state - last_state . Ancak bu yaklaşım çok dağınıktır, çünkü türev en ufak bir hataya karşı duyarlı olacaktır.
  • Buna karşılık olarak, bir polinom gibi kolayca ayırt edilebilen bir regresyon eğrisi ile veri noktalarınızın bir kısmını (belki de bütün satır?) yaklaşık olarak tahmin edebilirsiniz.

Sadece eğriyi birbirinden ayıran ve gitmek için iyi bir şey.

Ayrıca, sadece bireysel matrisleri pürüzsüz hale getirebilir ve veri noktalarına yaklaşmaktan çok daha hızlı olması gereken, ancak hataya karşı daha toleranslı olması gereken, naif bir fark yaratabilirsiniz.

0
katma
Tüm bunlar çok mantıklı. Sanırım aradığım şey, yüksek seviyeli sezgi (verilere kolaylıkla ayırt edilebilen bir polinom uydurma) ile bu görevi yerine getirme kodu arasındaki bazı kavramsal bağlantılar içindi. İhtiyacım olan şeye sahip gibi görünen scipy.signal kütüphanesini buldum ama şimdi Python TypeErrors'a koşuyorum. Ancak, bu muhtemelen kendi sorusunu hak ediyor. Yardımınız için teşekkürler! Ayrıca, aşk Blender! :)
katma yazar Magsol, kaynak
Lol, sorun değil. Bu tür şeyleri severim.
katma yazar Blender, kaynak