大家好,又见面了,我是你们的朋友全栈君。
论文名称:Image denoising by sparse 3D transform-domain collaborative filtering
目录
Fast And Efficient Realization
基本原理
图像做块间匹配,把多张相似的2D图像块组成3D组,对3D组进行域变换,利用域变换上系数的稀疏性,进行滤波,然后再逆向3D域变换,得到滤波后的图像块,放回原来的位置,每个像素可能得到多次滤波的结果,最后进行加权得到降噪的图像。
Flowchart of BM3D
分两步进行,第一步得到基础估计,第二步得到最终估计,分两步的优势是
1、用基础估计的结果做块匹配,匹配的结果更加准确
2、使用基本估计作为经验维纳滤波的导频信号,比对噪声图像做3D域变换和hard-threshold更有效、更准确
step1
块间匹配距离计算
由于噪声的存在,不考虑重叠的情况,距离的期望和方差如下,其方差为O(σ4)
由于实际块匹配时会出现块间重叠,导致一些理想间距大于阈值的块当作了相似块,而小于阈值的却被丢弃了,为了解决这个问题,先对2D块做线性域变换,然后做hard-thresholding,再反变换回来,如下
间距小于某个阈值,认为是相似块,这些相似块组成3D组,组里块的顺序不重要
对3D组做域变换,在变换域上做hard-threshold操作,然后再做逆变换,得到基础估计结果
加权权重和分块估计的方差成反比,NharXR是hard-threshold之后非0系数的数目
根据权重进行加权
step2
对基础估计的结果做块匹配,组成一个3D组,同时,根据匹配结果,把原来的噪声图像块同样组成一个3D组,把两个3D组叠加在一起.
计算维纳系数和维纳滤波
同样的,加权权重和分块估计的方差成反比
加权滤波
Fast And Efficient Realization
1、在进行块匹配过程中,不是滑窗逐像素进行匹配,而是已一定步长进行匹配,可以减少计算量
2、构成3D组的时候,限制最大的匹配块数目 搜索匹配块时,限制最大的搜索区域
3、块匹配时,使用predictive search(具体可能要看下代码如何实现)
4、匹配时已经得到了2D变换,构成3D组时,再做1D变换就得到3D变换,不需要直接做3D变换
5、两个步骤中,进行hard_thresholding和Wiener_filtering时顺便把权重计算好,存在buffer里,最后Aggregation时就可以直接算
6、使用Kaiser window来减少边界效应
每个像素的复杂度(计算量很大)
Parameter selection
噪声没那么严重时,λ2d=0,窗口大小N1=8,严重时为λ2d=2,N1=12
还分析了各种变换的选,2D变换用哪个,1D变换用哪个比较好,没有去细看了, 反正最后的1D是使用Haar,2D变换用哪个好像关系不大,一般可能都是用DCT了
C-BM3D
处理彩色图像时,把RGB转到YUV,Y通道进行匹配,匹配的结果直接在UV分量上使用
Results
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138901.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...