本文档指导您如何定义自己的缩放模式。
Magpie启动时会在所在目录搜索ScaleModels.json,如果未找到则会创建一个默认的。默认的ScaleModels.json内容如下:
[
{
"name": "Lanczos",
"model": [
{
"module": "Common",
"effect": "lanczos",
"scale": [ -1, -1 ],
"ARStrength": 0.7
},
{
"module": "Common",
"effect": "adaptiveSharpen",
"curveHeight": 0.6
}
]
},
{
"name": "RAVU",
"model": [
{
"module": "RAVU",
"effect": "RAVUZoom",
"scale": [ -1, -1 ]
},
{
"module": "Anime4K",
"effect": "denoiseBilateral",
"variant": "mode"
}
]
},
{
"...": "..."
}
]
ScaleModels.json的根元素是一个数组,其中的每个成员都是一个缩放模型。name属性是显示的名字,model属性是缩放模型的定义,缩放模型由一系列的effect堆叠而成,Magpie在缩放时会逐个应用这些effect。
Magpie提供了大量effect供组合使用,它们以模块为单位在运行时动态加载。大部分effect提供了参数选项以订制行为。
很多缩放效果支持scale参数,它的值必须是有两个元素的数组。当它们为正数时,表示长和高的缩放比例;为负数时则表示相对于屏幕能容纳的最大等比缩放的比例。例如值[-1, -1]表示等比缩放到屏幕能容纳的最大大小,[-0.5, -0.5]表示缩放到[-1, -1]的一半大小。在示例中可以看到它们的应用。
Common模块包含以下效果:
- sharpen:使用Direct2D内置的锐化算法锐化输入。
- 参数
- sharpness:锐化强度。必须在0~10之间。默认值为0。
- threshold:锐化阈值。必须在0~1之间。默认值为0。
- 参数
- adaptiveSharpen:自适应锐化算法。此算法着重于锐化图像中的模糊边缘,因此相比一般的锐化算法噪点、振铃和条纹更少。
- 参数
- curveHeight:锐化强度。必须大于零,一般在0.3~2.0之间。默认值为0.3。
- 参数
- CAS:对比度自适应锐化算法。自适应锐化青春版。
- 参数
- sharpness:锐化强度。必须在0-1之间。默认值为0.4。
- 参数
- lanczos:使用Lanczos算法缩放输入。
- 参数
- scale:缩放比例,值必须是有两个元素的数组。
- ARStrength:抗震铃强度。值越大抗震铃效果越好,但图像越模糊。必须在0到1之间。默认值为0.5。
- 参数
- mitchell:使用Mitchell-Netravali算法缩放输入。用于缩小时效果最佳。
- 参数
- scale:缩放比例,值必须是有两个元素的数组。
- variant:指定使用的变体:
- "mitchell":mitchell原版。默认值。
- "catrom":比mitchell更锐利。
- "sharper":更为锐利,可能有更好的视觉效果。Photoshop使用此参数。
- 参数
- pixel:将图像中每个像素进行整数倍放大。可以完整保留原始图像的信息,但只能放大到整数倍。适用于输入图像较小的情况。
- 参数
- scale:缩放比例,和其他缩放算法不同,此值必须是正整数,因为图像尺寸只能等比例整数倍放大。默认值为1。
- 参数
ACNet模块仅包含一个效果,使用时无需指定effect名。ACNet固定的将输入放大至两倍。
Anime4K模块包含以下效果:
- Anime4K:Anime4K v3.1 的移植,支持降噪变体。内置了自适应锐化,可以产生更好的视觉效果。固定的将输入放大至两倍。
- 参数
- curveHeight:自适应锐化强度。0表示不锐化,否则必须为正数,一般在0.3~2.0之间。默认值为0。
- useDenoiseVersion:使用降噪版本的Anime4K,在有轻微噪点的情况下表现良好,因此推荐使用。默认值为false。
- 参数
- darkLines:Anime4K提供的加深线条的算法。
- 参数
- strength:加深强度。必须大于零。默认值为1。
- 参数
- thinLines:Anime4K提供的细化线条的算法。
- 参数
- strength:细化强度。必须大于零。默认值为0.3。
- 参数
- denoiseBilateral:Anime4K提供的降噪算法。
- 参数
- variant:指定使用的变体
- "mode":bilateral mode filter。默认值。
- "median":bilateral median filter。
- "mean":bilateral mean filter。
- intensity:降噪强度。必须大于零。默认值为0.1。
- variant:指定使用的变体
- 参数
FARCNNX模块包含以下效果:
- FSRCNNX:FSRCNNX_x2_8-0-4-1的移植。固定的将输入放大至两倍。
- FSRCNNXLineArt:FSRCNNX_x2_8-0-4-1_LineArt的移植。固定的将输入放大至两倍。
RAVU模块包含以下效果:
- RAVULite:ravu-lite-r3的移植。固定的将输入放大至两倍。
- RAVUZoom:ravu-zoom-r3的移植。支持任意倍数的缩放。
- 参数
- scale:缩放比例,值必须是有两个元素的数组。
- 参数
SSIM模块包含以下效果:
-
SSimDownscaler:基于感知的图像缩小算法,比catrom更锐利。此效果依赖于Common模块。
- 参数
- scale:缩放比例,值必须是有两个元素的数组。
- 参数
-
SSimSuperRes:基于感知的图像放大算法,可对嵌套的缩放算法进行增强。
-
参数
- upScaleEffect:嵌套的缩放效果。它的缩放倍率决定了SSimSuperRes的缩放倍率。
-
示例
以下片段演示了SSimSuperRes对Lanczos算法的增强。
{ "module": "SSIM", "effect": "SSimSuperRes", "upScaleEffect": { "module": "Common", "effect": "lanczos", "scale": [-1, -1] } }
-
如果屏幕大小是源窗口的2-4倍,可以应用两次Anime4K,下面的片段演示了这个算法。
{
"name": "动漫 4x",
"model": [
{
"module": "Anime4K",
"effect": "Anime4K",
"curveHeight": 0.3,
"useDenoiseVersion": true
},
{
"module": "Common",
"effect": "mitchell",
"scale": [ -0.5, -0.5 ],
"variant": "catrom"
},
{
"module": "Anime4K",
"effect": "Anime4K",
"curveHeight": 0.3
}
]
}
为了提升性能,在应用第一次Anime4K后缩放到屏幕能容纳的最大等比缩放的比例的一半大小,这样在第二次应用Anim4K后刚好全屏显示。为了消除图像中的轻微噪点,第一次使用的Anime4K为降噪版本。