L0范数图像平滑 您所在的位置:网站首页 龅牙珍本人 L0范数图像平滑

L0范数图像平滑

2023-08-07 04:16| 来源: 网络整理| 查看: 265

本文为转载,原博客地址:http://blog.csdn.net/bluecol/article/details/48750561

图像平滑是计算摄影学一门基础重要的工具,其作用是拂去不重要的细节,保留较大的图像边缘,主要应用于边缘检测,JPEG压缩图像人工伪迹去除,非真实绘制等领域。 

图像平滑应用图像平滑大体上可以分为两类:基于局部和基于全局方法,基于局部的方法像有名双边滤波,各向异性扩散,将图像分成一些局部块进行处理;全局方法比如全变分(Total Variation)和最小二乘滤波(Weighted Least Square),同时处理整幅图像,可以达到全局最优的目的。 以往的方法,拂去图像中去对图像细节部分也会对图像中大的边缘进行惩罚,这样也会导致图像中大的边缘减弱或丢失,因此徐立等人提出使用图像L0范数平滑,该滤波器是一种基于稀疏策略的全局平滑滤波器。 本文是对香港中文大学徐立等人所做的《Image Smoothing via L0 Gradient Minimization》的读后笔录,也可以看成是论文的翻译吧。使用图像梯度L0范数平滑图像,具有以下优点:

通过去除小的非零梯度,抚平不重要的细节信息增强图像显著性边缘图像梯度L0范数最小化

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时恢复的信号。 

一维信号实际上,k的取值变化范围很大,特别是对于二维图像来说。将上式子转换成无约束问题 minf∑p(fp−gp)2+λ⋅c(f)这里λ是一个权重控制两者之间的比重,实际上它是一个平滑参数,当其值越大越平滑。图像中非零梯度个数与1λ呈单调递增关系。 从下图中可以看到梯度L0范数的优点,即信号的尖锐部分没有被减弱。 比较

二维图像

二维图像中,我们需要约束图像水平和垂直方向的梯度数目,形式上如下 

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 实验室设备网 版权所有