今天跟大家介绍一款动漫画面放大算法Anime4K,目前最热的开源、实时、视频动漫放大算法。
https://github.com/bloc97/Anime4K
一周内该库在Github上收获2600+星,作者6天前在reddit上推介了该项目,也成为了大家的热门话题,引起极大关注!
为什么呢?
在这个“言必称深度、学必讲统计”的AI时代,Anime4K完全没有使用深度学习、统计方法,而且速度非常快!
下图展示了使用Anime4K将动漫画面从1080p提升到2160p的效果:
时间仅需要3ms。(计算硬件Vega 64 GPU)
下图为与其他相同功能开源库的比较:
Anime4K在视觉效果最好的情况下,速度则是完胜!
作者称Anime4K 非常适合动漫放大任务,速度极快、能够保持视频内容连贯、实现只需约100行代码、效果也异常的好。
Anime4K 不使用任何机器学习或统计方法,非常适合于要保持清晰边缘和线段,而能够容忍丢失一些精细纹理的情况。 它是一种迭代算法,将颜色信息视为高度图并使用渐变上升将像素“推”到可能的边缘。
作者认为这很可能是基于学习的方法内部已经在做的(例如VDSR,waifu2x)。
算法原理
Anime4K 仅适用于动漫图像放大,因动漫往往没有丰富的纹理,而人眼对其边缘和线段更加敏感。
图像超分辨率的一般流程:
LR_U为上采样后的低分辨率图像,r为高频残差,高分辨率图像HR = LR_U + r。
以往大部分算法都是在预测r。
作者发现这样一个事实,对于锐利图像其残差图像中边缘和线段往往比较细,而对于模糊图像,其残差图像中边缘和线段往往比较粗。
算法的主要目标是不断修改LR_U(低分辨率采样得到的模糊图像),直到其残差变得最细,给我们一个尽可能锐利的HR图像。
输入LR_U及其初始残差r,“推”(push)残差的像素,使残差图中线段边缘变得更细。对于作用于残差图中执行的每个“推”操作,在彩色图像上执行相同操作。 这具有迭代地使图像梯度最大化的效果,其在数学上等同于最小化模糊,但这种方法没有在传统方法中常见的振铃等伪像。
伪代码描述就下面几行:
for each pixel on the image:
for each direction (north, northeast, east, etc.):
using the residual, if an edge is found:
push the residual pixel in the current direction
push the color pixel in the current direction
原理细节详见:
https://github.com/bloc97/Anime4K/blob/master/Preprint.md#proposed-method
更多放大结果:
无论在哪种设置下,Anime4K都取得了更佳的视觉效果。
开源地址:
https://github.com/bloc97/Anime4K