Newsgroup: it.comp.hardware.video-3d
Titolo: [OT]Motion Vector con precisione di mezzo pixel

Salve,
so di essere OT, ed infatti la prima cosa che vi chiedo è di indirizzarmi 
verso il NG più adatto alla mia domanda.
Sto studiando i protocolli di compressione video, e mi è sorto un dubbio: a 
partire dall'H.263, si sono introdotti i Motion Vectors ad alta precisione, 
con passi di 0.5 pixel, se non addirittura di 0.25 pixel (nell'h.264). Io 
però non riesco a capirne l'utilità. Cioè, io devo confrontare la griglia 
dei pixel del blocco in esame con quella corrispondente del frame precedente 
(o successivo), e shiftare un pixel alla volta a destra, a sinistra, in alto 
e in basso cercando la migliore corrispondenza. Ma lo shift avviene un pixel 
alla volta (ovviamente), e quindi alla fine il motion vector conterrà 
inevitabilmente un valore pari ad un numero intero di pixel di shifting in 
orizzontale ed in verticale. Quale è allora l'utilità della maggiore 
precisione dei motion vectors?
Grazie a tutti.
Ciao 

 l'utilità della maggiore precisione dei motion vectors?
Quella che descrivi è la compensazione del moto "full pixel", adottata negli 
standard di compressione video del passato.
Quelli moderni, come Mpeg4 e H.263/4 adottano precisioni subpixel per 
cercare di stimare con precisione maggiore il moto
dei vari elementi nell'immagine, che come puoi ben immaginare non può essere 
completamente descritto con un numero intero di pixel. Il trucco consiste 
nel ricostruire il valore del pixel tramite un filtro che copre un certo 
numero di pixel vicini a quello indicato dalla parte intera del vettore del 
moto. Ad esempio, in H.264 si usa un filtro che ha fino a 6 tap sia in 
verticale che in orizzontale, per cui il valore finale del pixel interpolato 
è dato dalla somma di 12 contributi relativi a 12 pixel diversi (al 
massimo).
Ad esempio, riducendoci alla sola componente x per semplicità, un MV pari a 
7,5 indica uno spostamento verso destra di 7 pixel e mezzo, per cui il 
valore interpolato viene calcolato sommando i valori dei pixel 5, 6, e 7 (a 
sinistra) e 8, 9 ,10 (a destra) moltiplicati per opportuni coefficienti 
fissati dallo standard.
L'utilità è quella di ridurre l'ampiezza dell'errore di predizione grazie ad 
una stima accurata del moto, in modo che tale errore possa essere codificato 
con un numero inferiore di bit. La elevata complessità del filtro è 
giustificata dalla necessità di ridurre il più possibile gli artefatti di 
aliasing che si potrebbero facilmente generare con filtri più semplici.
La principale controindicazione di questo metodo è che richiede una 
mostruosa capacità di calcolo al lato encoder (tanto che spesso si 
implementa in hardware la motion estimation e/o si preferisce immagazzinare 
i frame di riferimento già interpolati a 1/2 pixel, anche al costo di 
quadruplicare la memoria necessaria).
Ciao,
Jena

> è allora l'utilità della maggiore precisione dei motion vectors?
[CUT]
Grazie! Ora è tutto molto più chiaro. L'unica cosa che ancora non ho capito 
è come vengono calcolati questi MV a precisione subpixel in fase di 
encoding.
Cmq, grazie mille per la risposta esaustiva!
Ciao 

 Cmq, grazie mille per la risposta esaustiva!
Prego e ciao,
Jena

 > Luca wrote:
_____________
Scusate il morphing involontario, sono sempre io ;-)
Ciao,
Jena