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空間
原始圖片:
效果圖:
代碼已經做好註釋,對照本文查看即可瞭解原理。
完(笑)