letransfertpellicule

  • Increase font size
  • Default font size
  • Decrease font size

MVTools pour les nuls

Envoyer

Article en cours de rédaction.

Le plugin MVTools pour AviSynth 2.5 est une collection de fonctions pour l'estimation et la compensation de mouvement des objets dans les clips vidéo.
La compensation des mouvements peut être utilisée pour le lissage temporel des mouvements, la conversion de vitesse, la restauration d'images et bien d'autres tâches.


I) Description de MVTools

Ce plugin est composé de plusieurs fonctions qui sont appelées par un script AviSynth (.avs) en fonction des besoins :

  • Fonction d'estimation des mouvements : MVAnalyse. Cette fonction trouve les vecteurs de mouvement
  • Fonctions de compensation des mouvements : MVCompensate, MVMask. Ces fonctions utilisent les vecteurs découverts par MVAnalyse.

Le Plugin utilise la méthode d'estimation du mouvement "bloc-matching" (comme les codecs MPEG2 et MPEG4)
Au stade de l'analyse, le plugin divise les images en petits blocs et essaye de trouver pour chaque bloc dans l'image courante les blocs les plus semblables (matching) de l'image adjacente (précédente ou suivante).
Le déplacement relatif de ces blocs constitue le vecteur de mouvement. La principale mesure de similarité des blocs est la somme des différences absolues (SAD : sum of absolute differences) de tous les pixels de ces deux blocs comparés. Ce SAD est une valeur qui évalue la qualité de l'estimation du mouvement.
Le résultat de MVAnalyse est un clip spécial qui donne à AviSynth l'information des vecteurs de mouvement dans un certain format.

L'étape suivante est la compensation des mouvements : les autres fonctions du plugin (MVCompensate, MVMask...) lisent les vecteurs de mouvement et les utilisent pour déplacer des blocs ou des images en compensant leurs mouvements (ou bien réalisent d'autres compensations totales ou partielles des mouvements ou même des fonctions d'interpolation).
Chaque objet (bloc) dans une image (entièrement) compensée est placé dans la même position que cet objet dans l'image courante. Ainsi, on peut (par exemple) utiliser un lissage temporel fort, même pour les objets en mouvement assez rapide sans produire d'artefacts ennuyeux ou d'images fantômes. Les caractéristiques des objets et les bords coïncident si la compensation est parfaite.
Le plugin permet de créer des images adjacentes compensées pour chaque image courante, et il les lisse à l'aide d'une fonction interne.
Alternativement, on peut utiliser des images compensées et des images originales pour créer un clip entrelacé, en le lissant avec un filtre temporel externe, puis sélectionner les images d'origines nettoyées pour le clip final (voir des exemples sur le site de MVTools).

Bien sûr, l'estimation de mouvement et d'indemnisation n'est pas idéale et précise. Dans certains cas complexes (video avec fondus, mouvements très rapides, ou structures périodiques), l'estimation du mouvement peut être complètement erronée, et les images compensées seront fortement pixellisés et (ou) déformées.
Autre inconvénient : des scripts Avisynth complexes avec de nombreuses fonctions de compensation de mouvement consomment énormément de mémoire et aboutissent à des traitement extrêmement lents.
Toutefois, il serait dommage de se priver d'un outil aussi puissant, et qui donne le plus souvent des résultats très satisfaisants.

II) Description des fonctions

1) Paramètres communs

Les filtres qui utilisent les vecteurs de mouvement ont des paramètres communs : le niveau de détection des changements de scène et le drapeau d'activation des fonctions ISSE et MMX
Ils utilisent en outre un ou plusieurs vecteurs de flux, qui sont produites par MAnalyse.

thSCD1 (int) : seuil qui détermine si un bloc a changé entre l'image précédente et l'actuelle. Lorsqu'un bloc a changé, il signifie que l'estimation de mouvement n'est pas pertinente. Elle survient par exemple lors de changements de scènes. Il est donc l'un des seuils permettant d'ajuster le moteur de détection des changements de scène.
En l'augmentant, on réduira le nombre de blocs détectés comme changés. Cela peut être utile pour une vidéo bruitée ou agitée. Le seuil est comparée à la valeur de SAD (Somme des différences absolues, une valeur qui indique à quel point l'estimation du mouvement est correcte). Pour des blocs rigoureusement identiques, nous avons SAD = 0. Mais des blocs réels ont toujours des différences en raison de la complexité du mouvement des objets (zoom, rotation, déformation), l'échantillonnage des pixels discrets et le bruit vidéo. Supposons que nous comparons deux blocs de 8x8 avec tous les pixels différents de 5.
Dans ce cas, le SAD sera de 8x8x5 = 320. Le bloc ne sera pas détecté comme changé pour une valeur de thSCD1 de 400. Si vous utilisez des blocs de 4x4, le SAD sera de 320 / 4. Si vous utilisez des blocs de 16x16, le SAD sera de 320 * 4. En réalité, ce paramètre est réglé en interne dans MVTools, et vous devez toujours utiliser une valeur réduite à des blocs de taille 8x8. Par défaut, la valeur de thSCD1 est de 400 (depuis la version 1.4.1).

thSCD2 (int)
: seuil qui définit combien de blocs doivent changer pour l'image soit considérée comme un changement de scène. Il varie de 0 à 255, 0 Signifiant 0 %, 255 signifiant 100 %. Par défaut, sa valeur est de 130 (c'est-à-dire 51 %).

isse (int) : drapeau qui permet d'activer (si la valeur est True) ou désactiver (si elle est définie sur False) les fonctions ISSE, MMX et autres d'optimisations du processeur (pour débogage). Par défaut, il est activé. Si votre processeur ne gère pas les optimisations du processeur, il sera de toute façon désactivé et vous ne serez pas en mesure de l'activer).

planar (bool) : drapeau pour utiliser un format de couleur planar pour les clips YUY2 à la fois pour l'entrée et la sortie de la fonction.
Quand une vidéo est stockée numériquement dans un espace de couleur YUV, les informations de luminance et de chrominance peuvent être stockées soit de façon entrelacée pour garder les composants individuels des pixels assemblés, soit de façon "planaire", en conservant les composants individuels des images ensemble.
le format planar stocke toutes les informations de luminance pour une image, suivie par toutes les informations de chrominance pour une canal de chroma (U ou V), et enfin les informations pour l'autre canal de chrominance. Les formats planar sont généralement utilisés pour des applications vidéo grand public, car ils permettent d'insérer la chrominance entre les pixels de luminance, ce qui permet une compression de plus de 50 % avec une faible perte de qualité.
Il utilise une astuce pour la conservation des images à l'organisation des données de couleur à plat. (Y, U, V séparés en mémoire) en tant que format normal d'image YUY2 entrelacée comme un conteneur.
De cette façon, on peut éviter de nombreuses conversions internes de format planar en entrelacé, ce qui augmente la vitesse de traitement.

On peut convertir un clip source entrelacé en YUY2 source au format planar en utilisant la fonction Interleaved2planar à partir du plugin RemoveGrain (par kassandro), et convertir le résultat final en utilisant la fonction Planar2interleaved. Ce format spécial planar YUY2 est également accepté par le plugin RemoveGrain (Kassandro), le plugin MaskTools2 (par Manao) et quelques autres. Cette astuce ne sera pas nécessaire dans Avisynth v2.6 avec le support natif du format YV16 planar. Ce paramentre est ignoré pour les clips YV12.
Note: un clip super est toujours planar.
Par défaut planar = false.

2) MSuper

MSuper (clip, int "hpad", int "vpad", int "Pel", int "levels", bool "Chroma", int "sharp", int "RFilter", "clip pelclip", bool "isse", bool "planar")

Cette fonction utilise le clip source et prépare un clip spécial "super" avec des données d'images à plusieurs niveaux (classées de façon hiérarchique).
Le super clip est utilisé par MAnalyse et par les fonctions clientes de compensation de mouvement. Pour stocker et transférer ses paramètres, on utilise les propriétés audio de super clip (plus précisément, num_audio_samples) comme une astuce. Ainsi, l'audio disparait dans un super clip. C'est une des raisons pour lesquelles on utilise en plus le clip source avec des fonctions client.

hpad : remplissage horizontal ajouté à l'image source (à la fois à gauche et à droite).
Un petit remplissage est ajouté pour faciliter l'estimation du mouvement à proximité des limites de l'image.
Par défaut = 8.

vpad : remplissage vertical ajouté à l'image source (à la fois en haut et en bas).
Par défaut = 8.

pel : précision de l'estimation du mouvement. La valeur peut être 1, 2 ou 4.
1 signifie une une précision au pixel près. 2 signifie une précision d'un demi-pixel, 4 signifie une précision au quart de pixel, produite par interpolation spatiale (plus précise, mais plus lente et pas toujours la meilleure en raison du grand niveau d'échelle).
Par défaut = 2.

levels : C'est le nombre de niveaux hiérarchiques dans les images super clip.
MAnalyse est nécessaire à tous les niveaux, mais pour d'autres fonctions client seul le niveau le plus fin est suffisant
Par défaut: 0 (auto, tous les niveaux possibles sont produits).

chroma : Si positionné à true, il permet de préparer des plans chroma aussi dans Superclip.
Par défaut : true. (faux : luma seulement)

sharp : Méthode d'interpolation pour les sous-pixel pour pel = 2 et 4.
Utilisez 0 pour l'interpolation douce (bilinéaire), 1 pour l'interpolation bicubique, 2 pour une interpolation plus précise Wiener.
Par défaut = 2.

RFilter: lissage des niveaux hiérarchiques et filtre de réduction de moitié.
0 : simple moyenne de 4 pixels ;
1 : filtre triangulaire décalé pour un meilleur lissage (diminution de l'aliasing) ;
2 : filtre triangulaire comme BilinearResize pour encore plus de lissage ;
3 : filtre quadratique filtre pour encore plus de lissage ;
4 : filtre cubique pour encore plus de lissage.
Par défaut : 2

pelclip: suréchantillonnage optionnel du clip source au lieu d'interpolation interne des sous-pixels (pour une valeur de pel > 1).
Par défaut : non défini.

3) MAnalyse


 

Visiteurs en ligne

Nous avons 8 invités en ligne

Connexion