Block-matching and 3D filtering
Block-matching and 3D filtering is a 3-D block-matching algorithm used primarily for noise reduction in images. It is one of the expansions of the non-local means methodology. There are two cascades in BM3D: a hard-thresholding and a Wiener filter stage, both involving the following parts: grouping, collaborative filtering, and aggregation. This algorithm depends on an augmented representation in the transformation site.
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 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 ensure 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 that integrates a convolutional neural network has been proposed and shows better results. MATLAB code has been released for research purpose.Implementations
- Reference implementation in MATLAB and Python released under an open-source proprietary license:
- Well documented C-based implementation released under the GPLv3:
- CUDA and C++ based implementation released under the GPLv3: