### Principal components analysis / Karhunen-Loève transform

The PCA/KLT is often said to be the optimal linear transform for video coding while the DCT is a similar, faster and simpler transform

This isnt really true, the KLT is not that optimal at all for video coding, what the KLT is, is that it is the optimal orthogonal transform for compacting the energy of a vector into its first n components, what might be better is a transform, preferably (near) orthogonal which compacts the energy into few components, not neccessarily the first few!

For example, if we consider 1D 8 component vectors, lets assume our data set is entirely made of piecewice constants then the following basis functions would allow us to exactly store these with 1+n basis functions where n is the number of discontinuities, and please note this here is just an example where the KLT isnt that optimal, 1-D piecewise constants are probably not a ideal model for images …

1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1

ok this is quite a non orthogonal set of basis functions which has its problems too, a less compact and orthogonal (if the basis functions are normalized, which for sake of readability hasnt been done) but still better then KLT transform would be based upon the following basis functions:

1 1 1 1 1 1 1 1 1 1 1 1-1-1-1-1 1 1-1-1 0 0 0 0 0 0 0 0 1 1-1-1 1-1 0 0 0 0 0 0 0 0 1-1 0 0 0 0 0 0 0 0 1-1 0 0 0 0 0 0 0 0 1-1

here a piecewise constant with 1 discontinuity can be represented by 2-4 basis functions where the KLT case below will need all 8 for an exact representation

0.290596 0.341669 0.377247 0.395479 0.395472 0.377227 0.341853 0.290749 -0.490579 -0.416017 -0.277788 -0.097204 0.097447 0.277903 0.415566 0.490129 0.473927 0.255266 -0.138718 -0.437652 -0.436948 -0.137245 0.255345 0.473804 -0.415204 0.097424 0.490934 0.276661 -0.277947 -0.490521 -0.097391 0.416181 -0.382979 0.320320 0.364628 -0.343399 -0.342868 0.364783 0.320177 -0.383024 -0.278541 0.491575 -0.099199 -0.414873 0.416580 0.096333 -0.489054 0.277157 -0.210508 0.464503 -0.455644 0.190764 0.181391 -0.451288 0.463825 -0.210293 -0.096505 0.274820 -0.412134 0.489524 -0.491862 0.418348 -0.280951 0.098971

this has been generated by (the hopefully not buggy) pca.c/pca.h

Another way to see the sub-optimality of the KLT is to consider the last (high frquency) basis functions, in many images and videos they are simply not used, if they would be replaced by commonly occuring patterns which without them would need many basis functions to be accurately represented then the compression-rate could be improved, the resultig transform would be non orthogonal though …