Comparatif de stabilisation avec Deshaker (plugin VirtualDub) et DePan (Plugin avisynth)


Le but de cette page n'est pas d'analyser la configuration de Deshaker (voir liens en annexe) mais d'essayer d'optimiser au maximun DePan tout en gardant Deshaker (dans sa configuration par défaut) comme référence.

La réputation de Deshaker n'est plus à faire, on trouve de nombreux exemples de stabilisation sur internet. En revanche le Plugin DePan pour avisynth est beaucoup moins connu et néanmoins fort interresant en se qui concerne la stabilisation de vidéo.
Sans avoir toutes les possibilités ni toute la puissance de Deshaker, Il permet de stabiliser de façon trés correcte tout en restant dans l'environement avisynth.
Le plus gros avantage est que le calcul des vecteurs du mouvement global se fait dans la même passe que la stabilisation.
Avec Deshaker et VDub il faut faire deux passages. 1 pour le calcul du mouvement, 1 pour la stabilisation.


I - Stabilisation brute


La configuration de Depan est cependant loin d'être evidente car il existe au départ plusieurs méthodes et algorithmes d'utilisation.
Calcul des vecteurs de mouvement. (équivalent à la 1ere passe de Deshaker)
Peut se faire à l'aide de DePanEstimate (package DePan) ou de MAnalyse-MDePan (package MvTools).

Avec DePanEstimate, les déplacement sur les axes X,Y + zoom sont analysés mais les rotations ne sont pas prisent en compte ce qui compromet la stabilisation de scènes à gros mouvements. Il est plutôt destiner à compenser les petits tremblements de camescopes tenus à la main.

Avec Les MvTools, on a sous la main un outil trés complet et performant d'analyse de mouvement qui prend en compte les axes X,Y, la rotation et le zoom.

Compensation du mouvement global (globalMotion) (équivalent à la 2ème passe de Deshaker)

Se fait à l'aide de DePanStabilize (package DePan).
Ici deux algorithmes sont au choix. "inertial" (method=1) ou "average" (method=2)

Ce qui donne 4 possibilités de stabilisation à tester.


II - Comparaison stabilisation brute entre Deshaker et DePan


Clip Test
1 - Estimation du mouvement avec DepanEstimate
Deshaker / DepanEstimate + DePanStabilize (methode "inertial")
Deshaker / DepanEstimate + DePanStabilize (methode "average")
2 -Estimation du mouvement avec les MvTools
Deshaker / MAnalyse-MDepan + DePanStabilize (methode "inertial")
Deshaker/ MAnalyse-MDepan + DePanStabilize (methode "average")
Configuration Deshaker
Cofiguration DePan -Script avisynth
* Dans cet exemple,j'ai désactivé la compensation du zoom les deux plugins afin de mieux mettre en évidence les différences entre la stabilisation Deshaker et les 4 stabilisations DePan.

DePanEstimate + DePanStabilize ("inertial")
clp = avisource("..")
globalmotion = clp.DePanEstimate(range=2 , zommax=1)
stabilize = clp.DePanStabilize(data=globalmotion , method=0 , cutoff=0.5)
return stabilize

DePanEstimate + DePanStabilize ("average")
clp = avisource("..")
globalmotion = clp.DePanEstimate(range=2 , zommax=1)
stabilize = clp.DePanStabilize(data=globalmotion , method=1 , cutoff=0.5)
return stabilize
DePanEstimate + DePanStabilize ("inertial")
clp = avisource("..")
globalmotion = clp.MDepan(MSuper(clp).MAnalyse(isb = false,blksize=4),thSCD1=400)
stabilize = clp.DePanStabilize(data=globalmotion , method=0 , cutoff=0.5)
return stabilize
DePanEstimate + DePanStabilize ("average")
clp = avisource("..")
globalmotion = clp.MDepan(MSuper(clp).MAnalyse(isb = false,blksize=4),thSCD1=400)
stabilize = clp.DePanStabilize(data=globalmotion , method=1 , cutoff=0.5)
return stabilize

Le visionnage des vidéos montre clairement que la stabilisation MvTools + DePanStabilize + méthode average est trés proche de la stabilisation de Deshaker.
C'est cette méthode que je vais garder pour la suite.
Les méthodes avec DepanEstimate sont totalement inefficaces ici. L'absence de compensation de la rotation est un handicap trop important pour stabiliser ce genre de vidéos.
La compensation globale de mouvement a stabilisé le centre de la vidéo mais a crée de nombreuses bordures noires lors des déplacements.
Deshaker comme DePan contiennent des outils qui vont essayer de reboucher au mieux les bordures noires.


III - Compensation des bordures (Edge Compensation)


Il existe plusieurs méthodes qui essayent de compenser les bandes noires laissées par la compensation Globale de mouvement. Ces méthodes peuvent fonctionner indépendemment les unes des autres ou ensemble. Chaque compensation de mouvement est un cas particulier et, que se soit avec Deskaker ou DePan, il est nécessaire de chercher manuellement la meilleure combinaison.

1ere méthode: Le zoom global fixe.
Consiste à zoomer de façon à recouvrir les bandes les plus larges. Il est automatique dans Deshaker (fixed zoom) et il reconnait les changement de scènes .-La valeur est variable entre deux scènes
Dans Depan il est manuel (zoominit) et fixe pour la totalité de la source à traiter. (il vaut mieux donc travailler avec des scènes -rush élémentaires).
2ème méthode: Le" zoom adaptative"
Le zoom est variable pour chaque frame et s'adapte à la taille des bandes noires. (grosses bandes--zoom important ; faible bandes -zoom faible)
Pour éviter les effets de pompages importants, son amplitude et sa vitesse sont limités.
Dans Deshaker, la valeur de zoom adaptative est calculé avec la valeur de stabilisation de zoom (motion smoothness zoom doit être impérativement activée) et le resultat est trés correct.
Dans Depan, La correction est faible ou buggée et du pompage apparait.

3ème méthode: Le remplissage des bordures (fill borders)
L'information manquante est récupérée à partir des frames adjacentes.
Dans Deshaker, un algorithme complexe analyse 30 frames (par défaut) avant et aprés et reconstruit les bandes noires. Le résultat est assez bluffant même si c'est loin d'être parfait.
La mise en place est assez pénible (dut aux limitations de VirtualDub) car le programme ajoutes 30 frames noires en début, et supprime 30 frames en fin de rush. De plus l'audio est décalé d'autant.
Il faut donc - rajouter 30 frames quelconques en fin de rush (append video ) , corriger l'audio et couper les frames noires d'intro au montage.

Avec Depan c'est beaucoup plus simple, le plugin se contente de copier les frames adjacentes dans les bordures.
Si il y a peu de mouvement entre deux frames (bandes noires faibles) c'est correct, avec un fort mouvement c'est nettement moins bon. Il est difficile d'utiliser plus de 3 frames (avant et aprés)
Paramètres prev et next
4ème méthode: Deux méthodes exotiques
Deshaker: extrapolates color in borders
Comme son nom l'indique, rmpli les bordures avec un flou du même ton que les pixels environnant. (quasiment même methode que celle utilisé pour supprimer des logos)
C'est trés -trés lent si les bordures sont grandes et ça peut aider ponctuellement


DePan: mirror
Rempli les bordures par un effet miroir pris sur les pixels de l'autre coté de la bordure. Cet effet peut être configuré indépendemment pour chaque coté de la vidéo.
Cet effet peut être trés utiles sur des motifs unis (ciel, vegétation) mais produire un rendu trés "strange" sur des motifs géométriques (batiments..) et des grosses bordures .

IV - Comparaison des compensation de bordures entre Deshaker et DePan


1 - Zoom adaptative
Deshaker adaptive zoom / DePan addzoom = true
2 - Compensation de bordures
Deshaker 30 frames / DePan : prev=3 , next=3
Deshaker fill in 30 frames / DePan : prev=3 , next=3 , mirror=15
3 - Stabilisation finale
Deshaker / Depan
Original / DePan
Original / Deshaker
 

V - conclusion


Combiné aux MvTools pour la recherche des vecteurs de mouvements et à la méthode average , la stabilisation avec DePanstabilize est trés efficace. Elle est absolument comparable a celle obtenue avec Deshaker.
Malhereusement, l'interpolation des bordures noires crées par la stabilisation est nettement moins avancée.

La méthode adaptative zoom est trés efficace avec Deshaker. (Il faut au préalable avoir impérativement enclenché la stabilisation zoom :motion smoothness zoom)
Les bordures restante peuvent être trés correctement "rebouchées" en cochant: use previous and futures frames to fill in borders.
Cette méthode est cependant un peu compliquée à mettre en oeuvre.
Deux zooms fixes sont à disposition. Le premier - Edge compensation "fixed zoom" - est lié a la taille de la plus grande bordure noires restante et est reinitialisé
pour chaque scène.
Le second est un zoom global -extra zoom factor- pour la totalité de la vidéo.
Enfin une interpolation (lente) de couleur.

 

Du coté de DepanStabilize, l'utilisation du zoom adaptative - addzoom = true - à provoqué des pompages et je n'ai pas pu l'utiliser.
Le rebouchage des bordures restantes est nettement moins évolué que dans Deshaker et les paramètre prev , next et mirror doivent être parcimonieusement dosés pour éviter les artefacts.
Le zoom fixe global initzoom est indispensable si les bordures sont grandes et son utilisation implique le traitement indépendant de chaque scène ou rush.
Par contre, l'utilisation de la stabilisation en une passe est trés agréable.
L 'emploi d'un éditeur de script avs , genre AVSP, est indispensable pour visualiser et adapter au plus prés la compensation des bordures.