下采样 Kernel Research

July 30

问题背景

  1. 高斯模糊通过 下采样 -> 小卷积核模糊 -> 上采样 的方式来优化大半径模糊的性能
  2. 经过 Box2x2 卷积核下采样后,图像高频信号在运动过程中会在时域出现闪烁。
用于演示下采样混叠的 sinc 函数、坐标轴和网格图像

效果对照

Box2x2 单阶段(GPU 双线性)
1/4
1/4
1/4
1/4
Box2x2 三阶段(GPU 双线性)
1/4
1/4
1/4
1/4
CrossBox 三阶段
0
1/16
1/16
0
1/16
2/16
2/16
1/16
1/16
2/16
2/16
1/16
0
1/16
1/16
0

CrossBox 在 shader 中仍然只有四次纹理采样,但每个 tap 都落在上一层四个 texel 之间。把 GPU 双线性插值展开到离散 texel 后,单阶段等效核是

hCross(1)=116[0110122112210110].h_{\mathrm{Cross}}^{(1)} = \frac{1}{16} \begin{bmatrix} 0&1&1&0\\ 1&2&2&1\\ 1&2&2&1\\ 0&1&1&0 \end{bmatrix}.

后续所有 CrossBox 图表都使用这个已经包含线性 sampler footprint 的核。

问题定义

设完整的“下采样 → 模糊 → 上采样”算子为 P\mathcal P。令 p=p(t)\mathbf p=\mathbf p(t) 表示图像在时刻 tt 相对初始位置的位移,并定义原图坐标中的平移算子

(Tpf)(x)=f(xp).(\mathcal T_{\mathbf p}f)(\mathbf x) = f(\mathbf x-\mathbf p).

于是第 tt 帧为 ft(x)=(Tp(t)f)(x)f_t(\mathbf x)=(\mathcal T_{\mathbf p(t)}f)(\mathbf x)。“平移过程中不发生闪烁”所要求的命题是

P(Tpf)=Tp(Pf),p\boxed{ \mathcal P(\mathcal T_{\mathbf p}f) = \mathcal T_{\mathbf p}(\mathcal P f), \qquad \forall\mathbf p }

左边是“先移动原图,再执行完整处理”,右边是“先执行完整处理,再移动结果”。

先移动,再模糊
𝒫(Tf)
正在读取图像…
先模糊,再移动
T(𝒫f)
正在读取图像…

问题分析

先看模糊流程。流程存在两个不同的坐标系,这里用 x\mathbf x 表示原图坐标,用 k\mathbf k 表示低分辨率图像的离散坐标:

f(x) D d(x) III ⁣M ds(x) M d[k] G g[k] M gs(x) U f(x).f(\mathbf x) \xrightarrow{\ D\ } d(\mathbf x) \xrightarrow{\ \operatorname{III}\!\downarrow_M\ } d_s(\mathbf x) \xrightarrow{\ \downarrow_M\ } d[\mathbf k] \xrightarrow{\ G\ } g[\mathbf k] \xrightarrow{\ \uparrow_M\ } g_s(\mathbf x) \xrightarrow{\ U\ } f'(\mathbf x).

上面的符号分别表示:

  • DD 是抽取前使用核 hh 完成的下采样卷积。本文后续的 hh 都指纹理采样真正作用到上一层离散像素上的等效权重:如果一个采样位置落在像素之间,就先把 GPU 线性插值展开到相邻像素,再把各次采样的权重相加;
  • III ⁣M\operatorname{III}\!\downarrow_M 是间隔为 MM 的冲激采样,结果仍位于原图坐标中。它包含实际采样网格的固定相位,后文会显式写出;
  • M\downarrow_M 把稀疏冲激的权重紧凑地重排为低分辨率图像;
  • GG 是低分辨率图像上的高斯模糊;
  • M\uparrow_M 把低分辨率像素放回原图坐标,在样本之间插入空值;
  • UU 使用重建核 τ\tau 完成上采样卷积。

上面的信号如下图



原图

原图 f(x)f(\mathbf x)

原图与三阶段 Box2x2 等效卷积核的卷积结果

下采样卷积 d(x)=(Df)(x)d(\mathbf x)=(Df)(\mathbf x)

卷积结果与间隔为八像素的二维梳状函数相乘后的稀疏冲激;冲激在图中被放大以便观察

冲激采样 ds(x)d_s(\mathbf x)

丢掉梳状采样中间的空像素并重排为六十四乘六十四低分辨率图像

向下重排列 d[k]d[\mathbf k]

六十四乘六十四低分辨率图像经过七乘七、标准差一点五的高斯模糊

低分辨率模糊 g[k]=(Gd)[k]g[\mathbf k]=(Gd)[\mathbf k]

把高斯模糊后的低分辨率像素放回原图坐标并在样本之间补零

向上重排列 gs(x)g_s(\mathbf x)

插零后的稀疏图像与三角核卷积得到的上采样重建结果

重建卷积 f(x)=(Ugs)(x)f'(\mathbf x)=(Ug_s)(\mathbf x)

为了方便,后面推导过程里原图坐标中的信号省略自变量 (x)(\mathbf x),直接写成 f,d,ds,gs,ff,d,d_s,g_s,f';只有低分辨率图像显式写出离散坐标 d[k]d[\mathbf k]g[k]g[\mathbf k]

拆解算子 P\mathcal P

回来看我们的命题

P(Tpf)=Tp(Pf),p\mathcal P(\mathcal T_{\mathbf p}f) = \mathcal T_{\mathbf p}(\mathcal P f), \qquad \forall\mathbf p

我们需要把 P\mathcal P 完整展开,再尝试让平移算子 Tp\mathcal T_{\mathbf p} 从右向左依次穿过每个处理步骤。按照前面的流水线,P\mathcal P

P=UMGM(III ⁣M)D.\mathcal P = U \circ\uparrow_M \circ G \circ\downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ D.

因此,把移动后的图像送进这条链路就是

P(Tpf)=UMGM(III ⁣M)D(Tpf),PTp=UMGM(III ⁣M)DTp.\begin{aligned} \mathcal P(\mathcal T_{\mathbf p}f) &= U\circ\uparrow_M\circ G\circ\downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ D(\mathcal T_{\mathbf p}f),\\ \mathcal P\circ\mathcal T_{\mathbf p} &= U\circ\uparrow_M\circ G\circ\downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ D\circ\mathcal T_{\mathbf p}. \end{aligned}

我们的目标是判断最右边的 Tp\mathcal T_{\mathbf p} 能否一路移到最左边,最终得到 TpP\mathcal T_{\mathbf p}\circ\mathcal P。现在可以检查 Tp\mathcal T_{\mathbf p} 能否依次穿过这些算子。这里的 DD 使用前面定义的实际等效核 hh,GPU 线性插值已经包含在 hh 中,因此 DD 仍然是一个卷积算子,与原图坐标中的平移严格交换:

DTp=TpD.D\circ\mathcal T_{\mathbf p} = \mathcal T_{\mathbf p}\circ D.

冲激采样和向下重排列会把信号从原图坐标转换到低分辨率坐标,因此这两个操作需要放在一起检查。经过 MM 倍下采样,原图中的位移 p\mathbf p 应对应低分辨率坐标中的位移 p/M\mathbf p/M。下面用 Tp/M()\mathcal T^{(\ell)}_{\mathbf p/M} 表示低分辨率坐标中的理想连续平移。

低分辨率卷积 GG 同样与其坐标系中的平移严格交换:

GTp/M()=Tp/M()G.G\circ\mathcal T^{(\ell)}_{\mathbf p/M} = \mathcal T^{(\ell)}_{\mathbf p/M}\circ G.

最后,M\uparrow_MUU 共同把信号送回原图坐标。所需的交换关系是

UMTp/M() =? TpUMU \circ \uparrow_M \circ \mathcal T^{(\ell)}_{\mathbf p/M} \ \stackrel{?}{=}\ \mathcal T_{\mathbf p} \circ U \circ \uparrow_M

因此,整条链路中平移算子的移动过程可以概括为

PTp=UMGM(III ⁣M)DTp=UMGM(III ⁣M)TpD=?UMGTp/M()M(III ⁣M)D=UMTp/M()GM(III ⁣M)D=?TpUMGM(III ⁣M)D=TpP.\begin{aligned} \mathcal P\circ\boxed{\mathcal T_{\mathbf p}} &= U\circ\uparrow_M\circ G\circ\downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ D\circ\boxed{\mathcal T_{\mathbf p}}\\ &= U\circ\uparrow_M\circ G\circ\downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ\boxed{\mathcal T_{\mathbf p}}\circ D\\ &\stackrel{?}{=} U\circ\uparrow_M\circ G \circ\boxed{\mathcal T^{(\ell)}_{\mathbf p/M}} \circ\downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ D\\ &= U\circ\uparrow_M \circ\boxed{\mathcal T^{(\ell)}_{\mathbf p/M}}\circ G \circ\downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ D\\ &\stackrel{?}{=} \boxed{\mathcal T_{\mathbf p}} \circ U\circ\uparrow_M\circ G\circ\downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ D\\ &= \boxed{\mathcal T_{\mathbf p}}\circ\mathcal P. \end{aligned}

先把 GGM\uparrow_MUU 放到一边,集中分析第一个问号:

M(III ⁣M)DTp =? Tp/M()M(III ⁣M)D.\boxed{ \downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ D\circ\mathcal T_{\mathbf p} \ \stackrel{?}{=}\ \mathcal T^{(\ell)}_{\mathbf p/M} \circ\downarrow_M \circ\bigl(\operatorname{III}\!\downarrow_M\bigr) \circ D. }

也就是,需要让 先下采样再移动 和 先移动再下采样 的结果恒等。

进入频域

二维图像只是在水平和垂直两个方向上重复同一件事,下面暂时把 dd 看成一维信号,并相应地把位移 p\mathbf p 简写为 pp。接下来统一用帽子表示傅里叶变换,即 f^=F{f}\widehat f=\mathcal F\{f\}

继续分析需要依赖频域的3个特性:

  1. 信号 dd 平移 pp 之后,频谱只增加一个相位:
F{Tpd}(ω)=eiωpd^(ω).\mathcal F\{\mathcal T_p d\}(\omega) = e^{-i\omega p}\widehat d(\omega).
  1. 间隔为 MM 的梳状函数在频域中仍然是梳状函数,频谱副本之间的距离为 2π/M2\pi/M。实际 GPU 下采样还有固定的采样相位:单次二倍下采样的输出像素中心位于上一层的 2k+0.52k+0.5;连续进行 LL 次后,M=2LM=2^L,采样位置在原图坐标中是
xk=kM+aM,aM=M12.x_k=kM+a_M, \qquad a_M=\frac{M-1}{2}.

例如三次二倍下采样时 M=8M=8,采样网格是 8k+3.58k+3.5。因此使用带相位的梳状函数

IIIM,aM(x)=kZδ(xaMkM),\operatorname{III}_{M,a_M}(x) = \sum_{k\in\mathbb Z}\delta(x-a_M-kM),

它的傅里叶变换是

F{IIIM,aM}(ω)=2πMrZei2πrMaMδ(ω2πrM).\mathcal F\{\operatorname{III}_{M,a_M}\}(\omega) = \frac{2\pi}{M} \sum_{r\in\mathbb Z} e^{-i\frac{2\pi r}{M}a_M} \delta\left(\omega-\frac{2\pi r}{M}\right).
  1. MM 倍下采样后,低分辨率图像在原图频率坐标中能够无混叠表示的范围是中心频带 ω<π/M|\omega|< \pi/M

因此,“先平移,再采样”得到的频谱是

d^s,p(ω)=eiωpMrZei2πrMaMei2πrMpd^(ω2πrM).\widehat d_{s,p}(\omega) = \frac{e^{-i\omega p}}{M} \sum_{r\in\mathbb Z} e^{-i\frac{2\pi r}{M}a_M} e^{i\frac{2\pi r}{M}p} \widehat d\left(\omega-\frac{2\pi r}{M}\right).

如果是“先采样,再平移”,那么每一份频谱应该得到同一个相位:

d^s,pideal(ω)=eiωpMrZei2πrMaMd^(ω2πrM).\widehat d_{s,p}^{\,\mathrm{ideal}}(\omega) = \frac{e^{-i\omega p}}{M} \sum_{r\in\mathbb Z} e^{-i\frac{2\pi r}{M}a_M} \widehat d\left(\omega-\frac{2\pi r}{M}\right).

固定采样相位 ei2πraM/Me^{-i2\pi r a_M/M} 同时出现在两条路径中,因此不会改变它们是否相等。两者的差别仍然只在由输入位移产生的因子:

ei2πrMp.\boxed{ e^{i\frac{2\pi r}{M}p}. }

对于中心频谱 r=0r=0,这个因子永远等于 11

当位移刚好是 MM 的整数倍时,所有额外相位都等于 11

ei2πrM(mM)=ei2πrm=1.e^{i\frac{2\pi r}{M}(mM)} = e^{i2\pi rm} =1.

要让等式对任意位移 pp 都成立,就必须让中心频带中只剩下 r=0r=0 这一项。也就是说,下采样卷积后的信号必须满足

d^(ω)=0,ωπM.\boxed{ \widehat d(\omega)=0, \qquad |\omega|\geq\frac{\pi}{M}. }

π/M\pi/M 就是以 MM 为采样间隔时的奈奎斯特频率。在二维图像中,对应的无混叠区域是

NM={(ωx,ωy)  |  ωx<πM,  ωy<πM}.\mathcal N_M = \left\{ (\omega_x,\omega_y) \;\middle|\; |\omega_x|<\frac{\pi}{M}, \; |\omega_y|<\frac{\pi}{M} \right\}.

因此,下采样阶段对任意连续平移保持一致的条件是

d^(ω)=0,ωNM.\boxed{ \widehat d(\boldsymbol\omega)=0, \qquad \boldsymbol\omega\notin\mathcal N_M. }

又因为

d=hfd^=h^f^,d=h\ast f \qquad\Longleftrightarrow\qquad \widehat d=\widehat h\,\widehat f,

所以对于当前这张图像,真正需要满足的条件是

h^(ω)f^(ω)=0,ωNM.\boxed{ \widehat h(\boldsymbol\omega) \widehat f(\boldsymbol\omega)=0, \qquad \boldsymbol\omega\notin\mathcal N_M. }

如果希望这个结论对任意输入图像都成立,那么只能要求下采样核本身满足

h^(ω)=0,ωNM.\widehat h(\boldsymbol\omega)=0, \qquad \boldsymbol\omega\notin\mathcal N_M.

也就是说最理想的下采样卷积核是理想低通滤波器。虽然这无法在工程上实现,但是也得到了误差分析的方法,即只要让奈奎斯特频率限外的部分能量尽可能为0,就能降低混叠带来的视觉瑕疵。

问题就进一步变成了:找到一个足够好的低通滤波器(降采样卷积核),削弱奈奎斯特频率限外的能量。

在频谱图中检查奈奎斯特区域

青色方框标出了总计 88 倍下采样时的奈奎斯特区域:

N8={(ωx,ωy)  |  ωx<π8,  ωy<π8}.\mathcal N_8 = \left\{ (\omega_x,\omega_y) \;\middle|\; |\omega_x|<\frac{\pi}{8}, \; |\omega_y|<\frac{\pi}{8} \right\}.

方框内是低分辨率图像能够唯一表示的频率;方框外仍然存在的能量,会在抽取后折叠回方框内。

原图的傅里叶振幅频谱,中心用青色方框标出八倍下采样的奈奎斯特区域

原图频谱 f^|\widehat f|

原图经过单次二乘二 Box 卷积后的傅里叶振幅频谱,标出八倍下采样的奈奎斯特区域

单阶段 Box2x2:h^Box(1)f^|\widehat h_{\mathrm{Box}}^{(1)}\widehat f|

原图经过三次二乘二 Box 卷积后的傅里叶振幅频谱,标出八倍下采样的奈奎斯特区域

三阶段 Box2x2:h^Box(3)f^|\widehat h_{\mathrm{Box}}^{(3)}\widehat f|

原图经过三阶段 CrossBox 卷积后的傅里叶振幅频谱,标出八倍下采样的奈奎斯特区域

三阶段 CrossBox:h^Cross(3)f^|\widehat h_{\mathrm{Cross}}^{(3)}\widehat f|

单阶段 Box2x2 在方框边缘附近几乎保留了原图的全部频率能量;三阶段 Box2x2 已经明显压低了方框外的能量,但仍能看到规则的旁瓣。CrossBox 的真实响应还包含每阶段 GPU 双线性 footprint,并额外乘上方向相关的 (cosωx+cosωy)/2\left(\cos\omega_x+\cos\omega_y\right)/2,所以方框外整体更暗,但通带也比 Box2x2 衰减得更多。

这四张图直接对应前面得到的判断条件:

h^(ω)f^(ω)0,ωN8.\widehat h(\boldsymbol\omega) \widehat f(\boldsymbol\omega) \approx0, \qquad \boldsymbol\omega\notin\mathcal N_8.

方框外越暗,能够带着位移相关相位折叠回中心频带的能量越少,运动中的闪烁也就越弱。

其他问题

当前实现存在的 Bug

只进行了单阶段 GPU 双线性插值,对奈奎斯特区域外几乎没有抑制作用。下采样层级越高,混叠现象越严重。

Box2x2 单阶段等效 Kernel
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1/4
1/4
0
0
0
0
0
0
1/4
1/4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
原图经过单次二乘二 Box 卷积后的频谱,标出八倍下采样奈奎斯特区域原图经过单次二乘二 Box 卷积后的频谱,标出八倍下采样奈奎斯特区域

还有更好的吗

每一行从左到右依次是:

  1. 三阶段卷积合成后的等效空间权重;
  2. 等效核自身的频率响应 h^K(3)|\widehat h_K^{(3)}|
  3. 原图经过等效核卷积后的频谱 h^K(3)f^|\widehat h_K^{(3)}\widehat f|

等效空间核按实际支持范围绘制:固定 2×22\times2 偶数核的 tap 落在 texel 中心,三阶段展开后为 8×88\times8;固定 3×33\times35×55\times5 奇数核的 tap 落在半 texel 位置,先经过 GPU 双线性插值展开为 4×44\times46×66\times6,三阶段等效支持范围分别为 22×2222\times2236×3636\times36;两个程序化 Lanczos 则分别为 78×7878\times78134×134134\times134。暖色表示正权重,蓝色表示负权重;每张空间图按自身最大绝对权重归一化颜色,只用于观察权重的形状和正负分布。后两列中的青色方框仍然是总计 88 倍下采样的奈奎斯特区域,所有卷积结果继续使用与前文相同的对数亮度范围。

所有行都画渲染器真正作用到上一层离散 texel 的权重。对于奇数尺寸固定矩阵,这包含硬件线性 sampler 的 2×22\times2 footprint;Lanczos 行则使用渲染器针对 22 倍比例和半像素相位实际生成的离散权重。边界寻址模式不进入这组无限平移不变的频率分析。CrossBox 这一行与前文的三阶段 CrossBox 使用完全相同的 4×44\times4 单阶段等效核。

等效空间核
等效响应 h^K(3)|\widehat h_K^{(3)}|
卷积频谱 h^K(3)f^|\widehat h_K^{(3)}\widehat f|

Box2x2

NodeForge Box2x2 预设连续用于三次二倍下采样后的等效空间权重NodeForge Box2x2 预设连续用于三次二倍下采样后的等效频率响应,标出八倍下采样奈奎斯特区域原图经过三阶段 NodeForge Box2x2 等效核卷积后的频谱

Box3x3

NodeForge Box3x3 预设连续用于三次二倍下采样后的等效空间权重NodeForge Box3x3 预设连续用于三次二倍下采样后的等效频率响应,标出八倍下采样奈奎斯特区域原图经过三阶段 NodeForge Box3x3 等效核卷积后的频谱

CrossBox

NodeForge CrossBox 预设连续用于三次二倍下采样后的等效空间权重NodeForge CrossBox 预设连续用于三次二倍下采样后的等效频率响应,标出八倍下采样奈奎斯特区域原图经过三阶段 NodeForge CrossBox 等效核卷积后的频谱

Gaussian3x3

NodeForge Gaussian3x3 预设连续用于三次二倍下采样后的等效空间权重NodeForge Gaussian3x3 预设连续用于三次二倍下采样后的等效频率响应,标出八倍下采样奈奎斯特区域原图经过三阶段 NodeForge Gaussian3x3 等效核卷积后的频谱

Gaussian5x5

NodeForge Gaussian5x5 预设连续用于三次二倍下采样后的等效空间权重NodeForge Gaussian5x5 预设连续用于三次二倍下采样后的等效频率响应,标出八倍下采样奈奎斯特区域原图经过三阶段 NodeForge Gaussian5x5 等效核卷积后的频谱

Lanczos3

NodeForge Lanczos3 预设连续用于三次二倍下采样后的等效空间权重NodeForge Lanczos3 预设连续用于三次二倍下采样后的等效频率响应,标出八倍下采样奈奎斯特区域原图经过三阶段 NodeForge Lanczos3 等效核卷积后的频谱

Lanczos5

NodeForge Lanczos5 预设连续用于三次二倍下采样后的等效空间权重,其中蓝色格表示负权重NodeForge Lanczos5 预设连续用于三次二倍下采样后的等效频率响应,标出八倍下采样奈奎斯特区域原图经过三阶段 NodeForge Lanczos5 等效核卷积后的频谱

这些图直接比较了七个预设在同一条三阶段、总计 88 倍下采样链路中的等效行为。修正后的 Lanczos3/5 已经呈现出预期的近似砖墙低通:青色方框内保持接近平坦,过渡集中在边界附近,方框外大部分区域接近黑色。

在水平截止边界 ωx=π/8\omega_x=\pi/8 上,Lanczos3 与 Lanczos5 的三阶段幅度约为 0.5100.5100.5000.500。到了明显属于阻带的 ωx=3π/8\omega_x=3\pi/8,它们分别只剩约 0.00470.00470.00240.0024。Lanczos5 的过渡更陡、阻带更干净。

因此判断标准仍然是:方框外越暗,抽取后能够折叠回中心频带的能量越少。

CrossBox 的限制

卷积核决定每个频率会被衰减多少,但真正进入抽取步骤的是 h^(ω)f^(ω)\widehat h(\boldsymbol\omega)\widehat f(\boldsymbol\omega)。因此,即使使用同一个核,不同原始信号也会因为频率能量的分布不同而产生不同程度的混叠。

下面三列使用完全相同的 FFT、对数亮度范围和 88 倍下采样奈奎斯特方框。每列上方是原图,下方是对应的振幅频谱 f^|\widehat f|

带坐标轴和网格的 sinc 原始信号带坐标轴和网格的 sinc 信号频谱,标出八倍下采样奈奎斯特区域
带对角网格的 sinc 原始信号带对角网格的 sinc 信号频谱,标出八倍下采样奈奎斯特区域
替换后的 App 文件夹界面原始截图替换后的 App 文件夹界面截图频谱,标出八倍下采样奈奎斯特区域
带坐标轴和网格的 sinc 信号经过三阶段 CrossBox 滤波后的频谱
带对角网格的 sinc 信号经过三阶段 CrossBox 滤波后的频谱
替换后的 App 文件夹界面经过三阶段 CrossBox 滤波后的频谱

坐标轴与网格信号

对角网格信号

替换后的 UI 截图

CrossBox 的方向性并不是“横竖方向削减更强”。在频率轴上,例如 ωy=0\omega_y=0,额外因子是 cos2(ωx/2)\cos^2(\omega_x/2);在对角线上 ωx=ωy\omega_x=\omega_y,额外因子是 cosωx\cos\omega_x,后者在低频附近下降更快,并在 ωx=π/2\omega_x=\pi/2 先出现零点。因此它对对角频率通常更强,对沿频率轴的分量相对更弱。实际闪烁仍要由这个方向响应与输入频谱共同决定,不能仅凭“UI 以横竖边缘为主”推出 CrossBox 更合适。

结论

  1. CrossBox 的四个 shader tap 在本实现中都是双线性采样;单阶段真实离散核是 4×44\times4,三阶段等效支持范围是 22×2222\times22
  2. 与三阶段 Box2x2 相比,CrossBox 用额外的通带衰减换取更强的阻带抑制,而且响应具有方向性:对角频率更强,频率轴方向相对更弱。
  3. Lanczos 的频率选择性最好,但卷积核较大,需要结合目标半径、带宽和采样指令成本决定是否值得使用。