Per semplificare la tua confusione, esistono due processi:
1. Stima del
movimento 2. Compensazione del movimento
Prima di parlare della stima, dovremmo parlare della compensazione del movimento.
Supponiamo che sia diviso nel blocco B l o c k s t [ k ] ( x ′ , y ′ ) .Imaget(x,y)Blockst[k](x′,y′)
Il compito della compensazione del movimento è di produrre da qualsiasi regione di
I m a g e t - 1 ( x , y ) .Blockst[k](x′,y′)Imaget−1(x,y)
Quindi un altro blocco non necessariamente allineato al confine 16x16 è la migliore corrispondenza possibile Blockst−1[k](x′+mx,y′+my)
Qui, si chiama vettori di movimento.mx,my
Possiamo calcolare l'errore tra il target e il riferimento come
Errt[k](x,y)=Blockst[k](x′,y′)−Blockst−1[k](x′+mx,y′+my)
Quindi ora l'encoder trasmette sostanzialmente (con DCT e quantizzazione) e ( m x , m y ) [ k ] per ogni blocco.Errt[k](x,y)(mx,my)[k]
Quindi l'encoder ha 2 lavori da fare:
1. Stima del movimento
Il processo o la stima di per ogni k tale che E r r t [ k ] ( x , y ) è ridotto al minimo si chiama stima del movimento.mx,my[k]kErrt[k](x,y)
2. Generazione dell'immagine di errore dopo la compensazione del movimento
Il processo di costruzione di da I t pixel dell'immagine e ( m x , m y ) [ k ] è chiamato compensazione del movimento . L'immagine dell'errore è ciò che viene trasmesso.Blockst[k](x′,y′)It(mx,my)[k]
Infine, il decodificatore può rifare da solo la compensazione del movimento usando i vettori moiton e l'immagine di errore per effettuare la ricostruzione finale dell'immagine.
Ora realizziamo alcuni punti:
La migliore stima del movimento aiuta a ridurre al minimo l'energia necessaria per essere trasmessa e quindi ottimizza i bit per una data qualità.
Tuttavia, anche se non è l'ideale o se la scena presenta cambiamenti significativi rispetto all'ultima immagine, l' E r r t [ k ] ( x , y ) viene sempre trasmessa al ricevitore, quindi la ricostruzione è sempre perfetto (modulo la perdita creata dalla quantizzazione). Quindi, anche se hai un vettore di movimento non ottimale o la ridondanza non è molto, la ricostruzione è sempre perfetta anche se con più bit!(mx,my)[k]Errt[k](x,y)
Ogni blocco è compensato dal movimento da solo - quindi anche se i vettori di movimento effettivi di qualsiasi blocco vicino non hanno alcun effetto nella costruzione. Pertanto, non è necessario disporre di vettori di movimento perfettamente allineati per consentire una ricostruzione perfetta.Blockst[k](x′,y′)
Anche se esiste un algoritmo che è abbastanza intelligente da indovinare che se ha un vettore di movimento ( m x , m y ) [ k ] l'ipotesi di B l o c k s t [ k + 1 ] potrebbe sii solo più vicino a quello.Blockst[k](mx,my)[k]Blockst[k+1]
Supponiamo infine che l'immagine successiva sia completamente diversa, è possibile che l'energia per .
Energy(Errt[k](x,y))>Energy(Blockst[k](x′,y′))
In tali casi, potrebbe essere più consigliabile trasmettere il blocco direttamente senza previsione piuttosto che inviare la differenza. Ciò è possibile anche nell'encoder da una disposizione chiamata blocco INTRA.