實現這種演算法的關鍵思想是盒式濾波(box filter),而且必須是通過積分圖來實現的盒式濾波,否則不可能與視窗大小無關,好在opencv的boxfilter函式滿足這個要求。
再看看引導濾波的公式
先計算a_k的分子,ip 在視窗w_k中的和,再除以視窗中畫素的個數,剛好就是盒式濾波,因此我們可以將輸入的引導影象 i 和濾波影象 p 相乘,並對相乘後的影象做box filtering,即得第一項的結果。後面的
接下來計算a_k的分母部分。
因此在計算 i 的方差時,我們可以先計算 i*i 的均值,再減去 i 均值的平方即
注意,我們的計算都是對整個影象的,以影象為單位進行計算,所以最後算出的也是兩張圖,a_k的圖(左邊)和b_k的圖(右邊),如下
下面看第二個公式
輸出值q又與兩個均值有關,分別為a和b在視窗w_i中的均值(不是w_k),所以還是box filtering,我們將上一步得到兩個影象都進行盒式濾波,得到兩個新圖:a_i和b_i,然後用a_i乘以引導影象 i ,再加上b_i,即得最終濾波之後的輸出,如下(左邊為原圖,右邊為濾波之後的影象,其中濾波視窗半徑為8,e的值為500):
下面是整個演算法的**,僅供參考
void guidedfilter(mat& source, mat& guided_image, mat& output, int radius, float epsilon)
else
//將輸入擴充套件為32位浮點型,以便以後做乘法
mat source_32f, guided_32f;
makedepth32f(source, source_32f);
makedepth32f(guided, guided_32f);
//計算i*p和i*i
mat mat_ip, mat_i2;
multiply(guided_32f, source_32f, mat_ip);
multiply(guided_32f, guided_32f, mat_i2);
//計算各種均值
mat mean_p, mean_i, mean_ip, mean_i2;
size win_size(2*radius + 1, 2*radius + 1);
boxfilter(source_32f, mean_p, cv_32f, win_size);
boxfilter(guided_32f, mean_i, cv_32f, win_size);
boxfilter(mat_ip, mean_ip, cv_32f, win_size);
boxfilter(mat_i2, mean_i2, cv_32f, win_size);
//計算ip的協方差和i的方差
mat cov_ip = mean_ip - mean_i.mul(mean_p);
mat var_i = mean_i2 - mean_i.mul(mean_i);
var_i += epsilon;
//求a和b
mat a, b;
divide(cov_ip, var_i, a);
b = mean_p - a.mul(mean_i);
//對包含畫素i的所有a、b做平均
mat mean_a, mean_b;
boxfilter(a, mean_a, cv_32f, win_size);
boxfilter(b, mean_b, cv_32f, win_size);
//計算輸出 (depth == cv_32f)
output = mean_a.mul(guided_32f) + mean_b;
}
void makedepth32f(mat& source, mat& output)
(本文均來自網路) OpenCV 高斯濾波實現
高斯濾波是一種線性平滑濾波,適用於消除高斯雜訊,廣泛應用於影象處理的減噪過程。通俗的講,高斯濾波就是對整幅影象進行加權平均的過程,每乙個畫素點的值,都由其本身和鄰域內的其他畫素值經過加權平均後得到。在影象處理中高斯濾波一般有兩種實現方式 一種是用離散化視窗滑窗卷積,另一種是通過傅利葉變換。最常見的就...
雙邊濾波與引導濾波
雙邊濾波 雙邊濾波很有名,使用廣泛,簡單的說就是一種同時考慮了畫素空間差異與強度差異的濾波器,因此具有保持影象邊緣的特性。先看看我們熟悉的高斯濾波器 其中w是權重,i和j是畫素索引,k是歸一化常量。公式中可以看出,權重只和畫素之間的空間距離有關係,無論影象的內容是什麼,都有相同的濾波效果。再來看看雙...
引導濾波GuidedFilter
何愷明讀博士提出基於暗通道採用引導濾波去霧演算法獲cvpr2009最佳 現在應用面很廣 很廣 能夠克服雙邊濾波的梯度翻轉現象,在濾波後影象的細節上更優,主要美顏演算法差不多都用這個。先貼偽 實現的話可以採用積分圖加速。其中i是引導影象,p是輸入的待濾波影象,w是根據引導圖i確定的權重值,q是濾波後的...