Re: Advanced Motion Compensation for sub 500kbit DVD Video
Lourens Veen <[email protected]> Fri, 19 Jul 2002 13:57:38 +0200
| Newsgroups | gmane.comp.multimedia.ogg.tarkin.devel |
|---|---|
| Message-ID | <[email protected]> |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Friday 19 July 2002 13:32, Dustin Stuart wrote: > Hi everyone, > > This is my first post to the Tarkin list after a quick skimming > of archived aritcles. > <snip - brilliant idea> > > This method presents huge advantages for decoding because the > idea of a video 'frame' can be dropped completely! A video > recorded at 24 frames/second can be played at 60 or 70 on a > decoder fast enough. But the complexity of my method (and the > numerous stretchings that would take place) may prohibit further > development. > > But I have done the math. If the keyframe consumes only 30kb, > there should be more than 100kb for reencoded triangles and MVs > if keyframes occur every couple of seconds... Hi Dustin, That sounds good. And somewhat familiar (http://www.xiph.org/archives/vorbis-dev/200102/0135.html) but ofcourse that doesn't take away the fun :-). I've been working on doing motion compensation for such a scheme, since we'd have to have some sort of vector field mapping one frame to another. We'll need that anyway, for any kind of codec, unless someone comes up with a transform that deals with translation (now that would be interesting). A slightly different idea would be to do away with the concept of keyframes, and instead use separate textures that are streamed alongside the motion data. This would require a lot of memory for texture caching on the decoder side though, and ideally the decoder would need to know which textures to keep for how long (ie when they are going to be needed). It shouldn't be too hard to put that information into the bitstream, unless we are doing live encoding and streaming, in which case the information simply doesn't exist at the moment of broadcasting. My current brilliant idea to create a vector field with motion information is to take two (grayscale) frames and create a bunch of copies of each. These copies are then gaussian blurred with variously sized kernels. Starting with the blurriest (is that a word?) frame, we attempt to deform frame1 to match frame2. This is done by calculating the difference of the frames, and moving the point where the difference is biggest in the opposite direction of the gradient at that point in the frame. It's a sort of morph, in that point in the vicinity of this point also move along for a bit. All morphs are recorded in a cumulative vector field. Once frame1 matches frame2, we have a motion field for the two frames. We then repeat the process with a sharper version of the two frames, all the way up to a very slightly blurred (to get rid of noise) version of the frames. The reason for the multi-resolution approach is that we want to avoid getting stuck in local minima while morphing if there is a lot of difference between the frames (ie fast motion). I'm working on an implementation of that now, and I hope to have some results still today, otherwise I'll probably finish it on monday. Lourens - -- GPG public key: http://home.student.utwente.nl/l.e.veen/lourens.key -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org iD4DBQE9N/65vmNyqZHWDvURAt1mAJ4wwhMURilj0zdhVkk11I2bgOOEOgCXQgnU qwLe7+yKVDXMjOmeBv3a8Q== =DWe/ -----END PGP SIGNATURE----- --- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/ To unsubscribe from this list, send a message to '[email protected]' containing only the word 'unsubscribe' in the body. No subject is needed. Unsubscribe messages sent to the list will be ignored/filtered.