Juan: Similar to non-local means, BM3D looks at the similarity between all patches in a local neighborhood. However rather than simply computing weights based on the patch difference, similar 2D patches are grouped into a 3D stack of patches (thus the 3D in BM3D). This stack of similar patches is transformed with a sparsifying transform, the coefficients are thresholded, the transforms is inverted and then finally there is aggregation of the denoised patches. This leads to substantial improvement over non-local means.