1. A method comprising: receiving a block of data; classifying the block of data based on sparsity structure to obtain a block class; selecting one of a plurality of available directional, sparse orthonormal transforms to apply to the block based on the block class of the block, the sparse transform having a one-to-one correspondence to the block class, and wherein sparse transforms of the plurality of directional, sparse orthonormal transforms are created for each block class by an iterative process, wherein for each iteration of the iterative process that creates the sparse transforms for each block class, the iterative process first optimizes the sparse transforms and coefficients for the transforms, and then reclassifies optimal transforms based on rate distortion; and applying the selected transform to the block to generate a plurality of coefficients, thereby producing a compressed version of the block.