L0範數圖像平滑

圖像平滑是計算攝影學一門基礎重要的工具,其作用是拂去不重要的細節,保留較大的圖像邊緣,主要應用於邊緣檢測,JPEG壓縮圖像人工僞跡去除,非真實繪製等領域。

圖像平滑應用

圖像平滑大體上可以分爲兩類:基於局部和基於全局方法,基於局部的方法像有名雙邊濾波各向異性擴散,將圖像分成一些局部塊進行處理;全局方法比如全變分(Total Variation)和最小二乘濾波(Weighted Least Square),同時處理整幅圖像,可以達到全局最優的目的。
以往的方法,拂去圖像中去對圖像細節部分也會對圖像中大的邊緣進行懲罰,這樣也會導致圖像中大的邊緣減弱或丟失,因此徐立等人提出使用圖像L0範數平滑,該濾波器是一種基於稀疏策略的全局平滑濾波器。
本文是對香港中文大學徐立等人所做的《Image Smoothing via L0 Gradient Minimization》的讀後筆錄,也可以看成是論文的翻譯吧。使用圖像梯度L0範數平滑圖像,具有以下優點:

  • 通過去除小的非零梯度,撫平不重要的細節信息
  • 增強圖像顯著性邊緣

圖像梯度L0範數最小化

L0範數可以理解爲向量中非零元素的個數。
圖像梯度L0範數可以如下表示

c(f):=#{p|fpfp10}

這裏pp+1 是圖像中相鄰元素,|fpfp1| 就是圖像梯度,也即圖像的前向差分,#{} 表示計數,輸出圖像中滿足|fpfp1|0 的個數,即c(f) 是圖像梯度的L0範數。這樣表示有一個優點,就是c(f) 是非零梯度個數的函數,與圖像的梯度本身無關,也就是
#{p|fpfp10}=#{p|α(fpfp1)0}

這還不是我們的目標函數,只是一個約束條件。

圖像梯度最小化平滑

一維信號

先以一維信號爲例,輸入信號g ,輸出信號f ,那麼我們的目標函數可以如下表示:

minfp(fpgp)2s.t.c(f)=k

左邊使得輸入信號與輸出信號儘可能接近,右邊非零約束梯度個數爲k 。下圖依次是k=1,k=2,k=5,k=200 時恢復的信號。
一維信號

實際上,k 的取值變化範圍很大,特別是對於二維圖像來說。將上式子轉換成無約束問題
minfp(fpgp)2+λc(f)

這裏λ 是一個權重控制兩者之間的比重,實際上它是一個平滑參數,當其值越大越平滑。圖像中非零梯度個數與1λ 呈單調遞增關係。
從下圖中可以看到梯度L0 範數的優點,即信號的尖銳部分沒有被減弱。
比較

二維圖像

二維圖像中,我們需要約束圖像水平和垂直方向的梯度數目,形式上如下

minfp(fpgp)2+λc(xf,yf)

c(xf,yf)=#{p|xfp+yfp0}

由於L0範數不可導,全局最優問題是一個NP難問題,所以這裏使用變量分裂法,鬆弛爲兩個二次規劃問題,每個問題都有其閉式解(closed-form)(因爲二次函數都可以求導,得到其最小值)。
minfp(fpgp)2+λc(xf,yf)+βp((xfphp)2+(yfpvp)2)

迭代優化

  • 給定 hv ,計算f
    E(f)=p(fpgp)2+β((xfphp)2+(yfpvp)2)

    對上式求解,結果取傅里葉變換,可得
    f=F1(F(g)+β(F(x)F(h)+F(y)F(v))F(1)+β(F(x)F(x)+F(y)F(y))

    本應該ℱ是傅里葉變換專用符號,但這裏不支持,因此用了大寫F
  • 給定 f ,計算hv
    E(h,v)=p((xfphp)2+(yfpvp)2)+λβc(h,v)

    c(h,v)|h|+|v| 中非零元素的個數
    E(h,v)=p((xfphp)2+(yfpvp)2)+λβH(|hp|+|vp|)

    這裏H(|hp|+|vp|) 是一個二值函數,如果|hp|+|vp|0 返回1,否則0。對於每一個像素來說,有下式
    Ep={(xfphp)2+(yfpvp)2+λβH(|hp|+|vp|)}

    上式取得最小值時,得到
    hp,vp={(0,0)(xSp,ySp)(xSp)2+(ySp)2λ/βotherwise

    這個證明比較簡單,詳細推到可以看論文。

代碼

%   Distribution code Version 1.0 -- 09/23/2011 by Jiaya Jia Copyright 2011, The Chinese University of Hong Kong.
%
%   The Code is created based on the method described in the following paper 
%   [1] "Image Smoothing via L0 Gradient Minimization", Li Xu, Cewu Lu, Yi Xu, Jiaya Jia, ACM Transactions on Graphics, 
%   (SIGGRAPH Asia 2011), 2011. 
%  
%   The code and the algorithm are for non-comercial use only.


function S = L0Smoothing(Im, lambda, kappa)
%L0Smooth - Image Smoothing via L0 Gradient Minimization
%   S = L0Smooth(Im, lambda, kappa) performs L0 graidient smoothing of input
%   image Im, with smoothness weight lambda and rate kappa.
%
%   Paras: 
%   @Im    : Input UINT8 image, both grayscale and color images are acceptable.
%   @lambda: Smoothing parameter controlling the degree of smooth. (See [1]) 
%            Typically it is within the range [1e-3, 1e-1], 2e-2 by default.
%   @kappa : Parameter that controls the rate. (See [1])
%            Small kappa results in more iteratioins and with sharper edges.   
%            We select kappa in (1, 2].    
%            kappa = 2 is suggested for natural images.  
%
%   Example
%   ==========
%   Im  = imread('pflower.jpg');
%   S  = L0Smooth(Im); % Default Parameters (lambda = 2e-2, kappa = 2)
%   figure, imshow(Im), figure, imshow(S);


if ~exist('kappa','var')
    kappa = 2.0;
end
if ~exist('lambda','var')
    lambda = 2e-2;
end
S = im2double(Im);
betamax = 1e5;
fx = [1, -1];
fy = [1; -1];
[N,M,D] = size(Im);
sizeI2D = [N,M];
otfFx = psf2otf(fx,sizeI2D);
otfFy = psf2otf(fy,sizeI2D);
Normin1 = fft2(S);
Denormin2 = abs(otfFx).^2 + abs(otfFy ).^2;
if D>1
    Denormin2 = repmat(Denormin2,[1,1,D]);
end
beta = 2*lambda;
while beta < betamax
    Denormin   = 1 + beta*Denormin2;
    % h-v subproblem
    h = [diff(S,1,2), S(:,1,:) - S(:,end,:)];
    v = [diff(S,1,1); S(1,:,:) - S(end,:,:)];
    if D==1
        t = (h.^2+v.^2)<lambda/beta;
    else
        t = sum((h.^2+v.^2),3)<lambda/beta;
        t = repmat(t,[1,1,D]);
    end
    h(t)=0; v(t)=0;
    % S subproblem
    Normin2 = [h(:,end,:) - h(:, 1,:), -diff(h,1,2)];
    Normin2 = Normin2 + [v(end,:,:) - v(1, :,:); -diff(v,1,1)];
    FS = (Normin1 + beta*fft2(Normin2))./Denormin;
    S = real(ifft2(FS));
    beta = beta*kappa;
    fprintf('.');
end
fprintf('\n');
end

代碼也是非常清晰,容易理解的。關於其更多應用,可以查看原文。但是該方法基於迭代優化,迭代次數與kappa對數下降關係,kappa=0.02 迭代22次。

可執行程序

比較

點此可下載exe程序,基於OpenCV編寫,僅供學習交流。
界面框架致謝:人在旅途

參考文獻

Image Smoothing via L0 Gradient Minimization
Image Smoothing via L0 Gradient Minimization PPT

Licenses

作者 日期 聯繫方式
風吹夏天 2015年9月26日 [email protected]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章