加权最小二乘滤波WLS(weighted least squares)加上双边滤波,引导滤波是三种较为经典的边缘保持性滤波算法,该算法最早见于论文:《Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation》中,原作者项目主页:http://www.cs.huji.ac.il/~danix/epd/,本篇进行总结和测试。

加权最下二乘滤波原理:

作者提出该算法的初衷是,基于双边滤波的算法无法在多尺度上提取到很好的细节信息,并可能出现伪影。加权最小二乘滤波目的即是使得结果图像u 与原始图像 p经过平滑后尽量相似,但是在边缘部分尽量保持原状,用数学表达出来即为:

  (1)

其中,ax,ay为权重系数。目标函数第一项(up−gp)2代表输入图像u和输出图像g越相似越好;第二项是正则项,通过最小化u的偏导,使得输出图像g越平滑越好。

上式可以改写为矩阵形式:

                 (2)

其中,Ax,Ay为以ax,ay为对角元素的对角矩阵,Dx,Dy为前向差分矩阵,DTx和DTy是后向差分算子,要使得(2)式去的最小值,u需满足如下:

                                                                     (3)

其中,,作者去的平滑权重系数为:

其中 l 表示log, ε一般取0.0001。式(3)求出μ为:

,                                                     (4)

当所选区域连续是,平滑权重系数可以近似为:ax ≈ ay ≈ a,那么:

                                                                     (5)

现在,式(5)未知变量就只剩下一个L了,L = DTxDx + DTyDy,可以看出,L为拉普拉斯齐次矩阵。更多内容可以参考《Efficient Preconditioning of Laplacian Matrices for Computer Graphics》,里面介绍了拉普拉斯矩阵的数学基础和应用。

加权最小二乘滤波实现:

原作者在项目主页中公布了源码,这里po一下,便于理解:

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 L
dy = diff(L, 1, 1);  %对L矩阵的第一维度上做差分
dy = -lambda./(abs(dy).^alpha + smallNum);
dy = padarray(dy, [1 0], 'post'); %在最后一行后面补一行0
dy = dy(:); %按列生成向量,就是Ay对角线上元素构成的矩阵,下同dx = diff(L, 1, 2);
dx = -lambda./(abs(dx).^alpha + smallNum);
dx = padarray(dx, [0 1], 'post');
dx = dx(:);% Construct a five-point spatially inhomogeneous Laplacian matrix
B(:,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);% Solve
OUT = A\IN(:);
OUT = reshape(OUT, r, c);

这里A+A′构造的是拉普拉斯非主对角线元素,D是主对角线元素。n,s,w,e是上(北)下(南)左(西)右(东)四个方位。 最终生成的一副拉普拉斯矩阵图:

图中每一行元素之和都为0。其中紧靠主对角线元素的两个对角线填充的是dy元素,比较远的对角线填充的是dx元素,这样拉普拉斯矩阵处理的就是二维图像了。

测试函数:

%% 加权最小二乘滤波测试函数
clc,close all,clear all;
RGB = imread('flower.png');
% if length(size(RGB))>2
%     I = double(rgb2gray(RGB));
% else
%     I=double(RGB);
% end
I=double(RGB);
res=I;
if length(size(RGB))>2for i=1:3I(:,:,i) = I(:,:,i)./max(I(:));res(:,:,i) = wlsFilter(I(:,:,i));end
end
figure,
subplot(211),imshow(I),title('原图');
subplot(212), imshow(res),title('wls-output');

参考:

http://blog.csdn.net/bluecol/article/details/48576253

Edge-preserving decompositions for multi-scale tone and detail manipulation. ACM Transactions on Graphics 
Efficient preconditioning of laplacian matrices for computer graphics[J]. ACM Transactions on Graphics

加权最小二乘(wls)滤波算法原理及实现相关推荐

  1. 一阶RC低通滤波算法原理与实现

    文章目录 1. 一阶低通滤波算法原理 2. 一阶滤波算法的特点 3. 基本算法的例程 4. 优化:减少乘.除的运算次数以提高运算速度 5. 改进:动态调整滤波系数 动态调整滤波例程 本文整理自网络,参 ...

  2. Kalman滤波算法原理(Matlab/C/C++)

    仪器的观测存在较大的随机误差,因此会出现极端异常观测值.为此,本研究采用Kalman滤波对观测进行最佳估计,进而对时序数据进行降维处理.Kalman滤波是R. E. Kalman[1, 2]提出的一种 ...

  3. LMS 自适应滤波算法原理和实现(不使用自带函数库)

    1.基本原理 y(n)=x(n)wTe(n)=d(n)−y(n)w(n+1)=w(n)+μe(n)x(n)\begin{aligned} &y(n)=\pmb{x}(n)\pmb{w}^T\\ ...

  4. 卡尔曼(Kalman)滤波算法原理、C语言实现及实际应用

    文章目录 卡尔曼滤波 一.滤波效果展示 二.简介 三.组成 1. 预测状态方程 (1)目的: (2)方程: (3)备注 2. 预测协方差方程 (1)目的 (2)方程 (3)备注 3. 卡尔曼增益方程 ...

  5. 计算机视觉滤波器大小,计算机视觉——加权最小二乘(WLS)滤波器

    计算机视觉--加权最小二乘(WLS)滤波器 计算机视觉--加权最小二乘(WLS)滤波器 Edge-Preserving Decompositions for Multi-Scale Tone and ...

  6. Bilateral Filters(双边滤波算法)原理及实现(一)

    双边滤波算法原理 双边滤波是一种非线性滤波器,它可以达到保持边缘.降噪平滑的效果.和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基于高 ...

  7. Bilateral Filters(双边滤波算法)的超简单原理,学不会你打我。

    摘要: 双边滤波(Bilateral Filters)是非常常用的一种滤波,它可以达到保持边缘.降噪平滑的效果.和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像 ...

  8. NR基础篇下——中值滤波、多级中值滤波、多级中值混合滤波、加权中值滤波、中值有理滤波

    上一篇分享了一些均值滤波相关的算法,均值滤波作为一种线性滤波器,在滤除噪声的同时也会导致边缘模糊问题.而且均值滤波对高斯噪声的效果很好,但是对于椒盐噪声的效果就很一般.但是中值滤波作为一种顺序滤波器, ...

  9. matlab双边滤波处理点云,常见点云滤波算法

    姓名:张志文 学号:19021210649 [嵌牛观察] 目前点云处理的算法十分的多,不同的滤波算法有着不同的应用方向 [嵌牛鼻子] 点云:滤波 [嵌牛提问] 常见的点云滤波算法有哪些? [嵌牛正文] ...

  10. 图像处理:双边滤波算法

    今天主要是回顾一下双边滤波,我曾经在这篇--图像处理:推导五种滤波算法中推导过它,其中包含了我自己写的草稿图. 目录 双边滤波算法原理 (1)空间域核 (2)值域核 理解双边滤波 空域权重​编辑和值域 ...

最新文章

  1. servlet第2讲(下集)----创建servlet实例(继承HttpServlet)
  2. python实战系列之爬取CSDN博客之星2020年度排名情况(附源码)
  3. java邮件发送api文件,JavaMail API 发送一个HTML电子邮件
  4. 给网页上加广告的一点感受
  5. TensorFlow调试常见问题(pycharm)
  6. bzoj 2631: tree
  7. 如何启动一个本地静态服务器
  8. android PowerManager 权限问题
  9. Linux btrfs之文件系统转换
  10. 65lbc184应用电路原理_控制电路设计经验技巧分享
  11. C# 生成word文档(NPOI.XWPF)
  12. 方舟建筑代码指令大全
  13. C++ Primer 中文版(第 5 版)练习解答合集
  14. 刘涛入职阿里,年薪超过欧阳娜娜!揭秘阿里巴巴的明星员工和职级薪资!
  15. 为什么量子计算机是锥形,科学家制作超高精度微腔为量子计算机铺垫
  16. 2010不断创新的供应链应用模式
  17. visio和office安装冲突
  18. android_iphone和java三个平台一致的加密方法_Android、iPhone和Java三个平台一致的加密工具...
  19. 使用Heartbeat实现双机热备
  20. 什么是大数据(Big Data)?

热门文章

  1. JavaScript学习心得04
  2. maven自动部署到tomcat的问题
  3. DHCP server 冒充及DOS攻击处理方案
  4. HttpClient 学习整理【转】
  5. Bregman 散度
  6. PHP中的正则表达式函数
  7. 演示账号激活的过程:注册——向指定邮箱发送邮件——用户登录邮箱,激活账号
  8. Jquery—对$()的总结
  9. [Java基础]StringUtils.join()方法与String.join()方法的使用
  10. Thingsboard 3.1.0 - REST API