Block-matching and 3D filtering


Block-matching and 3D filtering 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 dimensional linear transform is applied, followed by a transform-domain shrinkage such as Wiener filtering, then the linear transform is inverted to reproduce all 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 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. MATLAB code has been released for research purpose.

Implementations