王者荣耀苏烈视频打不死怎么办 王者荣耀克制苏烈的方法

2478人阅读
图像处理(14)
双边滤波其实是来源于高斯滤波,充分的利用了空域和值域的信息,从而得到和好的滤波效果。
&&&&&& 双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。
&&&&&& 双边滤波器的好处是可以做边缘保存(edge preserving),一般过去用的维纳滤波或者高斯滤波去降噪,都会较明显地模糊边缘,对于高频细节的保护效果并不明显。双边滤波器顾名思义比多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。对于脉冲噪声,双边滤波会把它当成边缘从而不能去除。
&&&&&& 在图像处理领域中不管是去雾还是HDR亦或是美容算法的最核心的其实就是这种边缘保持滤波器,从双边滤波的问世以来,人们对它进行了不断的改进,其它的改进算法将在以后的博客中给出。这里先介绍下双边滤波器的基本原理和MATLAB实现。原文链接
&&&&&& C.Tomasi和R.Manduchi提出了一种非迭代的简单策略,用于边缘保持滤波,称之为双边滤波。双边滤波的内在想法是:在图像的值域(range)上做传统滤波器在空域(domain)上做的工作。空域滤波对空间上邻近的点进行加权平均,加权系数随着距离的增加而减少;值域滤波则是对像素值相近的点进行加权平均,加权系数随着值差的增大而减少。
&&&&&& 低通空域滤波器定义如下,f(x)为输入图像,h(x)为输出图像:
&&&&&& 在上式中,度量了邻域中心点x与邻近点的几何邻近度,Kd为归一化参数,其值与图像的内容无关,在相同的几何位置其值恒定。
&&&&&& 同理,值域滤波可定义如下:
&&&&& 度量了邻域中心点x与邻近点像素的光度相似性,Kr为归一化参数,与Kd不同,Kr的值依赖于图像f。
&&&&& 单单应用值域滤波是没有意义的,它仅仅改变了图像的颜色映射,因为在空间上远离领域中心x的点的取值不应该对x的最终值有所影响。恰当的做法是结合空域与值域滤波,也即同时考虑几何位置与光度大小。组合后的滤波即为双边滤波器:
&&&&& 这种结合后的滤波器称之为双边滤波器。它用与x点空间邻近且光度相似的点的像素值平均来取代x点上原来的像素值。在平滑的区域,双边滤波器表现为标准的网域滤波器,通过平均过滤掉噪声。如图2(a)所示,存在一条锐利的分界线将图像分为暗和明的区域两个区域,当双边滤波器被定位在明区域上的一个像素点时,相似函数s对同一侧的像素值取近似于1的值,对暗区域的像素点取近似于0的值,如图2(b)所示。滤波操作的结果是,滤波器用中心点周围的明区域像素点的平均值来取代原来中心点的值,而忽略与其邻近的暗区域像素点,反之亦然。因为公式中网域要素的作用,过滤后的图像达到良好的平滑效果,同时因为值域要素的作用,明暗区域的分界线也被很好地保留了(见图2(c))。
&&&&&& 双边滤波能够在保持强边缘的同时有效地对图像的细小变化进行平滑,所以它被用于噪声去除、细节分解、HDR压缩和图像抽象。Petschnigg和G.,&Agrawala等人在双边滤波器的基础上提出了联合双边滤波的概念。它与双边滤波不同的是,联合双边滤波器的掩膜权重不是基于输入图像而是基于导向图像进行计算的。这种方法适用于输入图像无法提供准确边缘信息的情况,例如闪光/无闪光去噪、图像上采样、图像去卷积。
&&&&& 虽然双边滤波有上述的优点,但同时也存在着一些不足。其中一点是当它被用于细节分解和HDR压缩时,会引起梯度反转人造物(表现为光晕)的出现。这是因为当一个像素点周围的相似像素很少时,其高斯加权平均是不稳定的。另外,双边滤波的效率偏低,其时间复杂度达到O(Nr2),当掩膜半径r过大时其计算时间是无法接受的。
&&&&&&&&& 关于双边滤波的加速方法会在下次的博文中给出。
下面是MATLAB的实现代码
CopyRight:
% Douglas R. Lanman, Brown University, September 2006.
% dlanman@brown.edu, http://mesh.brown.edu/dlanman
%简单地说:
%A为给定图像,归一化到[0,1]的矩阵
%W为双边滤波器(核)的边长/2
%定义域方差σd记为SIGMA(1),值域方差σr记为SIGMA(2)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Pre-process input and select appropriate filter.
function B = bfilter2(A,w,sigma)
% Verify that the input image exists and is valid.
if ~exist('A','var') || isempty(A)
error('Input image A is undefined or invalid.');
if ~isfloat(A) || ~sum([1,3] == size(A,3)) || ...
min(A(:)) & 0 || max(A(:)) & 1
error(['Input image A must be a double precision ',...
'matrix of size NxMx1 or NxMx3 on the closed ',...
'interval [0,1].']);
% Verify bilateral filter window size.
if ~exist('w','var') || isempty(w) || ...
numel(w) ~= 1 || w & 1
w = ceil(w);
% Verify bilateral filter standard deviations.
if ~exist('sigma','var') || isempty(sigma) || ...
numel(sigma) ~= 2 || sigma(1) &= 0 || sigma(2) &= 0
sigma = [3 0.1];
% Apply either grayscale or color bilateral filtering.
if size(A,3) == 1
B = bfltGray(A,w,sigma(1),sigma(2));
B = bfltColor(A,w,sigma(1),sigma(2));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Implements bilateral filtering for grayscale images.
function B = bfltGray(A,w,sigma_d,sigma_r)
% Pre-compute Gaussian distance weights.
[X,Y] = meshgrid(-w:w,-w:w);
%创建核距离矩阵,e.g.
[x,y]=meshgrid(-1:1,-1:1)
%计算定义域核
G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));
% Create waitbar.
h = waitbar(0,'Applying bilateral filter...');
set(h,'Name','Bilateral Filter Progress');
% Apply bilateral filter.
%计算值域核H 并与定义域核G 乘积得到双边权重函数F
dim = size(A);
B = zeros(dim);
for i = 1:dim(1)
for j = 1:dim(2)
% Extract local region.
iMin = max(i-w,1);
iMax = min(i+w,dim(1));
jMin = max(j-w,1);
jMax = min(j+w,dim(2));
%定义当前核所作用的区域为(iMin:iMax,jMin:jMax)
I = A(iMin:iMax,jMin:jMax);%提取该区域的源图像值赋给I
% Compute Gaussian intensity weights.
H = exp(-(I-A(i,j)).^2/(2*sigma_r^2));
% Calculate bilateral filter response.
F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1);
B(i,j) = sum(F(:).*I(:))/sum(F(:));
waitbar(i/dim(1));
% Close waitbar.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Implements bilateral filter for color images.
function B = bfltColor(A,w,sigma_d,sigma_r)
% Convert input sRGB image to CIELab color space.
if exist('applycform','file')
A = applycform(A,makecform('srgb2lab'));
A = colorspace('Lab&-RGB',A);
% Pre-compute Gaussian domain weights.
[X,Y] = meshgrid(-w:w,-w:w);
G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));
% Rescale range variance (using maximum luminance).
sigma_r = 100*sigma_r;
% Create waitbar.
h = waitbar(0,'Applying bilateral filter...');
set(h,'Name','Bilateral Filter Progress');
% Apply bilateral filter.
dim = size(A);
B = zeros(dim);
for i = 1:dim(1)
for j = 1:dim(2)
% Extract local region.
iMin = max(i-w,1);
iMax = min(i+w,dim(1));
jMin = max(j-w,1);
jMax = min(j+w,dim(2));
I = A(iMin:iMax,jMin:jMax,:);
% Compute Gaussian range weights.
dL = I(:,:,1)-A(i,j,1);
da = I(:,:,2)-A(i,j,2);
db = I(:,:,3)-A(i,j,3);
H = exp(-(dL.^2+da.^2+db.^2)/(2*sigma_r^2));
% Calculate bilateral filter response.
F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1);
norm_F = sum(F(:));
B(i,j,1) = sum(sum(F.*I(:,:,1)))/norm_F;
B(i,j,2) = sum(sum(F.*I(:,:,2)))/norm_F;
B(i,j,3) = sum(sum(F.*I(:,:,3)))/norm_F;
waitbar(i/dim(1));
% Convert filtered image back to sRGB color space.
if exist('applycform','file')
B = applycform(B,makecform('lab2srgb'));
B = colorspace('RGB&-Lab',B);
% Close waitbar.
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:58371次
排名:千里之外
原创:32篇
(1)(5)(1)(6)(5)(1)(12)(6)>> 双边滤波
所属分类:
下载地址:
双边滤波的代码.rar文件大小:116.25 kB
分享有礼! 》
请点击右侧的分享按钮,把本代码分享到各社交媒体。
通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。
应用背景双边滤波是一种保边去噪效果良好的一种滤波方法,双边滤波(Bilateral filter)是一种可以保边去噪的滤波器。之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。可以与其相比较的两个filter:高斯低通滤波器关键技术双边滤波在图像处理领域中有着广泛的应用,比如去噪、去马赛克、光流估计等等,最近,比较流行的Non-Local算法也可以看成是双边滤波的一种扩展。自从Tomasi et al等人提出该算法那一天起,如何快速的实现他,一直是人们讨论和研究的焦点之一,在2011年及2012年Kunal N. Chaudhury等人发表的相关论文中,提出了基于三角函数关系的值域核算法,能有效而又准确的实现高效双边算法。本文主要对此论文提出的方法加以阐述。
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
1.05 kB08-09-15 22:39
xinxin.jpg115.40 kB31-08-15 15:35
&双边滤波的代码&0.00 B17-09-15 09:15
(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
评价成功,多谢!
下载双边滤波的代码.rar
CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了
您的积分不足,优惠套餐快速获取 30 积分
10积分 / ¥100
30积分 / ¥200原价 ¥300 元
100积分 / ¥500原价 ¥1000 元
订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。
支付宝支付宝付款
微信钱包微信付款
更多付款方式:、
您本次下载所消耗的积分将转交上传作者。
同一源码,30天内重复下载,只扣除一次积分。
鲁ICP备号-3 runtime:Elapsed:61.834ms - init:0.1;find:0.7;t:0.4;tags:0.3;related:8.7;comment:0.1; 27.69
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
^_^"呃 ...
Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧小波上机实验报告-哈工大_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
小波上机实验报告-哈工大
上传于|0|0|文档简介
&&工大小波上机实验报告,程序为真……
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩18页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢1898人阅读
图像处理(14)
&&&&&& 双边滤波问世以来,以其较好的效果受到了广泛的实用,但是由于双边滤波同时考虑了空域和值域使其在速度方面带来了不少麻烦。为此人们提出了不少改进方法。
(一)分离高斯核的方法(对每个空间方向使用一维双边滤波)
&&&&&& Pham&and&Vliet在separable&bilateral&filtering&for&fast&video&preprocessing&.&[PvV05]这篇文章中提出用一维的双边滤波器分别对各个空间方向进行滤波。结果非常快,但在图象边缘分布着坐标系的地方会产生人工的痕迹。
&&&&& 1:简单的分离高斯核
&&&&& 由于高斯函数可以写成可分离的形式,因此可以采用可分离滤波器实现来加速。所谓的可分离滤波器,就是可以把多维的卷积化成多个一维卷积。具体到二维的高斯滤波,就是指先对行做一维卷积,再对列做一维卷积。这样就可以将计算复杂度从O(M*M*N*N)降到O(2*M*M*N),M,N分别是图像和滤波器的窗口大小。问题是实现时候怎么计算一维的卷积核呢?其实很简单,按照前面计算出来的窗口大小,计算所有离散点上一维高斯函数的权值,最后将权值之和归一化到1.&另外,可以设法将二维模板运算转换成一维模板运算,对速度的提高也是非常可观的。
例如,(1)式可以分解成一个水平模板和一个垂直模板,即
&&&&&&& 用一个实际的例子来验证一下:
&&&&&&& 设图象为,经过(1)式处理后变为,经过(2)式处理后变为,两者完全一样。如果计算时不考虑周围一圈的象素,前者做了4×(9个乘法,8个加法,1个除法),共36个乘法,32个加法,4个除法;后者做了4×(3个乘法,2个加法)+4×(3个乘法,2个加法)+4个除法,共24个乘法,16个加法,4个除法,运算简化了不少,如果是大图,效率的提高将是非常客观的。
&&&&&& 2:应用到高斯滤波器
&&&&&& 高斯平滑滤波器的原理高斯滤波器是根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对去除服从正态分布的噪声是很有效果的。一维零均值高斯函数为。其中,高斯分布参数决定了高斯滤波器的宽度。对图像来说,常用二维零均值离散高斯函数作平滑滤波器,函数表达式如下:式(1)
&&&&&& 由于高斯函数的可分离性,高斯滤波器加速可以有效实现。通过二维高斯函数的卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积的结果与方向垂直的相同一维高斯函数进行卷积。因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。这些性质使得它在早期的图像处理中特别有用,表明高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器。
高斯函数的可分离性很容易表示:
&&&&&&&离散高斯平滑滤波器的设计在高斯滤波器的设计中,高斯函数的最佳逼近由二项式展开的系数决定。由高斯函数的可分离性得到,二维高斯滤波器能用2个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向。实际上,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成。对较大的滤波器,二项式展开系数对大多数计算机来说都太多,但是,任意大的高斯滤波器都能通过重复使用小的高斯滤波器来实现。设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板值。
&&&&& 选择适当的σ2值,就可以在窗口上评价该值,以便获取核或模板。首先选择n值和σ2值,然后根据式(4)计算出模板的右下角元素,再根据高斯模板的中心左右上下对称性(如图1&c7×7的模板结构所示)对应地复制给其它三个区域,即可得出整个模板的元素,最后再对全部的模板元素求和、取倒数即求得规范化系数。
(二)实用3D直方图
&&&&&& Weiss在文章Fast&Median&and&Bilateral&Filtering中提出用一个基于3维直方图的方法,并用此方法来加速正方形空间核的二维双边滤波。其算法的主要思想就是改变图像直方图的表示方式来达到加速图像处理的过程,同时达到在任意位宽的图像,任意大小的滤波核的情况下其时间复杂度都为;这是一种基于处理每个像素需要的时间复杂度度量,在之前的双边滤波算法都是在之上。其核心思想就是利用多个部分直方图来合成一个完整的直方图,相邻列可以并行处理,相邻行之间的改变也大大缩小了;并且在对直方图的排序时采用基数排序来代替传统的快速排序。而该改进确实可以提升算法的速度,但是存储开销非常大,文中则提出了一种基于序数变化的思想来减小存储开销。对于高精度的图像他又提出了一种基于移位操作的逐步取精的方法,即在源图像上右移8位得到一个低位图像然后进行双边滤波,得到的结果保存以便第二次移位得到的图像利用,以便更快的找到中值;最后右移完成,那么整个高精度的图像也就完成了滤波。
&&&&&& 在最近的文章Contant&time&O(1)&Bilatearal&Filtering[Por08]中,Porikli同样介绍了基于3维直方图的一种低计算复杂度的算法,Porikli提出常数时间双边滤波算法O(1)。其中常数时间是指计算时间与滤波核大小r无关。文章针对不同特征的双边滤波采用不同的证明方法。文章主要提供了三种方法:整体直方图,线性滤波器,泰勒级数。作者证明几种情况都能使双边滤波达到o(1)。
(三)基于FFT加速的方法
&&&&&& Durand&and&Dorsey&在文章Fast&&Bilateral&&Filtering&&for&&the&&Display&&of&&High-Dynamic&&Images[DD02]中提出一种快速的近&#20284;算法来处理<span style="color:#维的双边滤波,该算法通过将灰度核g2表示为g2(n-I(y))I(y),其中n是一个常数,通二维快速复利叶变换减少计算量,然后线性插&#20540;得到结果。
Paris&and&Durand&在文章A&Fast&Approximation&of&the&Bilateral&Filter&using&a&Signal&Processing&Approach[PD06]中将3维复利叶变换应用到下采样中。所以[DD02]中的算法可以看成Paris&and&Durand&在文章[PD06]中算法的一种特殊情况。Paris&and&Durand在文章[PD09]中将他们的算法扩展到彩色图象中。
(四)FGT泰勒级数展开
&&&&& 1:快速高斯变换
&&&&&& 如下对高斯函数的加权和进行处理
&&&&&&定义
对高斯函数进行Hermite展开为:
进行平移和尺度变换后有:
由上面可以得到下式:
于是对多维的情况可以表示如下:
&&&&& 2:基于快速高斯变换的双边滤波
&&&&&& 在文章[Fast&Gauss&Bilateral&Filtering——2010]中,作者应用FGT的办法,首先对双边滤波的表达式进行改写:
然后定义了
其中ti为目标的,si为源点。
&&&&& 3:基于改进的快速高斯变换的双边滤波
&(五)用Raised cosines函数来&#36924;近高斯&#20540;域函数(可参考下面博文)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:58373次
排名:千里之外
原创:32篇
(1)(5)(1)(6)(5)(1)(12)(6)

我要回帖

更多关于 王者荣耀苏烈 的文章

 

随机推荐