版权声明:禁止转载。(更新时间:2020-07-13)

接上一篇,继续研究LazyBrush论文 。(系列笔记首页链接)


目录

6.2 Smoothness term(平滑项)

6.2.1 总体思想

6.2.2 细节问题处理

6.3 Data term(数据项)

6.3.1 定义公式

6.3.2 λ范围推导


6.2 Smoothness term(平滑项)

6.2.1 总体思想

能量函数中Smoothness term的主要目标为:尽量减少“单色区域”的不连续性(color discontinuity),使得一个连续的“单色区域”不会因为一些干扰性因素(如:力度较轻的修饰性线条、狭窄的缝隙)而在中间断开为多个非连续的区域。(注:“单色区域”指上色结果中,由同种颜色构成的一个连续区域)

可视化示例:线稿中颜色较暗的边缘线,就是灰度强度值较低的像素
(图片来自Algorithmia [ref-1])

首先考虑用于手绘线稿的上色算法(暂不考虑素描)。根据绘画经验可总结出一个规律:线稿中颜色较暗的边缘线(即:灰度强度值较低的像素),最适合作为不同颜色的“单色区域”的分界线。(即:让单色区域尽量只在有边缘线的地方断开,以符合算法需求中的Connected labelling特性)。由此可得出Smoothness term定义公式

该式的含义为:当相邻像素p和q颜色相同时(即:p和q位于同一单色区域内),像素p的灰度强度值不会计入 中;当p和q的颜色不同时(像素p和q位于单色区域的分界线上),p的灰度强度值 会被计入 中。由于整幅线稿中,颜色偏黑(灰度强度值较低)的边缘线占所有像素的比例很低,而颜色偏白(灰度值较高)的像素占大多数。因此,在最小化 时,算法将倾向于把偏黑的边缘线作为不同单色区域的分界线,而把其他颜色偏白的像素作为连续的单色区域,以降低 的能量值。

Smoothness term的总体思想如上面所述,但 的定义式子仍然还存在一些问题。

6.2.2 细节问题处理

问题1对于最黑的边缘线,其灰度强度值 。对于边缘线附近的像素,虽然 ,但 的取值为0,与  情况下的取值相同。这会导致最小化能量函数的过程中,出现最黑的边缘线被忽略的问题。要解决这一问题,需要对灰度强度值的区间范围进行重新映射,将最低灰度强度值由0映射为1(后面进行具体说明)。

问题2如下图所示,在最小化Smoothness term的过程中,当线稿中包含较长的轮廓线时,会出现长轮廓线被忽略,而把距离较短的白色像素作为单色区域分界线的问题(即:单色区域分界线不严格按照边缘走,走了捷径。)在此情况下,虽然着色结果是错误的,但其 的能量值却更低。

为了解决这一问题,需加大对错误着色行为的惩罚力度。具体而言:当白色像素被作为单色区域分界线时,要增大其代价(能量值),使得:即使线稿中的边缘线很长,算法也首选将边缘线作为分界线;实在找不到封闭的边缘线的情况下,才考虑将白色像素作为单色区域分界线。理论上,应将白色像素的灰度强度值(能量值)设为比整幅线稿中最长边缘线的能量更高。在此情况下,即使狭窄处(如上图(a)中的箭头所示)存在仅一个像素的白色缝隙,算法也会优先把长边缘线作为单色区域分界线。

由于单个黑色像素的灰度强度值被映射为1,所以最长边缘线的能量值等于其周长(即:最长边缘线的像素个数)。因此,理论上需要找出线稿中最长边缘线,并计算其周长。但在实现算法时,为了简化实现,使用整幅线稿的周长作为最长边缘线长度的近似估计值。

为了解决问题1和问题2,需将线稿中所有像素的灰度强度值由[0,1]区间映射至[1,K]区间。其中K为整幅线稿的周长,K=2*(w+h),w、h分别是线稿的宽和高。对于手绘线稿而言,由于其中的所有像素灰度值要么接近于纯黑色,要么接近于纯白色(灰色像素较少),因此,使用线性映射来完成区间映射,即:

问题3对于铅笔素描和使用不同灰度进行着色的黑白漫画,由于其同质区域与边缘线的对比度较低,所以仍然会出现不严格遵循边缘线,把白色像素当作单色区域分界线的问题。

对于此问题,共有两种解决方法:

第1种解决方法为:使用一些非线性映射来增强对比度,例如:

第2种解决方法为:使用用于黑白漫画的“边缘检测”算法。具体算法为:首先使用Laplacian of Gaussian (L◦G) filter对输入图像进行滤波。然后将图像的灰度值设为 。在该式中:max函数用于将L◦G的负响应值全部设为0,缩放因子s将L◦G的正响应值映射到[0,1]区间内。最后,再将 的值线性映射到[1,K]区间。

经过滤波处理的效果对比如下图所示,该算法能增强边缘线的对比度,并将同质区域转换为接近白色。

左边:铅笔素描原图,右边:经过滤波及变换处理的图像

6.3 Data term(数据项)

6.3.1 定义公式

在漫画上色或交互式图像分割算法中,Data term常设为纹理或灰度值的相似度,使得与用户颜色提示所在区域具有相似纹理的区域,都涂上相同的颜色。这是基于一种假设:颜色与特定的纹理(或灰度值)具有一一对应关系。然而,问题在于:手绘线稿中,往往不存在纹理,也不会使用不同的灰度值对不同区域进行上色;即使存在,往往二者与颜色也没有一一对应关系。

对比:“柔性的颜色提示”与“刚性的颜色提示”

为了解决这一问题,本文算法的Data term不考虑线稿的纹理/灰度值相似度信息,而只考虑用户添加的颜色提示信息。本文算法Data term的目标,是为了实现算法需求中的“柔性颜色提示”(Soft scribble。“柔性(Soft)颜色提示”指部分用户颜色提示可被忽略,而“刚性(Hard)颜色提示”指用户添加的每个颜色提示都必须被填充到线稿上。

Data term的定义公式如下:

其中: ,K为Smoothness term中定义的白色像素经过映射后的灰度强度值(使用线稿的周长作为估计值)。

关于λ值。λ值表示像素p上是否存在用户添加的scribble,及其“属性”(是柔性的颜色提示,还是刚性的颜色提示)。λ=1表示像素p上不存在scribble。λ=0表示像素p上存在刚性(Hard)的颜色提示。而对于柔性(Soft)的颜色提示,其λ值应满足下面的不等式:(后面对此式进行具体解释)

其中: 为scribble的面积(即:构成scribble的像素总数), 为scribble的周长(即:scribble的边缘线上的像素个数)。

从该不等式,可推导出 。理论上,需为每个scribble逐一计算 。但实际实现算法时,由于大多数scribble的 ,所以把λ设为0.95。

另外,论文也证明了:定义的Data term能够满足柔性颜色提示的“rule of majority”原则。

6.3.2 λ范围推导

问题:如何理解用于推导出λ范围的不等式(较难理解)

当颜色提示是“柔性的”(soft)时,若某个scribble由于面积较小,竞争不过同区域内其他面积更大的scribble,会导致该scribble区域未按照提示的颜色进行着色,着色结果如下图中(a)情况所示。

当颜色提示是“刚性的”(hard)时,即:用户添加的每一个颜色提示必须被服从,则大致着色结果如下图中(b)情况所示。

由于本文设计算法要求颜色提示是“柔性的”。( (a)的着色结果是正确的;而(b)的着色结果不符合柔性颜色提示的要求,是错误的。)因此,当着色完成时,对于scribble区域(图中蓝色虚线区域内)的能量值,(a)应低于(b)。(使得最小化能量函数后,着色结果是(a)而不是(b)。)

示意图:柔性颜色提示 与 着色结果

使用能量公式描述(a)和(b)的蓝色虚线区域内的能量值,如下式所示:

展开为E = Smoothness term + Data term的形式:

各项解释:

1. 关于情形(b)的“Smoothness term”:由于scribble的边缘就是颜色分界线,所以 的像素个数等于scribble的周长 。线稿中scribble所在区域均为白色像素,其灰度强度值 。故

2. 关于情形(b)的“Data term”:由于scribble区域的像素个数等于其面积 。由于添加的颜色提示是柔性的,所以 (虽然着色结果未遵循柔性颜色提示的要求)。所以

3. 关于情形(a)的“Smoothness term”:由于没有颜色分界线,所以,所有的像素均满足 ,故

4. 关于情形(a)的“Data term”:这一项是理解的难点!

data term为 ,即:在这一项中取λ=1,代表虚线内部不存在用户添加的颜色提示。从表面上看,这与之前用户在该区域内添加了颜色提示是矛盾的,但实际没有矛盾。因为,在情形(a)中,圆形scribble所在区域未按其提示颜色被着色,是因为存在另一个面积更大的三角形颜色提示,圆形scribble在竞争中失败了。因此:用户刚添加颜色提示(能量函数尚未最小化)时,λ=0.95;当能量函数达到最小值时,由于圆形scribble在竞争中失败了,所以圆形虚线区域算作未添加任何颜色提示,取λ=1。所以,要注意到:计算能量函数达到最低状态下的 时,对于竞争失败的scribble,其所在区域会被当作未添加过颜色提示!


下一篇:

LazyBrush论文解读(5):模型求解  --  链接

LazyBrush论文笔记(4):问题建模-平滑项与数据项相关推荐

  1. 【论文笔记】李盟, et al. 一种恶意代码特征选取和建模方法. 计算机应用与软件 08(2015):272-277.

    前言 论文笔记. 论文笔记 出处及年份 <计算机应用与软件 Computer Applications and SoftwareVol.>第32卷第8期2015年8月 论文标题 一种恶意代 ...

  2. 光流 速度_[论文笔记] FlowNet 光流估计

    [论文笔记] FlowNet: Learning Optical Flow with Convolutional Networks 说在前面 个人心得: 1. CNN的光流估计主要是速度上快,之后的v ...

  3. 图像内复制粘贴篡改取证matlab_[论文笔记] 篡改检测:RGB-N

    [论文笔记] Learning Rich Features for Image Manipulation Detection 说在前面 个人心得: 第一次关注篡改检测,最常见的篡改方式是拼接.复制移动 ...

  4. 神经稀疏体素场论文笔记

    论文地址:https://proceedings.neurips.cc/paper/2020/file/b4b758962f17808746e9bb832a6fa4b8-Paper.pdf Githu ...

  5. 论文笔记目录(ver2.0)

    1 时间序列 1.1 时间序列预测 论文名称 来源 主要内容 论文笔记:DCRNN (Diffusion Convolutional Recurrent Neural Network: Data-Dr ...

  6. 论文笔记(十六):Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning

    Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning 文章概括 摘要 1 介绍 2 大规模并 ...

  7. 论文笔记(三):PoseCNN: A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes

    PoseCNN: A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes 文章概括 摘要 1. ...

  8. VDO-SLAM: A Visual Dynamic Object-aware SLAM System论文笔记

    VDO-SLAM: A Visual Dynamic Object-aware SLAM System论文笔记 原文:https://arxiv.org/pdf/2005.11052.pdf 代码:h ...

  9. 【论文笔记】3D LiDAR-Based Global Localization Using Siamese Neural Network

    [论文笔记]3D LiDAR-Based Global Localization Using Siamese Neural Network ~~~   ~~~~     在本文基于从神经网络中学习到的 ...

最新文章

  1. 《C和指针》一1.7 问题
  2. 浅析 Linux 初始化 init 系统:sysvinit
  3. cstring判断是否包含子串_leetcode76. 最小覆盖子串
  4. clone oracle ebs
  5. 第五章:Redis持久化-AOF持久化
  6. thinkphp--多个id查询
  7. 远程调试Hadoop
  8. 前端笔记 | CSS定位
  9. win32截屏并rgb24转yuv420
  10. discuz mysql配置文件_MySQL优化配置文件my.ini(discuz论坛)
  11. Yii GridView
  12. java多线程-基础知识
  13. cydia加载未能连接服务器请求超时,win7专业版中cydia无法加载请求超时解决方案...
  14. Linux零基础入门系列培训
  15. 英语测试用什么软件有哪些,学习英语的软件哪个好 什么比较好用
  16. Flask的Jinjia2模板
  17. TPC TiKV:Hackathon 中最硬核项目是如何炼成的?| TPC 战队访谈
  18. 保弘实业|不同年龄段的人都应该如何理财呢?
  19. win10下的edge如何打开ie的兼容性视图?
  20. 请等待您的伙伴确认该请求_您想成为产品负责人吗?您最好知道等待什么

热门文章

  1. 分享一个吐血三升的GNS3 ASAv9.X直连ping不通的原因
  2. 产品狗的Python之路(2):excel表格拆分桌面小程序
  3. 力争群雄:2012年度IT博客大赛100强脱颖而出
  4. 贴吧顶帖工作室(贴吧怎么顶帖)
  5. 解决‘WebDriver‘ object has no attribute ‘find_element_by_xpath‘问题
  6. Eclipse中更改tomcat版本
  7. 为什么Axios中获取不到Content-Type
  8. 赤壁之战(dp树状数组)
  9. 【案例1】图书馆管理系统毕业论文
  10. 十进制、八进制和十六进制,各种进制存在的意义,为什么要设计出来?