聯合雙邊濾波器(joint bilateral filter)

前面介紹了雙邊濾波器(bilateral filter,LBF),然而BF的權值是不穩定的,因此在邊緣附近會出現一些翻轉。此外BF計算複雜度是O(r^2);爲了改善BF權值的穩定性,引入了聯合雙邊濾波器(joint bilateral filter ,LBF)。兩者之間的差別就是LBF用了一個導向圖作爲值域權重的計算依據。下面我們通過數學公式展示二者的不同:
先看BF的,如(1)所示,
 
再次解釋一下公式中的符號意義,其中I表示輸入圖像,p、q表示像素在圖像中的座標,Ip表示對應位置的像素值,J表示輸出, f、g是權重分佈函數,一般爲高斯函數。這種濾波的結果就是周邊像素的權值不僅和距離有關還和那個位置的像素值有關。
再看LBF,如(2)所示,
 
如果在值域的權重計算過程引入另外一幅圖像,如下式,則稱之爲聯合雙邊濾波。~I就是引入的另外一幅圖像。該圖像必須與待處理的圖像相似。
JBF的原理圖,如圖(1)所示。
[轉載]聯合雙邊濾波器(joint <wbr>bilateral <wbr>filter)
圖(1)LBF原理圖
 聯合雙邊濾波上採樣技術也很簡單,一種便於理解的也便於寫代碼的方式就是把下采樣並進行處理過後的小圖按照最近鄰插值的方式放大到原圖大小,然後再用原圖的數據和這個放大的結果進行聯合雙邊濾波處理 。
下面粘貼了LBF的matlab代碼供大家學習參考。
function B = jbfltGray(D,C,w,sigma_d,sigma_r)
%    D should be a double precision matrix of size NxMx1 (i.e., grayscale)  with normalized values in the %    closed interval [0,1]. 
%    C should be similar to D, from which the weights are calculated, with normalized values in the
 %   closed interval [0,1]. 
% Pre-compute Gaussian distance weights.
[X,Y] = meshgrid(-w:w,-w:w);
G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));
% Apply bilateral filter.
dim = size(D);
B = zeros(dim);
for i = 1:dim(1)
   for j = 1:dim(2)      
         % Extract local region.
         iMin = max(i-w,1);
         iMax = min(i+w,dim(1));
         jMin = max(j-w,1);
         jMax = min(j+w,dim(2));
         I = D(iMin:iMax,jMin:jMax); 
         % To compute weights from the color image
         J = C(iMin:iMax,jMin:jMax);
         % Compute Gaussian intensity weights according to the color image
         H = exp(-(J-C(i,j)).^2/(2*sigma_r^2));
         % Calculate bilateral filter response.
         F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1);
         B(i,j) = sum(F(:).*I(:))/sum(F(:));   
   end
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章