基于加权最小二乘法的保边缘平滑滤波器(WLS)
来源:互联网 发布:火石软件 编辑:程序博客网 时间:2024/05/25 12:21
引言
陆陆续续在计算摄影学接触了不少保边滤波器,其重要性自不必说,可以用在图像的增强,图像抽象画,高动态范围图像压缩,图像色调映射等。
今天介绍的WLS(最小二乘滤波器)即使其中一种,论文全称《Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation》,作者Z. Farbman等,发表在ACM SIGGRAPH 2007。
这篇文章是基于最优化理论,代码是公开,点此下载。当然有更好的滤波器不断出现。但是这篇文章核心代码只有十几行左右,数学功底深厚,方法比较去值得研究和学习之用。这篇文章只是我看此论文一个笔录,不正确之处欢迎指正。
算法
设计一个保边滤波器可以看做是两个矛盾的目标的结合体。对于一副输入图像
这里,下标
将上式写成矩阵形式(因为矩阵比较清晰简洁,很好用的工具,^_^):
这里,
这里
这里
还有平滑项权重的设置,作者如下定义
注意到
matrix)。简单解释一下异性,异性因为
这个算法的核心还是生成拉普拉斯这个矩阵。
先准备一下数据,一会儿再来填充一下这个矩阵。
第一步根据图像
% Compute affinities between adjacent pixels based on gradients of Ldy = diff(L, 1, 1);dy = -lambda./(abs(dy).^alpha + smallNum);dy = padarray(dy, [1 0], 'post');dy = dy(:);dx = diff(L, 1, 2); dx = -lambda./(abs(dx).^alpha + smallNum);dx = padarray(dx, [0 1], 'post');dx = dx(:);
这一步基本上就是按照公式(4)(5)编写的,只是lambda前面多了一个负号,
接下来就是构造拉普拉斯矩阵了,这里的拉普拉斯是一个对称,只有少数几个对角线有元素,其余为零的稀疏矩阵。
% Construct a five-point spatially inhomogeneous Laplacian matrixB(:,1) = dx;B(:,2) = dy;d = [-r,-1];A = spdiags(B,d,k,k);e = dx;w = padarray(dx, r, 'pre'); w = w(1:end-r);s = dy;n = padarray(dy, 1, 'pre'); n = n(1:end-1);D = 1-(e+w+s+n);A = A + A' + spdiags(D, 0, k, k);
这里
看最终生成的一副拉普拉斯矩阵图吧。
这张图中可以看出每一行元素之和都为0。其中紧靠主对角线元素的两个对角线填充的是
完整的代码如下:
function OUT = wlsFilter(IN, lambda, alpha, L)%WLSFILTER Edge-preserving smoothing based on the weighted least squares(WLS) % optimization framework, as described in Farbman, Fattal, Lischinski, and% Szeliski, "Edge-Preserving Decompositions for Multi-Scale Tone and Detail% Manipulation", ACM Transactions on Graphics, 27(3), August 2008.%% Given an input image IN, we seek a new image OUT, which, on the one hand,% is as close as possible to IN, and, at the same time, is as smooth as% possible everywhere, except across significant gradients in L.%%% Input arguments:% ----------------% IN Input image (2-D, double, N-by-M matrix). % % lambda Balances between the data term and the smoothness% term. Increasing lambda will produce smoother images.% Default value is 1.0% % alpha Gives a degree of control over the affinities by non-% lineary scaling the gradients. Increasing alpha will% result in sharper preserved edges. Default value: 1.2% % L Source image for the affinity matrix. Same dimensions% as the input image IN. Default: log(IN)% %% Example % -------% RGB = imread('peppers.png'); % I = double(rgb2gray(RGB));% I = I./max(I(:));% res = wlsFilter(I, 0.5);% figure, imshow(I), figure, imshow(res)% res = wlsFilter(I, 2, 2);% figure, imshow(res)if(~exist('L', 'var')), L = log(IN+eps);endif(~exist('alpha', 'var')), alpha = 1.2;endif(~exist('lambda', 'var')), lambda = 1;endsmallNum = 0.0001;[r,c] = size(IN);k = r*c;% Compute affinities between adjacent pixels based on gradients of Ldy = diff(L, 1, 1);dy = -lambda./(abs(dy).^alpha + smallNum);dy = padarray(dy, [1 0], 'post');dy = dy(:); %公式(5)dx = diff(L, 1, 2); dx = -lambda./(abs(dx).^alpha + smallNum);dx = padarray(dx, [0 1], 'post');dx = dx(:); %公式(4)% Construct a five-point spatially inhomogeneous Laplacian matrixB(:,1) = dx;B(:,2) = dy;d = [-r,-1];A = spdiags(B,d,k,k);%构造主对角线e = dx;w = padarray(dx, r, 'pre'); w = w(1:end-r);s = dy;n = padarray(dy, 1, 'pre'); n = n(1:end-1);D = 1-(e+w+s+n); %再加上单位矩阵,这里元素都为负数,先取反A = A + A' + spdiags(D, 0, k, k); %A+A'为非主对角线元素% SolveOUT = A\IN(:); %公式(3)OUT = reshape(OUT, r, c);%转换为矩阵
算法介绍完毕,关于其应用可以参考论文的主页,见末尾。
关于拉普拉斯矩阵
拉普拉斯矩阵在计算机图形和计算摄影学经常会遇到的,比如说灰度图像着色问题,泊松图像编辑,HDR,还有保边滤波器的设计,当然在计算机图形学中的也有诸多应用,所以掌握其解法还是非常有必要的。
它经常会出现在如下的最优化问题当中
第一项是数据项,度量
参考资料
FARBMAN, Z., FATTAL, R., LISCHINSKI, D., AND SZELISKI, R. 2008. Edge-preserving decompositions for multi-scale tone and detail manipulation. ACM Transactions on Graphics (Proc. SIGGRAPH) 27, 3 (August).
Krishnan D, Fattal R, Szeliski R. 2013. Efficient preconditioning of laplacian matrices for computer graphics[J]. ACM Transactions on Graphics (Proc. SIGGRAPH), 32,4
转载请保留以下信息
- 基于加权最小二乘法的保边缘平滑滤波器(WLS)
- 基于加权最小二乘法的保边缘平滑滤波器(WLS)
- 基于加权最小二乘法的保边缘平滑滤波器(WLS),matlab程序自己编写,更直观
- Bilateral Filter:保护边缘的平滑滤波器
- Bilateral Filter:保护边缘的平滑滤波器
- Bilateral Filter:保护边缘的平滑滤波器
- 双边滤波器(Bilateral Filter)保护边缘的平滑滤波器及matlab例子
- 计算机视觉——加权最小二乘(WLS)滤波器
- 【图像处理】三种边缘保持的滤波器(双边,引导,加权最小二乘)
- Bilateral Filter:一种保边平滑滤波器
- 平滑滤波器的演化
- 平滑滤波器的演化
- 平滑滤波器的演化
- 平滑滤波器的演化
- 梯度有关的加权滤波器
- 双指数边缘平滑滤波器用于磨皮算法的尝试。
- 双指数边缘平滑滤波器用于磨皮算法的尝试
- 双指数边缘平滑滤波器用于磨皮算法的尝试。
- UNIX环境高级编程之第10章:信号
- StringHelper
- 函数回调例程
- Xcode 6 empty project
- 91 symfony2 day-1
- 基于加权最小二乘法的保边缘平滑滤波器(WLS)
- NOIP2008 火柴棒等式
- PCA主成分分析
- poj 1401 变形课 数论+二分
- Linux操作系统上的文件共享
- Majority Element II 寻找数组中出现次数大于n/3的数
- 运算优先级等几个小问题总结
- python多继承(新式类)一
- SQL Sever2008表格的增删改查