Block-matching and 3D filtering

Block-matching and 3D filtering (BM3D) is a 3-D block-matching algorithm used primarily for noise reduction in images.
Method.
Grouping.
Image fragments are grouped together based on similarity, but unlike standard k-means clustering and such cluster analysis methods, the image fragments are not necessarily disjoint. This block-matching algorithm is less computationally demanding and is useful later-on in the aggregation step. Fragments do however have the same size.
A fragment is grouped if its dissimilarity with a reference fragment falls below a specified threshold.
This grouping technique is called block-matching, it is typically used to group similar groups across different frames of a digital video, BM3D on the other hand may group macroblocks within a single frame.
All image fragments in a group are then stacked together to form 3D cylinder-like shapes.
Collaborative filtering.
Filtering is done on every fragments group. A formula_1 dimensional linear transform is applied, followed by a transform-domain shrinkage such as Wiener filtering, then the linear transform is inverted to reproduce all (filtered) fragments.
Aggregation.
The image is transformed back into its two-dimensional form. All overlapping image fragments are weight-averaged to ensures that they are filtered for noise yet retain their distinct signal.
Extensions.
Color images.
RGB images can be processed much like grayscale ones. A luminance-chrominance transformation should be applied to the RGB image. The grouping is then completed on the luminance channel which contains most of the useful information and a higher SNR. This approach works because the noise in the chrominance channels is strongly correlated to that of the luminance channel, and it saves approximately one-third of the computing time because grouping takes up approximately half of the required computing time.
Deblurring.
The BM3D algorithm has been extended (IDD-BM3D) to perform decoupled deblurring and denoising using the Nash equilibrium balance of the two objective functions.
Convolutional neural network.
An approach which integrates convolutional neural network has been proposed and shows better results (albeit with a slower runtime). MATLAB code has been released for research purpose.