I wanted to reverse-engineer and implement some wavelet codec just for the sake of it. And finally I’ve managed to do that.
Initially I wanted to finish Rududu Video codec (I’ve looked at it briefly and one of the funny things is that the opensource release of Rududu Image codec does not match the actual binary specification, even arithmetic coder is different), but it turns out there’re no samples in the usual place so I just picked something that has some samples already.
The codec turned out to employ some tricks so I had to resort to collecting debug information in order to understand band structure (all band dimensions are implicit, you need to know them and the order to decode it all successfully). Then it turned out that band data is coded in boustrophedon order instead of the usual raster scan. And finally there’s fun with scaling: vertical transform is the same as horizontal one but the output is scaled by 128. Beside that it’s rather unremarkable.
Anyway, I got slightly deeper knowledge about the inner workings of wavelet codecs and it should not bother me any longer. It’s time to slack off before doing something else.
Nice work, shame WT are not used more today.
There’s a good reason behind that: in image coding wavelets tend to blur image and add “ants” (artefacts in shape of a short line) if you try to compress it too much, plus they do not interact well with motion compensation. Though maybe Snow2 will come and prove me wrong.
You can still find wavelet transform in some intermediate codecs (where scalability matters) and IIRC it’s still widely used for analysis of (pseudo-)random processes.