Screentone Removal 理解

理解论文《Separation of Manga Line Drawings and Screentones》中的算法。

Screentone removal mask

计算 LoG 过滤后的值

论文中采用高斯拉普拉斯滤波(Laplacian of Gaussian Filter)来作为去除网点的 Mask,这是由于 LoG 过滤器有以下特点:

  • 过滤之后,线条处值比较大,其他地方值比较小
  • 过滤之后值为负数的像素不太可能是线条

处理过滤后图像

  • 将过滤后图像中的负数置零

二值化过滤后的图像

所谓二值化就是按照一个门槛值,把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值。需要注意的是,二值化只能在灰度图片中进行。

论文中使用大津法产生自适应阈值。

自适应选取窗口值算法

使用 LoG 需要接受窗口值来作为参数,LoG 也是基于高斯函数,即正态分布函数,正态分布函数需要接受 σ 作为参数。函数的标准差 σ 越大,函数越平缓(分布较为分散),σ 越小函数越尖(分布更集中)。

而窗口大小,也就是卷积核的长宽可以通过正态分布的特点来确定,因为太远的地方函数的数值可以忽略不计。二者相互换算的公式可以看这篇博客,具体公式如下:

1
\sigma = 0.3 \times ((ksize - 1) \times 0.5 - 1) + 0.8

该算法则是为了自适应地选取窗口大小来计算 LoG 的值。

评判标准与一些指标

  • 连通域标准(Connected Component Criteria,CCC)
  • 停止标准(Stop Criteria, STC)
  • 连通分量数(Number of Connected Component, NCC)

公式如下:

1
2
3
CCC_i = 1 - \frac{NCC(M_{LoG_i})}{NCC(M_{LoG_{i - 2}})}

STC_i = \frac{NCC(M_{LoG_i})}{NCC(M_{LoG_1})} \times |NCC(M_{LoG_i}) - NCC(M_{LoG_{i - 2}})|

其中 $CCC_i$ 显示随着 i 的增加连通域的下降,当其取得最大值的时候表示此时网点去除效果最好。论文中指出,当有多个峰值的时候,更大的 i 会有更好的结果,因此设置参数 β = 0.8 来获得更大的 i 值,称为松弛因子。

$STC_i$ 表示停止的条件,如果数值小于门槛值(一般设为 α = 0.8)就会停止。它用来显示当前 i 的连通区域的数量变化情况。

算法思想

通过迭代,在 STC 大于门槛的情况下,取得最大的 CCC。

在得到最好的 i 值之后,论文中指出,实际情况当 i 比计算出来的值大一些时能取到更好的效果。

而当有黑色网点,且 i 过大时,线条会太粗,于是引入 $i_{base}$ 来处理这种情况,让结果的线条更细。

以上公式为:

1
2
3
4
5
i_{LoG} += 4

i_{base} = min(\frac{i}{2}, i_{LoG})

M_{rm} = M_{LoG_i} \wedge M_{LoG_{i_{base}}}

运行结果如下:

result

Line preserving mask

Mask merging for refining line extraction