github地址:https://github.com/18150167970/BM3D-color-image
欢迎start(笑)。
首先,上一波原理:https://zhuanlan.zhihu.com/p/46399784
灰度图像方法:
这里引用上述链接的内容:
算法总体流程如图:
主要分为两大步:
第一步,基础估计:
1、对于每个目标图块,在附近寻找最多MAXN1(超参数)个相似的图块,为了避免噪点的影响,将图块经过2D变换(代码中使用DCT变换)后再用欧氏距离衡量相似程度。按距离从小到大排序后取最多前MAXN1个。叠成一个三维数组。
2、对3D数组的第三维,即图块叠起来后,每个图块同一个位置的像素点构成的数组,进行DCT变换后,采用硬阈值的方式将小于超参数 的成分置为0。同时统计非零成分的数量作为后续权重的参考。后将第三维进行逆变换。
关于硬阈值参考链接:硬阈值(Hard Thresholding)函数解读
3、将这些图块逆变换后放回原位,利用非零成分数量统计叠加权重,最后将叠放后的图除以每个点的权重就得到基础估计的图像,此时图像的噪点得到了较大的去除。
第二步,最终估计:
1、由于基础估计极大地消除了噪点,对于含噪原图的每个目标图块,可以直接用对应基础估计图块的欧氏距离衡量相似程度。按距离从小到大排序后取最多前MAXN1个。将基础估计图块、含噪原图图块分别叠成两个三维数组。
2、对含基础估计3D数组的第三维,即图块叠起来后,每个图块同一个位置的像素点构成的数组,进行DCT变换,利用如下公式得到系数。
3、将系数与含噪3D图块相乘放回原处,最后做加权平均调整即可得到最终估计图。相对于基础估计图,还原了更多原图的细节。
彩色图像方法:引用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空间
原始图片:
效果图:
代码已经做好注释,对照本文查看即可了解原理。
完(笑)