利用联合双边滤波或引导滤波进行升采样(Upsampling)技术提高一些耗时算法的速度。
2014-04-20 22:18
971 查看
本文算法合作联系QQ: 1664462947, 非诚勿扰
邮件地址: laviewpbt@sina.com
这十年来,在图像处理领域提出了很多新的图像分析和处理方法,包括是自动的以及一些需要有人工参与的,典型的比如stereo depth computations、image colorization、tone mapping of high dynamic range (HDR) images、 graph cuts ,这些算法都有着比较好的效果,但都普遍存在一个问题:就是计算量特别大,很难满足用户的需求。而数字图像在尺寸大小上的增长速度这段时间也相当惊人。还有个问题就是有些算法需要解一个很大的稀疏矩阵方程,可能会大到系统的无法为接其过程分配足够的内存。因此,如果解决这两个问题,一个直观而又简单的想法就是:先处理原图下采样的小图,然后将处理后的结果在上采样。
但是,如此处理存在的问题就是上采样算法会直接影响到处理效果。如果是纯粹的最近邻插值、或者是双线性,抑或是三次立方等复杂点插值算法,都会使人感到效果失真。但是在这种情况下的我们实际上比简单的图像放大时多了一个信息的,就是我有原始的未做处理的并且未缩小的图像的信息,是否能利用这个信息来增强上采样的效果呢?目前我看到了两种这方面的算法。
一种就是联合双边滤波,我们先简单的看看这个东西的数学公式吧:
![](http://images.cnitblog.com/i/349293/201404/202104267287328.png)
对上式做个简答的解释,其中I表示输入图像,p/q表示X/Y物理坐标,Ip表示对应位置的像素值,J表示输出, f/g是权重分布函数,一般为高斯函数。这种滤波的结果就是周边像素的权值不仅和距离有关还和那个位置的像素值有关,如果在值域的权重计算过程引入另外一幅图像,如下式,则称之为联合双边滤波。
![](http://images.cnitblog.com/i/349293/201404/202107372139002.png)
联合双边滤波上采样技术也很简单,一种便于理解的也便于写代码的方式就是把下采样并进行处理过后的小图按照最近邻插值的方式放大到原图大小,然后再用原图的数据和这个放大的结果进行联合双边滤波处理。
另外,引导滤波的对参数的要求和联合双边很类似,这个在后续的文章中我会具体讲述。
关于这个方面的文章,比较简单的就是这篇 http://research.microsoft.com/en-us/um/people/cohen/JBU_Final.pdf
想比如上述那些复杂的算法,联合双边滤波的快速算法的耗时几乎可以忽略不计,如果一个算法下采样的采样率为0.25,则算法那本身的速度理想状态下可能只为原始的1/16,加上最后的联合双边滤波的时间,可能提高10倍以上,而效果变化并不大。
我做了几个算法的测试,比如磨皮算法(下采样率0.25):
![](http://images.cnitblog.com/i/349293/201404/202140090258978.png)
![](http://images.cnitblog.com/i/349293/201404/202140230258567.png)
![](http://images.cnitblog.com/i/349293/201404/202140383853643.png)
![](http://images.cnitblog.com/i/349293/201404/202140577752085.png)
原图 下采样图 下采样处理图 最近邻插值后的图
![](http://images.cnitblog.com/i/349293/201404/202141096034304.png)
![](http://images.cnitblog.com/i/349293/201404/202141480259933.png)
联合双边滤波结果图 原图处理图
在那我在行的去雾算法来看下:
![](http://images.cnitblog.com/i/349293/201404/202148186667657.png)
![](http://images.cnitblog.com/i/349293/201404/202148513073020.png)
![](http://images.cnitblog.com/i/349293/201404/202149152445672.png)
![](http://images.cnitblog.com/i/349293/201404/202149217131797.png)
原图 下采样图 下采样处理图 最近邻插值后的图
![](http://images.cnitblog.com/i/349293/201404/202159472289630.png)
![](http://images.cnitblog.com/i/349293/201404/202200357137752.png)
联合双边滤波结果图 原图处理图
我这里举得例子不是很恰当,因为我这里还没有做特别复杂的和耗时的算法,但是这个过程表明这种方式处理和解决问题是完全可以的。
****************************作者: laviewpbt 时间: 2014.4.20 联系QQ: 1664462947 转载请保留本行信息********************
邮件地址: laviewpbt@sina.com
这十年来,在图像处理领域提出了很多新的图像分析和处理方法,包括是自动的以及一些需要有人工参与的,典型的比如stereo depth computations、image colorization、tone mapping of high dynamic range (HDR) images、 graph cuts ,这些算法都有着比较好的效果,但都普遍存在一个问题:就是计算量特别大,很难满足用户的需求。而数字图像在尺寸大小上的增长速度这段时间也相当惊人。还有个问题就是有些算法需要解一个很大的稀疏矩阵方程,可能会大到系统的无法为接其过程分配足够的内存。因此,如果解决这两个问题,一个直观而又简单的想法就是:先处理原图下采样的小图,然后将处理后的结果在上采样。
但是,如此处理存在的问题就是上采样算法会直接影响到处理效果。如果是纯粹的最近邻插值、或者是双线性,抑或是三次立方等复杂点插值算法,都会使人感到效果失真。但是在这种情况下的我们实际上比简单的图像放大时多了一个信息的,就是我有原始的未做处理的并且未缩小的图像的信息,是否能利用这个信息来增强上采样的效果呢?目前我看到了两种这方面的算法。
一种就是联合双边滤波,我们先简单的看看这个东西的数学公式吧:
![](http://images.cnitblog.com/i/349293/201404/202104267287328.png)
对上式做个简答的解释,其中I表示输入图像,p/q表示X/Y物理坐标,Ip表示对应位置的像素值,J表示输出, f/g是权重分布函数,一般为高斯函数。这种滤波的结果就是周边像素的权值不仅和距离有关还和那个位置的像素值有关,如果在值域的权重计算过程引入另外一幅图像,如下式,则称之为联合双边滤波。
![](http://images.cnitblog.com/i/349293/201404/202107372139002.png)
联合双边滤波上采样技术也很简单,一种便于理解的也便于写代码的方式就是把下采样并进行处理过后的小图按照最近邻插值的方式放大到原图大小,然后再用原图的数据和这个放大的结果进行联合双边滤波处理。
另外,引导滤波的对参数的要求和联合双边很类似,这个在后续的文章中我会具体讲述。
关于这个方面的文章,比较简单的就是这篇 http://research.microsoft.com/en-us/um/people/cohen/JBU_Final.pdf
想比如上述那些复杂的算法,联合双边滤波的快速算法的耗时几乎可以忽略不计,如果一个算法下采样的采样率为0.25,则算法那本身的速度理想状态下可能只为原始的1/16,加上最后的联合双边滤波的时间,可能提高10倍以上,而效果变化并不大。
我做了几个算法的测试,比如磨皮算法(下采样率0.25):
![](http://images.cnitblog.com/i/349293/201404/202140090258978.png)
![](http://images.cnitblog.com/i/349293/201404/202140230258567.png)
![](http://images.cnitblog.com/i/349293/201404/202140383853643.png)
![](http://images.cnitblog.com/i/349293/201404/202140577752085.png)
原图 下采样图 下采样处理图 最近邻插值后的图
![](http://images.cnitblog.com/i/349293/201404/202141096034304.png)
![](http://images.cnitblog.com/i/349293/201404/202141480259933.png)
联合双边滤波结果图 原图处理图
在那我在行的去雾算法来看下:
![](http://images.cnitblog.com/i/349293/201404/202148186667657.png)
![](http://images.cnitblog.com/i/349293/201404/202148513073020.png)
![](http://images.cnitblog.com/i/349293/201404/202149152445672.png)
![](http://images.cnitblog.com/i/349293/201404/202149217131797.png)
原图 下采样图 下采样处理图 最近邻插值后的图
![](http://images.cnitblog.com/i/349293/201404/202159472289630.png)
![](http://images.cnitblog.com/i/349293/201404/202200357137752.png)
联合双边滤波结果图 原图处理图
我这里举得例子不是很恰当,因为我这里还没有做特别复杂的和耗时的算法,但是这个过程表明这种方式处理和解决问题是完全可以的。
****************************作者: laviewpbt 时间: 2014.4.20 联系QQ: 1664462947 转载请保留本行信息********************
相关文章推荐
- 利用联合双边滤波或引导滤波进行升采样(Upsampling)技术提高一些耗时算法的速度。
- 升采样(Upsampling)技术
- 【算法】利用随机化算法对顺序表进行搜索【原创技术】
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍
- PHP利用memcache缓存技术提高响应速度
- 如何利用MapReduce的分治策略提高KNN算法的运行速度
- 如何对SharePoint网站进行预热(warmup)以提高响应速度
- 利用Java Swing技术设计一个鼠标点击速度比赛游戏程序。程序显示一个按钮和一个文本框,用户点击按钮,文本框显示鼠标点击次数。两个人同时运行本程序,即可进行比赛
- PHP利用memcache缓存技术提高响应速度
- 为什么一些机器学习模型需要对数据进行归一化?——1)归一化后加快了梯度下降求最优解的速度;2)归一化有可能提高精度
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍
- 如何对SharePoint网站进行预热(warmup)以提高响应速度
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍
- 无需进行滤波后处理,利用循环推断算法实现歌唱语音分离
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍
- AdaBoost中利用Haar特征进行人脸识别算法分析与总结
- 提高网页打开速度的一些小技巧
- 利用SQL索引提高查询速度