Screentone Removal 理解
理解论文《Separation of Manga Line Drawings and Screentones》中的算法。
Screentone removal mask
计算 LoG 过滤后的值
论文中采用高斯拉普拉斯滤波(Laplacian of Gaussian Filter)来作为去除网点的 Mask,这是由于 LoG 过滤器有以下特点:
- 过滤之后,线条处值比较大,其他地方值比较小
- 过滤之后值为负数的像素不太可能是线条
处理过滤后图像
- 将过滤后图像中的负数置零
二值化过滤后的图像
所谓二值化就是按照一个门槛值,把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值。需要注意的是,二值化只能在灰度图片中进行。
论文中使用大津法产生自适应阈值。
自适应选取窗口值算法
使用 LoG 需要接受窗口值来作为参数,LoG 也是基于高斯函数,即正态分布函数,正态分布函数需要接受 σ 作为参数。函数的标准差 σ 越大,函数越平缓(分布较为分散),σ 越小函数越尖(分布更集中)。
而窗口大小,也就是卷积核的长宽可以通过正态分布的特点来确定,因为太远的地方函数的数值可以忽略不计。二者相互换算的公式可以看这篇博客,具体公式如下:
\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)
公式如下:
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}$
来处理这种情况,让结果的线条更细。
以上公式为:
i_{LoG} += 4
i_{base} = min(\frac{i}{2}, i_{LoG})
M_{rm} = M_{LoG_i} \wedge M_{LoG_{i_{base}}}
运行结果如下: