视频图像处理平台对比_13. GradientShop统一图像处理框架

419322b5c19886ada930fd8e045c13f5.png

本文同步发表在我的微信公众号“计算摄影学”,欢迎扫码关注

6a6ae165a8ad7df43d2d092c3a077cfc.png

【转载请注明来源和作者】

1. 背景:梯度域的图像处理

在这个专栏的前面几次文章里面,我给大家介绍了空域的图像处理,还介绍了频域的图像处理。我们可以看到在空域中有时不好解决的问题,或者解决起来比较慢的问题,转换到一个新的表达方式,或者说变换域,即”频域“的时候,有可能解决的比较好。那么有没有除了频域之外的新的变换域呢?答案是肯定的,我们上一篇文章中提到的泊松图像编辑编辑,尤其是其中的泊松融合,就是一个在“梯度域”上进行图像处理的典型方法。回顾一下其中的关键思想,可以用下图中的“引导插值”来描述:

ee041675ad44cdc162a157edea14a358.png

这里v是一个引导场,它可以是一个原始图像g的梯度场,即Δg.

其实这一类在梯度域进行图像处理的方法还有很多,在ICCV 2007时有专门的course来介绍梯度域的图像处理,大家可以参考这里看到更多的信息:http://www.cs.cmu.edu/~ILIM/projects/IM/aagrawal/ICCV2007Course/index.html。

它的基本依据是:人类的视觉系统(Human Vision System, HVS)对图像中像素值的变化(即梯度)更加敏感,而对像素值的绝对值不敏感。下面这个影片形象的说明了这个观点:

视频由我通过GradientShop作者的演示PPT剪辑而成,原地址: http:// grail.cs.washington.edu /projects/gradientshop/demos/gs_talk.ppt ,以下同
55e7caec9bb313ecab5d7e9245316eef.png
人眼对像素值的变化更敏感https://www.zhihu.com/video/1090030944555028480

既然对于人类的视觉系统来说梯度比绝对值更重要,那么一定就有可能通过操作图像的梯度来对图像进行处理和变换。事实上我在上面列出的链接里面就提到了非常多的在梯度域进行图像处理的方法和应用场景,包括但不限于:

  • 图像的分解和场景的分析
  • 图像编辑
  • 图像融合和增强
  • 视频合成
  • 高动态范围成像
  • 梯度域的重建和插值
  • 纹理处理

我们来看一个简单的直观的例子,来说明改变图像的梯度如何就可以对图像进行处理,甚至可以改变图像中的一些高层特征

视频由我通过GradientShop作者的演示PPT剪辑而成,原地址: http:// grail.cs.washington.edu /projects/gradientshop/demos/gs_talk.ppt ,以下同
95a9e18fc5ea02d395407f622d761c4c.png
改变梯度可以改变图像的高层特征https://www.zhihu.com/video/1090032147196071936

事实上,改变梯度不仅仅如我提到的例子一般可以改变图像的对比度。梯度对应着图像中丰富的信息,包括:

  • 图像边缘(物体边界、深度跳变、阴暗变化)

0a61c17138d20eb55cf4f0483c898ac3.png
  • 纹理(视觉感知的丰富感,表面属性)

40e22565bc454d58cd271e377b78a91e.png
  • 阴暗(物体表面光照、表面形状)

7030545a4b26287f43924b2f873ce699.png

510bc94b0ac423f6384ed6cf728af05d.png
  • 图像的噪声

cbec4b338aad85684320ac77db844b41.png
  • 图像压缩导致的质量缺陷

5ae09b7189e42318ebf168bc7a069f0b.png

562035cd172126a787b8d1f4aa670ef9.png

以上示例都说明了改变图像的梯度确实可以对图像进行处理和操作,这也是为什么我之前给出的ICCV Course链接里面有那么多丰富多彩的研究成果。下图很好的总结了什么是梯度域的图像处理:

4ff70d5d943890ed3abc87f5ec099624.png

2. GradientShop

2.1 基本展示

梯度域的图像处理成果一直没有形成一个统一的简洁的框架,各种各样的方法也散布在很多论文里面,有一些方法的实现也非常复杂,而且还具有明显的局限性。直到本文所述的叫做GradientShop框架的出现。

GradientShop的原始信息出自:http:// http://grail.cs.washington.edu/projects/gradientshop/,我会将这篇论文及相关演讲PPT中的精要部分展示给大家。

简而言之,GradientShop框架的目标是:

  • 利用空域信息和梯度域信息来处理图像或视频
  • 统一的框架
  • 支持多种应用
  • 实现方法简单

让我们通过一个简单的视频来看看这个统一框架到底能做什么,这是作者在SIGGRAPH上的宣讲视频:

视频来自GradientShop作者在SIGRAPH2010的演讲资料: http:// grail.cs.washington.edu /projects/gradientshop/demos/gs_talk.zip
155a64569feead817126f5326925ab18.png
GradientShop 基本思想https://www.zhihu.com/video/1090034708938792960

可以看到这个框架确实有很多精彩的应用,而且按照作者的说法这些应用只是“抛砖引玉”,读者应该还可以基于这个统一框架实现更多丰富多彩的应用。

这里还有一个作者放出的精彩说明,GradientShop可以很容易做出艺术感的非真实渲染效果。

视频剪辑自GradientShop作者在SIGRAPH2010的演讲资料: http:// grail.cs.washington.edu /projects/gradientshop/demos/gs_talk.zip
d01976428ab13939350344cf6c763b62.png
GradientShop 非真实感渲染https://www.zhihu.com/video/1090035003668238336

现在我们来看看这个方法的基本原理。

2.2 基本原理

让我先用一句大白话总结GradientShop的思想:“图像处理就是使得目标图像的梯度和像素值都逼近用户指定的梯度和像素值的过程”。

这里我们先做一些符号上的定义:

  • u - 待处理的图像
  • f - 处理后的图像
  • d - 目标图像f的像素值的约束图,即f应该逼近d
  • g - 目标图像f的梯度值的约束图,这是一个双通道的图像,f的梯度图应该尽可能接近g
  • w - 像素值和梯度值的约束权重,具体见下面说明

作者还定义了一个函数F(u, …) -> [d,g,w],它的输入是待处理图像,以及其它一些必要的跟具体应用相关的参数,例如用户标记的区域,图像中的显著性特征等等,而它的输出则是d, g, 以及w

3c41e36f26b7f5d947e9dfa77cbf75b8.png

有了上述定义,那么对图像的处理就变成了一个优化如下能量函数的过程(公式摘于原论文,以下同)

74d75dc4e4ae110fd361f9846e0ed532.png

这里:

  • E(f)是最终的能量函数
  • Ed(p)是f上点p的值与目标像素值d(p)的误差
  • Eg(p)是f上点p的梯度与目标梯度值g(p)的误差

a8fa08886072d0e169493bb130cf2f0a.png

59a2f24e8765be120d86676e47f8176b.png

fx和fy是目标图像f在x和y方向上的梯度值,相应的,gx和gy则是期望的梯度值。而wd, wx, wy则是每个子部分的权重,它们说明了梯度约束和像素值约束对最终图像的影响。这里有个小视屏可以说明这些知识:

视频由我通过GradientShop作者的演示PPT剪辑而成,原地址: http:// grail.cs.washington.edu /projects/gradientshop/demos/gs_talk.ppt ,以下同
213831737548f5cae64bd65629142477.png
GradientShop基本原理https://www.zhihu.com/video/1090036569553018880

由于Ed和Eg都是二次项,因此整个能量方程可以用一些标准的带权的最小二乘法来求解,例如1994年Shewchuk等提出的共轭梯度法,这在很多软件库中都有实现。

上述公式虽然非常简单,但我明白对一些读者来说还是显得太抽象。因此我在下一节给大家用一些例子来说明,相信能让各位很快理解此框架的精髓。

2.3 各种示例应用

2.3.1 智能锐化

先以一个最简单的例子“图像锐化”来举例,为了进行基本的图像锐化,只需要这样设置:

1243f4cb3941530c22d1499b29399ea0.png

我们来看看上面式子的直观解释:

1) 将d设置为等于源图像u,这使得输出图像不会偏差源图像u太远

2) 将

设置为源图像的梯度乘以一个大于1的常量
, 可以提升像素间的变化,正如我在文章一开篇给大家看的黑白边缘例子一样

3)

控制着像素值约束的权重,可以任意调整。

4)

设置为1,意味着每个像素的梯度约束都是一致的
视频由我通过GradientShop作者的演示PPT剪辑而成,原地址: http:// grail.cs.washington.edu /projects/gradientshop/demos/gs_talk.ppt ,以下同
2a0f49b8082245ce756d1994c577f382.png
GradientShop 普通锐化https://www.zhihu.com/video/1090037404047314944

GradientShop的作者还提出了一种“智能锐化”算法,这个算法的其他部分跟上述普通算法一致,所不同之处在于只对原图像中的“显著性”区域进行梯度的增强, 其中

说明了图像的显著区域的梯度的增益,而e则表征显著性区域。

414c8a74319affafad04dab8153a37e2.png

我们先看看效果,再来说说显著性区域

52fc14d9ed7fb6a20cef61cd5d9e8c97.png
GradientShop 智能锐化https://www.zhihu.com/video/1090038215729213440

很显然,这种智能锐化不会在锐化图像的过程中导致普通锐化的一些缺陷,例如放大了噪声,或带来图像中的间断。而这就是构建在了显著性区域检测上。

什么是显著区域呢?事实上这超出了本文的讨论范畴,有很多人都提出了对图像中的显著性特征的检测。比如经典的利用梯度的幅值的方法,以及GradientShop作者提出的对图像里长的连贯的边缘的检测的方法。下面这个图示说明作者所用的显著特征检测与传统的利用梯度检测的方法的比较,很明显作者所用方法检测到的是连贯的长边缘,对人眼来说更加显著。使用了显著特征检测,将使得不同的像素点具备不同的目标梯度g,因此结果也是不同的,

4a7d484e572ea105e01e52e46311c780.png

2.3.2 非真实渲染

我们来看另外一个例子:非真实渲染滤波器, 这里我们首先检测图像的显著性边缘。然后平滑非显著区域,同时增强显著区域,使得画面看起来像是画家对显著边缘用黑色画笔画浓了一般。

视频素材来自GradientShop作者在SIGRAPH2010的演讲资料: http:// grail.cs.washington.edu /projects/gradientshop/demos/gs_talk.zip
ef74b18f0748bbea5ed2ee642877ae3f.png
GradientShop 非真实感渲染https://www.zhihu.com/video/1090043361720807424

作者在论文里对GradientShop方法得到的图与传统的另外两种方法做了对比。传统方法没有用像素值作为约束,所以它需要做非常复杂的后处理,而且效果也不够美观。而GradientShop则可以很好的保留图像的边缘特征、景深特征等。

639df84ce541bed63a204dcaef5443d1.png

这里所使用的各项公式为:

f6dfeaad4cb518bfb26f589cac44320d.png

2.3.4 模拟光照

当用户设定光照的方向o时,可以很容易模拟出各种打光的效果.

f5a6878beef5f82a2cf290dc26f8e9e7.png
GradientShop 光照https://www.zhihu.com/video/1090041216250425344

论文中的公式如下:

8d0c60fc71de96b896391dedfa18d86d.png

2.3.5 灰度图上色

仅仅利用用户给出的稀疏的信息进行图像的插值是一个很热门的领域,其中有很多有趣的应用例如给灰度图上色。 下面这个视频展示了如何利用GradientShop框架做到这一点:

视频由我通过GradientShop作者的演示PPT剪辑而成,原地址: http:// grail.cs.washington.edu /projects/gradientshop/demos/gs_talk.ppt ,以下同
3b33d7edad6360ddc5a1611b923a3c08.png
GradientShop 上色https://www.zhihu.com/video/1090043361943031808

3. 总结

正如前面所说,GradientShop是一个简单的统一框架,它可以利用空域信息和梯度域信息来处理图像或视频,而且支持非常多的应用方向。我今天给大家展示的只是其中一小部分。如果各位感兴趣,可以到我参考资料所附的网址去查看更多信息或参考原论文。

如果你实际开发过工程项目就会明白一个统一框架对产品的扩展、维护有多么大的好处,我希望这篇文章激起了你的兴趣。我也鼓励大家去学习作者提供的C++源代码,我也会按惯例在后续放上我整理好的Python Notebook,供大家参考。

参考资料

这一篇文章的绝大部分素材来自于如下链接,我重点参考了原始论文,以及作者的SIGGRAPH2010演示材料

  1. Gradient-Domain Image and Video Processing
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值