Python-bibliotheek voor het berekenen van ruimtelijke afgeleiden van optische stroom

Ik probeer een differentiële beeldsnelheid invariant te berekenen (bijvoorbeeld krul, divergentie, vervorming, enz.) Van een video met OpenCV in Python. Om dat te doen, moet ik de ruimtelijke afgeleiden in de x, y-richtingen van de optische stroom berekenen. Helaas lijkt OpenCV alleen de API's te leveren voor het berekenen van optische flow, niet de afgeleide ervan.

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
Het is ook niet echt een bibliotheek ... het is ook een code die iemand zelf heeft geschreven: P
toegevoegd de auteur Magsol, de bron
Het zou heel goed kunnen; in mijn googelen rond de enige resultaten die ik heb gevonden voor "derivaten van optische stroom" zijn 1) hoe optische stroom te berekenen, en 2) zeer technische wetenschappelijke artikelen die moeilijk te verteren zijn. Ik hoopte dat er al een bibliotheek bestond, maar in plaats daarvan zou ik het zelf kunnen schrijven als ik kon achterhalen wat ik daar aan het doen ben. Ik begrijp het hoofdidee, maar de technische details zijn dubieus omdat ik er geen goede verklaring van kan vinden.
toegevoegd de auteur Magsol, de bron
Waarom schrijf je de code zelf? Dump de code van die persoon in een map, voeg een __ init __. Py en import toe.
toegevoegd de auteur Blender, de bron
Een bibliotheek in Python is slechts een map met daarin Python-bestanden. Is het berekenen van de afgeleide van de optische stroom ook niet een vrij eenvoudige taak? Je hoeft alleen maar de gegevens glad te strijken, deze te benaderen met een polynoom en dan gewoon de polynoom te differentiëren.
toegevoegd de auteur Blender, de bron

1 antwoord

Dit is de manier waarop ik het zie (ik heb een beetje met optische stroom gewerkt):

U wilt de individuele partiële afgeleiden van het optische stroomveld berekenen; één voor de richting x en één voor de y .

Ik zou het probleem als volgt proberen op te lossen:

  • Splits je flow array/matrix in twee matrices: x en y flow.
  • Voor elk daarvan kunt u de naïeve route kiezen en gewoon een eenvoudig verschil maken: derivative = current_state - last_state . Maar deze aanpak is erg rommelig, omdat de afgeleide gevoelig is voor de kleinste fout.
  • Om dat tegen te gaan, zou u één brok van uw datapunten (misschien een hele rij?) kunnen benaderen met een regressiecurve die gemakkelijk differentieerbaar is, zoals een polynoom.

Het verschil dat bij benadering curve en je bent goed om te gaan.

U kunt ook afzonderlijke matrices eenvoudigweg gladstrijken en een naïef verschil maken, dat veel sneller moet zijn dan datapunten, maar toleranter moet zijn voor fouten.

0
toegevoegd
Dit is allemaal logisch. Ik veronderstel dat ik op zoek was naar een conceptuele verbinding tussen de intuïtie op hoog niveau (een gemakkelijk te differentiëren polynoom voor de gegevens) en de code om die taak uit te voeren. Ik vond de scipy.signal bibliotheek die lijkt te hebben wat ik nodig heb, maar nu loop ik tegen Python TypeErrors aan. Dat verdient echter waarschijnlijk zijn eigen vraag. Bedankt voor je hulp! Houd ook van Blender! :)
toegevoegd de auteur Magsol, de bron
Lol, geen probleem. Ik hou van dit soort dingen.
toegevoegd de auteur Blender, de bron