引導濾波的OpenCV實現

2021-06-20 23:00:00 字數 2318 閱讀 8745

實現這種演算法的關鍵思想是盒式濾波(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是濾波後的...