BM3D 灰度图像和彩色图像去噪实现

github地址:https://github.com/18150167970/BM3D-color-image

欢迎start(笑)。

首先,上一波原理:https://zhuanlan.zhihu.com/p/46399784

灰度图像方法:

这里引用上述链接的内容:

算法总体流程如图:

BM3D 灰度图像和彩色图像去噪实现_第1张图片

主要分为两大步:

第一步,基础估计

1、对于每个目标图块,在附近寻找最多MAXN1(超参数)个相似的图块,为了避免噪点的影响,将图块经过2D变换(代码中使用DCT变换)后再用欧氏距离衡量相似程度。按距离从小到大排序后取最多前MAXN1个。叠成一个三维数组。

2、对3D数组的第三维,即图块叠起来后,每个图块同一个位置的像素点构成的数组,进行DCT变换后,采用硬阈值的方式将小于超参数  的成分置为0。同时统计非零成分的数量作为后续权重的参考。后将第三维进行逆变换。

关于硬阈值参考链接:硬阈值(Hard Thresholding)函数解读

3、将这些图块逆变换后放回原位,利用非零成分数量统计叠加权重,最后将叠放后的图除以每个点的权重就得到基础估计的图像,此时图像的噪点得到了较大的去除。

BM3D 灰度图像和彩色图像去噪实现_第2张图片

 

第二步,最终估计:

1、由于基础估计极大地消除了噪点,对于含噪原图的每个目标图块,可以直接用对应基础估计图块的欧氏距离衡量相似程度。按距离从小到大排序后取最多前MAXN1个。将基础估计图块、含噪原图图块分别叠成两个三维数组。

BM3D 灰度图像和彩色图像去噪实现_第3张图片

2、对含基础估计3D数组的第三维,即图块叠起来后,每个图块同一个位置的像素点构成的数组,进行DCT变换,利用如下公式得到系数。

BM3D 灰度图像和彩色图像去噪实现_第4张图片

3、将系数与含噪3D图块相乘放回原处,最后做加权平均调整即可得到最终估计图。相对于基础估计图,还原了更多原图的细节。

BM3D 灰度图像和彩色图像去噪实现_第5张图片

BM3D 灰度图像和彩色图像去噪实现_第6张图片

彩色图像方法:引用http://www.ipol.im/pub/art/2012/l-bm3d/

Adapting the algorithm to color images is easy and can be done in the following steps:

1. First a transformation to a luminance-chrominance space from the RGB noisy image is applied. Y denotes the luminance channel and by U and V the chrominance channels;

2. For each step: 

Grouping is only performed with the Y channel; 

The 3D block built on Y is used for all three channels; 

Collaborative filtering is applied to each channel separately as well as the weighted aggregation.

3. Return to the RGB space by applying the inverse transformation.

简单翻译:

1.将RGB图转为YUV图。

2.每一步都做如下操作:

1)只在Y(亮度通道)进行Grouping;

2)利用Y通道寻找相似块,并且在所有通道建立相似3D块

3)在每一个通道上分别使用协同滤波和 weighted aggregation.

3.再转化为RGB空间

 

 

原始图片:

BM3D 灰度图像和彩色图像去噪实现_第7张图片

效果图:

 

代码已经做好注释,对照本文查看即可了解原理。

完(笑)

 

你可能感兴趣的:(opencv)