Skip to content

空间采样:最近邻、双线性与三次 ​

屏幕上的一个片元通常不会恰好落在数据格点上。采样(sampling)要回答:已知周围离散值,该位置画什么?它依赖场重建(reconstruction)假设,也就是如何从离散样本定义中间位置。提高画面平滑度不会创造新的观测,也不能把粗网格升级成高分辨率数据。

本课只需要加、乘和比例。更慢的逐步推导放在采样与插值,不要求先学信号处理。

用四个数建立直觉 ​

设一个单元左下、右下、左上、右上的值依次为 0、10、20、30,单元内坐标为 (s,t),两者无量纲且范围为 0–1;s=0 在左边,t=0 在下边。双线性插值(bilinear interpolation)先沿横向,再沿纵向:

text
a = (1-s) × 0  + s × 10
b = (1-s) × 20 + s × 30
f = (1-t) × a  + t × b

在中心得到 15,在 (0.25,0.5) 得到 12.5。权重(weight)表示各样本占多少比例,四个权重非负且和为一,所以有效标量不会超出四个角的最小值和最大值。Bilinear 名字中的“线性”是分别对两个轴而言;一般单元内部包含 s*t 项,并不总是一张平面。

最近邻采样(nearest-neighbor sampling)只选最近节点,保留原始离散值和明显格块,适合分类编码、掩膜,以及检查原始网格。对土地类别编号做双线性插值会制造没有意义的“小数类别”。

三次不等于唯一算法 ​

二维三次采样(bicubic sampling)通常使用 4×4 邻域,但具体重建核(reconstruction kernel,即邻点权重随距离变化的函数)不同。Catmull–Rom 一类插值可能产生超出原值范围的过冲(overshoot);B 样条(B-spline)更平滑,却一般不穿过所有原始样本。页面上只写“Cubic”不足以表达科学含义,应说明核、边界与缺测策略。

绘制等值线时,采样器与提取算法还需要一致。用双线性场算几何线,再用三次场画底色,线与同值颜色边界可能不重合。这不是浮点误差,而是两个不同重建场。

接缝是拓扑问题 ​

全球经度周期网格在日期线两侧相邻,纬度却不能简单重复。极点附近的经线收敛,重复极点列也不代表许多独立物理位置。区域场应在边界外停止采样;随意 REPEAT 会把西边的数据贴到东边之外。缺测邻居如何处理则必须在最近邻、双线性与三次三种路径中统一。

本页实验提供最近邻与双线性两种实际采样路径,可配合时间和色带控件观察。三次采样在本章用于解释算法取舍,未作为实验开关提供。

一个场,多种颜色EXPERIMENT 07 · CESIUM 1.145.0

一个场,多种颜色

在同一组合成场上切换采样、时间和颜色映射。

在浏览器本地运行 · 无需账号 · 鼠标拖动旋转,滚轮缩放

教学合成数据,不代表真实观测或天气预报。规则场用于验证,拟真形态用于观察复杂结构。 数据说明
查看运行源码

此代码直接读取实际运行的实验模块。按 kind 分支定位当前实验,也可查看数据公式和 GLSL。

读取源码…

观察任务 ​

放大标量场,观察相邻颜色过渡。假设原始四角是 0、0、0、100,中心值应是多少?若只把数据纹理的过滤方式改成 LINEAR,是否自动完成了正确的经纬度插值?

展开答案

双线性中心值是 25。硬件 LINEAR 只知道纹理坐标,仍需要正确的节点到 texel 映射、周期规则和有效性处理。它也不会理解球面距离;等角经纬网格上的双线性,定义在经纬参数空间,而非地表等距离空间。

性能优化时先建立一个 CPU 参考采样器,用中心、边界、日期线与缺测邻域作小样本对照,再验证 GPU。否则“看起来平滑”很容易掩盖半格错位。

阅读依据:Khronos WebGL 2 纹理规范、Cesium 1.145 Sampler 源码(internal)。

气象学 · 数学基础 · 地理可视化