L0范数图像平滑 | 您所在的位置:网站首页 › 龅牙珍本人 › L0范数图像平滑 |
本文为转载,原博客地址:http://blog.csdn.net/bluecol/article/details/48750561 图像平滑是计算摄影学一门基础重要的工具,其作用是拂去不重要的细节,保留较大的图像边缘,主要应用于边缘检测,JPEG压缩图像人工伪迹去除,非真实绘制等领域。 L0范数可以理解为向量中非零元素的个数。 图像梯度L0范数可以如下表示 c(f):=#{p|∣∣fp−fp−1∣∣≠0}这里p和p+1是图像中相邻元素,|fp−fp−1|就是图像梯度,也即图像的前向差分,#{}表示计数,输出图像中满足|fp−fp−1|≠0的个数,即c(f)是图像梯度的L0范数。这样表示有一个优点,就是c(f)是非零梯度个数的函数,与图像的梯度本身无关,也就是 #{p|∣∣fp−fp−1∣∣≠0}=#{p|∣∣α(fp−fp−1)∣∣≠0}这还不是我们的目标函数,只是一个约束条件。图像梯度最小化平滑一维信号先以一维信号为例,输入信号g,输出信号f,那么我们的目标函数可以如下表示: minf∑p(fp−gp)2s.t.c(f)=k左边使得输入信号与输出信号尽可能接近,右边非零约束梯度个数为k。下图依次是k=1,k=2,k=5,k=200时恢复的信号。二维图像中,我们需要约束图像水平和垂直方向的梯度数目,形式上如下 minf∑p(fp−gp)2+λ⋅c(∂xf,∂yf)c(∂xf,∂yf)=#{p|∣∣∂xfp∣∣+∣∣∂yfp∣∣≠0}由于L0范数不可导,全局最优问题是一个NP难问题,所以这里使用变量分裂法,松弛为两个二次规划问题,每个问题都有其闭式解(closed-form)(因为二次函数都可以求导,得到其最小值)。 minf∑p(fp−gp)2+λ⋅c(∂xf,∂yf)+β⋅∑p((∂xfp−hp)2+(∂yfp−vp)2)迭代优化 给定 h,v,计算f E(f)=∑p(fp−gp)2+β⋅((∂xfp−hp)2+(∂yfp−vp)2)对上式求解,结果取傅里叶变换,可得 f=F−1(F(g)+β(F(∂x)∗F(h)+F(∂y)∗F(v))F(1)+β(F(∂x)∗F(∂x)+F(∂y)∗F(∂y))本应该ℱ是傅里叶变换专用符号,但这里不支持,因此用了大写F。给定 f,计算h,v E(h,v)=∑p((∂xfp−hp)2+(∂yfp−vp)2)+λβc(h,v)c(h,v)是|h|+|v|中非零元素的个数 E(h,v)=∑p((∂xfp−hp)2+(∂yfp−vp)2)+λβH(|hp|+|vp|)这里H(|hp|+|vp|)是一个二值函数,如果|hp|+|vp|≠0返回1,否则0。对于每一个像素来说,有下式 Ep={(∂xfp−hp)2+(∂yfp−vp)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;endif ~exist('lambda','var') lambda = 2e-2;endS = 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]);endbeta = 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) |
CopyRight 2018-2019 实验室设备网 版权所有 |