问题背景
- 高斯模糊通过 下采样 -> 小卷积核模糊 -> 上采样 的方式来优化大半径模糊的性能
- 经过 Box2x2 卷积核下采样后,图像高频信号在运动过程中会在时域出现闪烁。
效果对照
问题定义
设完整的“下采样 → 模糊 → 上采样”算子为 P。令 p=p(t) 表示图像在时刻 t 相对初始位置的位移,并定义原图坐标中的平移算子
(Tpf)(x)=f(x−p).
于是第 t 帧为 ft(x)=(Tp(t)f)(x)。“平移过程中不发生闪烁”所要求的命题是
P(Tpf)=Tp(Pf),∀p
左边是“先移动原图,再执行完整处理”,右边是“先执行完整处理,再移动结果”。
问题分析
先看模糊流程。流程存在两个不同的坐标系,这里用 x 表示原图坐标,用 k 表示低分辨率图像的离散坐标:
f(x) D d(x) III↓M ds(x) ↓M d[k] G g[k] ↑M gs(x) U f′(x).
上面的符号分别表示:
- D 是抽取前使用核 h 完成的下采样卷积;
- III↓M 是间隔为 M 的冲激采样,结果仍位于原图坐标中;
- ↓M 把稀疏冲激的权重紧凑地重排为低分辨率图像;
- G 是低分辨率图像上的高斯模糊;
- ↑M 把低分辨率像素放回原图坐标,在样本之间插入空值;
- U 使用重建核 τ 完成上采样卷积。
上面的信号如下图

原图 f(x)

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

冲激采样 ds(x)

向下重排列 d[k]

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

向上重排列 gs(x)

重建卷积 f′(x)=(Ugs)(x)
为了方便,后面推导过程里原图坐标中的信号省略自变量 (x),直接写成 f,d,ds,gs,f′;只有低分辨率图像显式写出离散坐标 d[k] 和 g[k]。
拆解算子 P
回来看我们的命题
P(Tpf)=Tp(Pf),∀p
我们需要把 P 完整展开,再尝试让平移算子 Tp 从右向左依次穿过每个处理步骤。按照前面的流水线,P 是
P=U∘↑M∘G∘↓M∘(III↓M)∘D.
因此,把移动后的图像送进这条链路就是
P(Tpf)P∘Tp=U∘↑M∘G∘↓M∘(III↓M)∘D(Tpf),=U∘↑M∘G∘↓M∘(III↓M)∘D∘Tp.
我们的目标是判断最右边的 Tp 能否一路移到最左边,最终得到 Tp∘P。现在可以检查 Tp 能否依次穿过这些算子。首先,卷积 D 与原图坐标中的平移严格交换:
D∘Tp=Tp∘D.
冲激采样和向下重排列会把信号从原图坐标转换到低分辨率坐标,因此这两个操作需要放在一起检查。经过 M 倍下采样,原图中的位移 p 应对应低分辨率坐标中的位移 p/M。下面用 Tp/M(ℓ) 表示低分辨率坐标中的理想连续平移。
低分辨率卷积 G 同样与其坐标系中的平移严格交换:
G∘Tp/M(ℓ)=Tp/M(ℓ)∘G.
最后,↑M 和 U 共同把信号送回原图坐标。所需的交换关系是
U∘↑M∘Tp/M(ℓ) =? Tp∘U∘↑M
因此,整条链路中平移算子的移动过程可以概括为
P∘Tp=U∘↑M∘G∘↓M∘(III↓M)∘D∘Tp=U∘↑M∘G∘↓M∘(III↓M)∘Tp∘D=?U∘↑M∘G∘Tp/M(ℓ)∘↓M∘(III↓M)∘D=U∘↑M∘Tp/M(ℓ)∘G∘↓M∘(III↓M)∘D=?Tp∘U∘↑M∘G∘↓M∘(III↓M)∘D=Tp∘P.
先把 G、↑M 和 U 放到一边,集中分析第一个问号:
↓M∘(III↓M)∘D∘Tp =? Tp/M(ℓ)∘↓M∘(III↓M)∘D.
也就是,需要让 先下采样再移动 和 先移动再下采样 的结果恒等。
进入频域
二维图像只是在水平和垂直两个方向上重复同一件事,下面暂时把 d 看成一维信号,并相应地把位移 p 简写为 p。接下来统一用帽子表示傅里叶变换,即 f=F{f}。
继续分析需要依赖频域的3个特性:
- 信号 d 平移 p 之后,频谱只增加一个相位:
F{Tpd}(ω)=e−iωpd(ω).
- 间隔为 M 的梳状函数在频域中仍然是梳状函数,频谱副本之间的距离为 2π/M:
F{IIIM}(ω)=M2πr∈Z∑δ(ω−M2πr).
- M 倍下采样后,低分辨率图像在原图频率坐标中能够无混叠表示的范围是中心频带 ∣ω∣<π/M
因此,“先平移,再采样”得到的频谱是
ds,p(ω)=Me−iωpr∈Z∑eiM2πrpd(ω−M2πr).
如果是“先采样,再平移”,那么每一份频谱应该得到同一个相位:
ds,pideal(ω)=Me−iωpr∈Z∑d(ω−M2πr).
两者的差别只在一个地方:
eiM2πrp.
对于中心频谱 r=0,这个因子永远等于 1。
当位移刚好是 M 的整数倍时,所有额外相位都等于 1:
eiM2πr(mM)=ei2πrm=1.
要让等式对任意位移 p 都成立,就必须让中心频带中只剩下 r=0 这一项。也就是说,下采样卷积后的信号必须满足
d(ω)=0,∣ω∣≥Mπ.
π/M 就是以 M 为采样间隔时的奈奎斯特频率。在二维图像中,对应的无混叠区域是
NM={(ωx,ωy)∣ωx∣<Mπ,∣ωy∣<Mπ}.
因此,下采样阶段对任意连续平移保持一致的条件是
d(ω)=0,ω∈/NM.
又因为
d=h∗f⟺d=hf,
所以对于当前这张图像,真正需要满足的条件是
h(ω)f(ω)=0,ω∈/NM.
如果希望这个结论对任意输入图像都成立,那么只能要求下采样核本身满足
h(ω)=0,ω∈/NM.
也就是说最理想的下采样卷积核是理想低通滤波器。虽然这无法在工程上实现,但是也得到了误差分析的方法,即只要让奈奎斯特频率限外的部分能量尽可能为0,就能降低混叠带来的视觉瑕疵。
问题就进一步变成了:找到一个足够好的低通滤波器(降采样卷积核),削弱奈奎斯特频率限外的能量。
在频谱图中检查奈奎斯特区域
青色方框标出了总计 8 倍下采样时的奈奎斯特区域:
N8={(ωx,ωy)∣ωx∣<8π,∣ωy∣<8π}.
方框内是低分辨率图像能够唯一表示的频率;方框外仍然存在的能量,会在抽取后折叠回方框内。

原图频谱 ∣f∣

单阶段 Box2x2:∣hBox(1)f∣

三阶段 Box2x2:∣hBox(3)f∣

三阶段 CrossBox:∣hCross(3)f∣
单阶段 Box2x2 在方框边缘附近几乎保留了原图的全部频率能量;三阶段 Box2x2 已经明显压低了方框外的能量,但仍能看到规则的旁瓣。CrossBox 产生了更多穿过混叠区域的零线,对靠近奈奎斯特边界的多个方向衰减更强,同时仍保留少量具有方向性的旁瓣。
这四张图直接对应前面得到的判断条件:
h(ω)f(ω)≈0,ω∈/N8.
方框外越暗,能够带着位移相关相位折叠回中心频带的能量越少,运动中的闪烁也就越弱。
其他问题
当前实现存在的 Bug
只进行了单阶段 GPU 双线性插值,对奈奎斯特区域外几乎没有抑制作用。下采样层级越高,混叠现象越严重。
Box2x2 单阶段等效 Kernel0
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


还有更好的吗
每一行从左到右依次是:
- 三阶段卷积合成后的等效空间权重;
- 等效核自身的频率响应 ∣hK(3)∣;
- 原图经过等效核卷积后的频谱 ∣hK(3)f∣。
等效空间核按实际支持范围绘制:固定 2×2、3×3、5×5 矩阵三阶段展开后分别为 8×8、15×15、29×29;两个程序化 Lanczos 则分别为 78×78、134×134。暖色表示正权重,蓝色表示负权重;每张空间图按自身最大绝对权重归一化颜色,只用于观察权重的形状和正负分布。后两列中的青色方框仍然是总计 8 倍下采样的奈奎斯特区域,所有卷积结果继续使用与前文相同的对数亮度范围。
固定矩阵行画的是预设权重自身的离散响应;Lanczos 行画的是渲染器针对 2 倍比例和半像素相位实际生成的离散权重。边界寻址模式不进入这组无限平移不变的频率分析。CrossBox 这一行与前文的三阶段 CrossBox 使用完全相同的卷积核。
等效空间核
等效响应
∣hK(3)∣卷积频谱
∣hK(3)f∣
Box2x2
Box3x3
CrossBox
Gaussian3x3
Gaussian5x5
Lanczos3
Lanczos5
这些图直接比较了七个预设在同一条三阶段、总计 8 倍下采样链路中的等效行为。修正后的 Lanczos3/5 已经呈现出预期的近似砖墙低通:青色方框内保持接近平坦,过渡集中在边界附近,方框外大部分区域接近黑色。
在水平截止边界 ωx=π/8 上,Lanczos3 与 Lanczos5 的三阶段幅度约为 0.510、0.500。到了明显属于阻带的 ωx=3π/8,它们分别只剩约 0.0047、0.0024。Lanczos5 的过渡更陡、阻带更干净。
因此判断标准仍然是:方框外越暗,抽取后能够折叠回中心频带的能量越少;但不能把“整张图越暗”当作更好,因为低通同时必须保住方框内的通带。预设的名称本身不能说明抗混叠能力,真正需要比较的是三个尺度叠乘后的响应与输入频谱共同形成的 ∣hK(3)f∣。
CrossBox 的限制
卷积核决定每个频率会被衰减多少,但真正进入抽取步骤的是
h(ω)f(ω)。因此,即使使用同一个核,不同原始信号也会因为频率能量的分布不同而产生不同程度的混叠。
下面三列使用完全相同的 FFT、对数亮度范围和 8 倍下采样奈奎斯特方框。每列上方是原图,下方是对应的振幅频谱 ∣f∣。
UI 界面中高频信号主要是横竖方向的,CrossBox 正好对这两个方向的削减更强一些,效果更好。
结论
- CrossBox 是平衡开销和效果,在 UI 场景中比较好的下采样卷积核。
- CrossBox 也有局限,对角线高频信号消除能力较弱;静态场景 Box2x2 也足够,性能会更好。
- Lanczos 效果最好,但卷积核过大,甚至不如直接跑全量高斯。