医疗影像 2D 插值算法详解

5 阅读5分钟

医疗影像 2D 插值算法详解

1. 引言

1.1 什么是插值?

插值(Interpolation)是一种通过已知数据点估算未知位置数值的方法。在数字图像处理中,图像由离散的像素点组成,当我们需要获取非整数坐标位置的像素值时,就必须通过插值来估算。

设原始图像函数为 f(x,y)f(x, y),像素值仅在整数网格点 (i,j)(i, j) 上已知,f(i,j)=vijf(i, j) = v_{ij}。插值的任务是:对任意实数坐标 (x,y)(x, y),估算 f(x,y)f(x, y) 的值。

1.2 为什么要插值?

医疗影像中存在大量需要插值的场景:

  • 图像缩放(Resize):将影像调整至特定分辨率以便于显示或对比
  • 重建(Reconstruction):如 CT/MRI 层间插值,从稀疏层析数据重建三维体数据
  • 配准(Registration):将不同模态或不同时间点的影像对齐到同一坐标系
  • 几何校正(Geometric Correction):校正因设备或患者运动导致的几何畸变

1.3 插值的基本框架

所有插值方法都可以统一表述为加权求和形式:

f(x,y)=ijvijw(xi,yj)f(x, y) = \sum_{i} \sum_{j} v_{ij} \cdot w(x - i, y - j)

其中 w(,)w(\cdot, \cdot) 为插值核(kernel)或基函数,不同插值方法的本质差异就在于核函数的选择。


2. 各种插值算法详解

2.1 最近邻插值(Nearest Neighbor Interpolation)

原理

最近邻插值是最简单直观的插值方法。对于目标坐标 (x,y)(x, y),选择距离其最近的已知像素点,将其值赋给目标位置。

设目标点 (x,y)(x, y),找到最近的整数坐标:

i^=round(x),j^=round(y)\hat{i} = \text{round}(x), \quad \hat{j} = \text{round}(y)

则插值结果为:

f(x,y)=vi^j^f(x, y) = v_{\hat{i}\hat{j}}

公式

f(x,y)=vi,j,其中 i=argminkxk, j=argminlylf(x, y) = v_{i,j}, \quad \text{其中 } i = \arg\min_{k} |x - k|, \ j = \arg\min_{l} |y - l|

等价地,若 (x,y)(x, y) 落在像素 (i,j)(i, j) 的领域内([i0.5,i+0.5)×[j0.5,j+0.5)[i-0.5, i+0.5) \times [j-0.5, j+0.5)),则 f(x,y)=vijf(x, y) = v_{ij}

计算举例

考虑 2×2 像素网格:

        y=0           y=1
    ┌───────────┬───────────┐
    │  v = 100  │  v = 200x=0 │   (0,0)   │   (0,1)   │
    ├───────────┼───────────┤
    │  v = 150  │  v = 255x=1 │   (1,0)   │   (1,1)   │
    └───────────┴───────────┘

例 1:点 (0.3,0.7)(0.3, 0.7)

  • 距离最近的整数点为 (0,1)(0, 1)
  • 因此 f(0.3,0.7)=v0,1=200f(0.3, 0.7) = v_{0,1} = 200
    ┌───────────┬───────────┐
    │  v = 100  │  v = 200  │  ↑
    │   (0,0)   │   (0,1)   │  │ 距离 (0.3,0.7) 最近
x=0 ├───────────┼───────────┤──┘
    │  v = 150  │  v = 255x=1 │   (1,0)   │   (1,1)   │
    └───────────┴───────────┘

例 2:点 (0.6,0.4)(0.6, 0.4)

  • 距离最近的整数点为 (1,0)(1, 0)
  • 因此 f(0.6,0.4)=v1,0=150f(0.6, 0.4) = v_{1,0} = 150
    ┌───────────┬───────────┐
    │  v = 100  │  v = 200x=0 ├───────────┼───────────┤
    │  v = 150  │  v = 255  │  ↑
    │   (1,0)   │   (1,1)   │──┘ 距离 (0.6,0.4) 最近
x=1 └───────────┴───────────┘
优缺点与适用场景

优点:

  • 计算速度快,无需乘除运算
  • 保持原始像素值,不产生新的灰度值
  • 无平滑效应,边缘保持锐利

缺点:

  • 质量较低,存在明显的锯齿效应(blockiness)
  • 放大时图像出现马赛克感
  • 不连续性导致视觉效果差

适用场景:

  • 分类影像(segmented image),如已标注的器官轮廓图
  • 需要快速预览的实时显示
  • 对计算速度要求极高而质量要求不高的场景
  • 像素值具有离散意义(如标签图)的情况

2.2 双线性插值(Bilinear Interpolation)

原理

双线性插值在两个方向上分别进行线性插值。考虑目标点 (x,y)(x, y),首先在 xx 方向进行两次线性插值,再在 yy 方向进行一次线性插值。

(x,y)(x, y) 落在单元 [i,i+1]×[j,j+1][i, i+1] \times [j, j+1] 内,记 u=xiu = x - iv=yjv = y - j,其中 u,v[0,1)u, v \in [0, 1)

公式推导

第一步:在 xx 方向对上下两条边分别进行线性插值:

  • 在下边 (j)(j)f(x,j)=(1u)vi,j+uvi+1,jf(x, j) = (1-u) \cdot v_{i,j} + u \cdot v_{i+1,j}
  • 在上边 (j+1)(j+1)f(x,j+1)=(1u)vi,j+1+uvi+1,j+1f(x, j+1) = (1-u) \cdot v_{i,j+1} + u \cdot v_{i+1,j+1}

第二步:在 yy 方向对两个插值结果进行线性插值:

f(x,y)=(1v)f(x,j)+vf(x,j+1)f(x, y) = (1-v) \cdot f(x, j) + v \cdot f(x, j+1)

综合两步:

f(x,y)=(1v)[(1u)vi,j+uvi+1,j]+v[(1u)vi,j+1+uvi+1,j+1]f(x, y) = (1-v)\left[(1-u) v_{i,j} + u \cdot v_{i+1,j}\right] + v\left[(1-u) v_{i,j+1} + u \cdot v_{i+1,j+1}\right]

整理得标准形式:

f(x,y)=(1u)(1v)vi,j+u(1v)vi+1,j+(1u)vvi,j+1+uvvi+1,j+1f(x, y) = (1-u)(1-v) v_{i,j} + u(1-v) v_{i+1,j} + (1-u)v \cdot v_{i,j+1} + uv \cdot v_{i+1,j+1}

计算举例

使用相同的 2×2 网格,点 (0.3,0.7)(0.3, 0.7) 落在单元 [0,1]×[0,1][0,1] \times [0,1] 内:

             y=0                 y=1
         ┌────────────┐    ┌────────────┐
         │  v = 100   │    │  v = 200x=0  │   (0,0)    │    │   (0,1)    │
         ├─────┬──────┤────┼─────┬──────┤
         │     │      │    │     │      │
    x=1  │─────●──────│────│─────●──────│
         │     │f(0.3,0.7)│    │            │
         └─────┴──────────┘────┴────┴──────┘
              (0.3,0)              (0.3,1)
                            ←──u=0.3──→

    u = x - i = 0.3 - 0 = 0.3
    v = y - j = 0.7 - 0 = 0.7

计算点 (0.3,0.7)(0.3, 0.7) 处的插值(i=0,j=0,u=0.3,v=0.7i=0, j=0, u=0.3, v=0.7):

第一步xx 方向插值

  • f(0.3,0)=(10.3)100+0.3150=0.7100+0.3150=70+45=115f(0.3, 0) = (1-0.3) \cdot 100 + 0.3 \cdot 150 = 0.7 \cdot 100 + 0.3 \cdot 150 = 70 + 45 = 115
  • f(0.3,1)=(10.3)200+0.3255=0.7200+0.3255=140+76.5=216.5f(0.3, 1) = (1-0.3) \cdot 200 + 0.3 \cdot 255 = 0.7 \cdot 200 + 0.3 \cdot 255 = 140 + 76.5 = 216.5

第二步yy 方向插值

  • f(0.3,0.7)=(10.7)115+0.7216.5=0.3115+0.7216.5=34.5+151.55=186.05f(0.3, 0.7) = (1-0.7) \cdot 115 + 0.7 \cdot 216.5 = 0.3 \cdot 115 + 0.7 \cdot 216.5 = 34.5 + 151.55 = 186.05

权重分布可视化(每个像素的贡献权重):

权重矩阵:

  ┌───────────────┬───────────────┐
  │ (1-u)(1-v)    │ (1-u)v       │
  │    = 0.21     │    = 0.49    │
  │   v00 = 100   │   v01 = 200  │
  │   权重 21%    │   权重 49%   │
  ├───────────────┼───────────────┤
  │ u(1-v)        │ uv           │
  │    = 0.09     │    = 0.21    │
  │   v10 = 150   │   v11 = 255  │
  │   权重 9%     │   权重 21%   │
  └───────────────┴───────────────┘

左列像素: v00, v10 | 右列像素: v01, v11

加权和:0.21×100+0.09×150+0.49×200+0.21×255=186.050.21 \times 100 + 0.09 \times 150 + 0.49 \times 200 + 0.21 \times 255 = 186.05

优缺点与适用场景

优点:

  • 计算复杂度适中
  • 产生平滑过渡,比最近邻更自然的视觉效果
  • 不会产生新的像素值范围外的值

缺点:

  • 边缘会有轻微模糊
  • 低通滤波特性,会损失高频信息(如细线、边缘)
  • 旋转或缩放后图像质量有限

适用场景:

  • 日常医学影像的缩放显示
  • 需要快速处理的中等质量需求
  • CT/MRI 横断面图像的常规浏览
  • 初级配准的粗略变换

2.3 双三次插值(Bicubic Interpolation)

原理

双三次插值使用待插值点周围的 16 个像素点 (4×4(4 \times 4 邻域),通过三次多项式(cubic polynomial)进行加权计算。每个方向的基函数为三次样条函数。

u=xiu = x - iv=yjv = y - j,其中 i=xi = \lfloor x \rfloorj=yj = \lfloor y \rflooru,v[0,1)u, v \in [0, 1)

公式

标准双三次插值核函数(Catmull-Rom 样条)为:

w(t)={(a+2)t3(a+3)t2+1当 0t<1at35at2+8at4a当 1t<20当 t2w(t) = \begin{cases} (a+2)|t|^3 - (a+3)|t|^2 + 1 & \text{当 } 0 \leq |t| < 1 \\ a|t|^3 - 5a|t|^2 + 8a|t| - 4a & \text{当 } 1 \leq |t| < 2 \\ 0 & \text{当 } |t| \geq 2 \end{cases}

常用参数 a=0.5a = -0.5(Catmull-Rom 样条)。

二维插值公式:

f(x,y)=m=12n=12vi+m,j+nw(mu)w(nv)f(x, y) = \sum_{m=-1}^{2} \sum_{n=-1}^{2} v_{i+m, j+n} \cdot w(m-u) \cdot w(n-v)

其中 vi+m,j+nv_{i+m, j+n} 为 16 个邻域像素值。

另一种等价形式利用 4×4 权重矩阵:

f(x,y)=ABCf(x, y) = \mathbf{A} \cdot \mathbf{B} \cdot \mathbf{C}

其中 A\mathbf{A}B\mathbf{B}C\mathbf{C} 为权重向量与像素矩阵的乘积。

计算举例

考虑 4×4 像素网格中的 16 个像素值,演示计算点 (1.3,1.7)(1.3, 1.7) 处(i=1,j=1,u=0.3,v=0.7i=1, j=1, u=0.3, v=0.7)的插值。

原始 4×4 像素网格:

         j=0     j=1     j=2     j=3
      ┌────────┬────────┬────────┬────────┐
 i=0100120130110   │
      └────────┼────────┼────────┼────────┘
 i=1150[180][200]160   │  ← [ ]2×2 邻域
      ├────────┼────────┼────────┼────────┤
 i=2200[240][255]210   │  ← [ ]2×2 邻域
      ├────────┼────────┼────────┼────────┤
 i=3180220230190   │
      └────────┴────────┴────────┴────────┘

16 个像素值(4×4 邻域矩阵 (i1i+2,j1j+2)(i-1 \dots i+2, j-1 \dots j+2)):

         n=-1      n=0      n=1      n=2
       ┌────────┬────────┬────────┬────────┐
 m=-1100120130110   │
       ├────────┼────────┼────────┼────────┤
 m=0150180200160   │
       ├────────┼────────┼────────┼────────┤
 m=1200240255210   │
       ├────────┼────────┼────────┼────────┤
 m=2180220230190   │
       └────────┴────────┴────────┴────────┘

  索引对应: v_{i-1,j-1} = v_{0,0} = 100, ..., v_{i+2,j+2} = v_{3,3} = 190

计算权重(取 a=0.5a = -0.5):

w(1.3)=w(1.3)=0.5(1.3)35(0.5)(1.3)2+8(0.5)(1.3)4(0.5)w(-1.3) = w(1.3) = -0.5 \cdot (1.3)^3 - 5(-0.5)(1.3)^2 + 8(-0.5)(1.3) - 4(-0.5) =0.52.197(2.5)1.69+(4)(1.3)+2= -0.5 \cdot 2.197 - (-2.5) \cdot 1.69 + (-4)(1.3) + 2 =1.0985+4.225+(5.2)+20.0735= -1.0985 + 4.225 + (-5.2) + 2 \approx -0.0735

使用 Catmull-Rom 核的预计算值:

  • w(1.3)0.066w(-1.3) \approx -0.066
  • w(0.3)=w(0.3)0.835w(-0.3) = w(0.3) \approx 0.835(在 t<1|t|<1 区间)
  • w(0.7)=w(0.7)0.244w(0.7) = w(0.7) \approx 0.244
  • w(1.7)=w(1.7)0.013w(1.7) = w(1.7) \approx -0.013

实际计算中通过矩阵运算完成:

f(x,y)186.4f(x,y) \approx 186.4(实际精确计算值)

优缺点与适用场景

优点:

  • 图像质量较高,边缘保持较好
  • 过度平滑自然,比双线性更锐利
  • 广泛使用的标准方法

缺点:

  • 计算量较大,涉及 16 次乘法和多次加法
  • 可能有轻微的过冲(overshoot)现象
  • 需要访问 4×4 邻域,边界处理复杂

适用场景:

  • 高质量医学影像显示和打印
  • 诊断级图像缩放
  • 影像存档与传输(PACS)中的质量要求较高的显示
  • 发布级医学图像的后处理

2.4 面积插值(Area-Based Interpolation)

原理

面积插值基于像素面积重叠的概念。当目标网格与源网格存在几何变换(如旋转、缩放)时,源像素被映射到目标网格上,目标像素的值等于源像素覆盖目标像素面积的比例加权。

设源图像 SS 和目标图像 TT,对于目标像素 tTt \in T

fT(t)=sSfS(s)Area(st)Area(t)f_T(t) = \sum_{s \in S} f_S(s) \cdot \frac{\text{Area}(s \cap t)}{\text{Area}(t)}

其中 Area(st)\text{Area}(s \cap t) 是源像素 ss 与目标像素 tt 的重叠面积。

公式推导

设源像素 ss 的坐标范围为 [xs,xs+1]×[ys,ys+1][x_s, x_s+1] \times [y_s, y_s+1],目标像素 tt 的坐标范围为 [xt,xt+1]×[yt,yt+1][x_t, x_t+1] \times [y_t, y_t+1]

重叠面积计算(以一维为例):

overlap(xs,xt)=max(0,min(xs+1,xt+1)max(xs,xt))\text{overlap}(x_s, x_t) = \max(0, \min(x_s+1, x_t+1) - \max(x_s, x_t))

在 FFT 加速下,通过频域乘积实现快速计算:

F{fT}=F{fS}F{h}\mathcal{F}\{f_T\} = \mathcal{F}\{f_S\} \cdot \mathcal{F}\{h\}

其中 hh 为等效滤波器的脉冲响应。

计算举例

源图像 2×2 网格:

    y=0           y=1
┌─────────────┬─────────────┐
│   v = 100   │   v = 200   │
│   (0,0)     │   (0,1)     │
├─────────────┼─────────────┤
│   v = 150   │   v = 255   │
│   (1,0)     │   (1,1)     │
└─────────────┴─────────────┘

面积重叠原理:当目标像素 T 由源图像旋转变换而来时,T 的值由其与各源像素的重叠面积加权决定。

T 的面积分配示意:

    ┌─────────────┬─────────────┐
    │  T覆盖v00   │  T覆盖v01   │
    │   25%       │   25%       │
    │   v=100     │   v=200     │
    ├─────────────┼─────────────┤
    │  T覆盖v10   │  T覆盖v11   │
    │   25%       │   25%       │
    │   v=150     │   v=255     │
    └─────────────┴─────────────┘

计算: fT=0.25×100+0.25×150+0.25×200+0.25×255=176.25f_T = 0.25 \times 100 + 0.25 \times 150 + 0.25 \times 200 + 0.25 \times 255 = 176.25

假设目标像素 TT 的几何映射覆盖源像素面积比例为:

  • 覆盖 v00v_{00} 面积的 25%
  • 覆盖 v10v_{10} 面积的 25%
  • 覆盖 v01v_{01} 面积的 25%
  • 覆盖 v11v_{11} 面积的 25%

则: fT=0.25×100+0.25×150+0.25×200+0.25×255=25+37.5+50+63.75=176.25f_T = 0.25 \times 100 + 0.25 \times 150 + 0.25 \times 200 + 0.25 \times 255 = 25 + 37.5 + 50 + 63.75 = 176.25

优缺点与适用场景

优点:

  • 有效抑制摩尔纹(aliasing artifacts)
  • 保持图像能量守恒
  • 理论上最优的重建质量(最小二乘意义下)

缺点:

  • 计算复杂度高,需要计算复杂的多边形面积交集
  • 实现难度大,需要几何变换的精确逆映射
  • 边界处理复杂

适用场景:

  • 医学影像重采样(特别适合 CT、MRI 等灰度连续图像)
  • 需要避免混叠效应的质量要求高的场合
  • 下采样(downsampling)操作
  • 旋转和非正交变换后的重采样

2.5 拉格朗日插值(Lagrange Interpolation)

原理

拉格朗日插值是一种多项式插值方法,通过构造拉格朗日基多项式,在已知数据点上精确拟合一个多项式函数。

对于一维情况,给定 n+1n+1 个点 (x0,y0),(x1,y1),,(xn,yn)(x_0, y_0), (x_1, y_1), \ldots, (x_n, y_n),构造 nn 次拉格朗日多项式:

L(x)=k=0nykk(x)L(x) = \sum_{k=0}^{n} y_k \cdot \ell_k(x)

其中基函数:

k(x)=j=0jknxxjxkxj\ell_k(x) = \prod_{\substack{j=0 \\ j \neq k}}^{n} \frac{x - x_j}{x_k - x_j}

二维情况通过分别对 xxyy 方向应用拉格朗日插值实现。

公式推导

一维拉格朗日基函数

对于节点 x0,x1,,xnx_0, x_1, \ldots, x_n,第 kk 个基函数为:

k(x)=(xx0)(xx1)(xxk1)(xxk+1)(xxn)(xkx0)(xkx1)(xkxk1)(xkxk+1)(xkxn)\ell_k(x) = \frac{(x - x_0)(x - x_1)\cdots(x - x_{k-1})(x - x_{k+1})\cdots(x - x_n)}{(x_k - x_0)(x_k - x_1)\cdots(x_k - x_{k-1})(x_k - x_{k+1})\cdots(x_k - x_n)}

二维张量积拉格朗日插值

m+1m+1xx 方向节点,n+1n+1yy 方向节点:

f(x,y)=k=0ml=0nvk,lk(x)l(y)f(x, y) = \sum_{k=0}^{m} \sum_{l=0}^{n} v_{k,l} \cdot \ell_k(x) \cdot \ell_l(y)

特别地,双线性拉格朗日(2×2 点,m=n=1m=n=1):

0(x)=1x,1(x)=x\ell_0(x) = 1-x, \quad \ell_1(x) = x 0(y)=1y,1(y)=y\ell_0(y) = 1-y, \quad \ell_1(y) = y

展开后与前述双线性插值公式完全一致。

双三次拉格朗日(4×4 点,m=n=3m=n=3)使用三次基函数。

计算举例

一维 3 点拉格朗日插值示例(x0=0,y0=100;x1=1,y1=150;x2=2,y2=200x_0=0, y_0=100; x_1=1, y_1=150; x_2=2, y_2=200):

基函数 k(x)\ell_k(x) 在节点 x0,x1,x2x_0, x_1, x_2 上的特性:

  • k(xk)=1\ell_k(x_k) = 1(在自己节点上为 1)
  • k(xjk)=0\ell_k(x_{j \neq k}) = 0(在其他节点上为 0)

x=0.5 处的基函数值:

  • 0(0.5)=0.375\ell_0(0.5) = 0.375(正值)
  • 1(0.5)=0.75\ell_1(0.5) = 0.75(正值)
  • 2(0.5)=0.125\ell_2(0.5) = -0.125(负值!)

叠加计算:

f(0.5) = 100*0.375 + 150*0.75 + 200*(-0.125)
       = 37.5 + 112.5 - 25
       = 125

计算 x=0.5x=0.5 处插值:

0(0.5)=(0.51)(0.52)(01)(02)=(0.5)(1.5)2=0.752=0.375\ell_0(0.5) = \frac{(0.5-1)(0.5-2)}{(0-1)(0-2)} = \frac{(-0.5)(-1.5)}{2} = \frac{0.75}{2} = 0.375

1(0.5)=(0.50)(0.52)(10)(12)=(0.5)(1.5)1=0.75\ell_1(0.5) = \frac{(0.5-0)(0.5-2)}{(1-0)(1-2)} = \frac{(0.5)(-1.5)}{-1} = 0.75

2(0.5)=(0.50)(0.51)(20)(21)=(0.5)(0.5)2=0.125\ell_2(0.5) = \frac{(0.5-0)(0.5-1)}{(2-0)(2-1)} = \frac{(0.5)(-0.5)}{2} = -0.125

f(0.5)=1000.375+1500.75+200(0.125)=37.5+112.525=125f(0.5) = 100 \cdot 0.375 + 150 \cdot 0.75 + 200 \cdot (-0.125) = 37.5 + 112.5 - 25 = 125

优缺点与适用场景

优点:

  • 数学形式优雅,公式对称
  • 不需要求解线性方程组,直接给出插值多项式
  • 高阶形式可获得高精度

缺点:

  • 高阶多项式容易产生剧烈震荡(Runge 现象)
  • 计算量随阶数增加而急剧增长
  • 边界处可能产生非物理的过冲

适用场景:

  • 低阶(1-3 次)拉格朗日插值用于图像重采样
  • 双线性拉格朗日等价于标准双线性插值
  • 双三次拉格朗日可作为双三次插值的数学等价形式
  • 理论研究和对精度要求不高的场合

2.6 三次样条插值(Cubic Spline Interpolation)

原理

三次样条插值将数据区间分段,在每个子区间上使用三次多项式进行插值,同时保证整体曲线的连续性和光滑性(一阶和二阶导数连续)。

设节点 x0<x1<<xnx_0 < x_1 < \cdots < x_n,在每个子区间 [xi,xi+1][x_i, x_{i+1}] 上构造三次多项式 Si(x)S_i(x),满足:

  1. 插值条件Si(xi)=f(xi)S_i(x_i) = f(x_i)Si(xi+1)=f(xi+1)S_i(x_{i+1}) = f(x_{i+1})
  2. 内部连续Si1(xi)=Si(xi)S_{i-1}(x_i) = S_i(x_i)
  3. 一阶导连续Si1(xi)=Si(xi)S_{i-1}'(x_i) = S_i'(x_i)
  4. 二阶导连续Si1(xi)=Si(xi)S_{i-1}''(x_i) = S_i''(x_i)

边界条件通常使用:

  • 自然边界S0(x0)=Sn1(xn)=0S_0''(x_0) = S_{n-1}''(x_n) = 0
  • 夹紧边界(Clamped):给定端点一阶导数值
  • 周期边界S0(x0)=Sn1(xn)S_0'(x_0) = S_{n-1}'(x_n)S0(x0)=Sn1(xn)S_0''(x_0) = S_{n-1}''(x_n)
公式

在子区间 [xi,xi+1][x_i, x_{i+1}] 上,设 hi=xi+1xih_i = x_{i+1} - x_it=(xxi)/hi[0,1]t = (x - x_i) / h_i \in [0, 1],则三次样条基函数:

Si(x)={Si0(t)t[0,1]0otherwiseS_i(x) = \begin{cases} S_i^0(t) & t \in [0,1] \\ 0 & \text{otherwise} \end{cases}

其中 Si0(t)S_i^0(t) 为三次多项式,可用以下形式表示:

Si0(t)=αi(1t)3+βit(1t)2+γi(1t)t2+δit3S_i^0(t) = \alpha_i (1-t)^3 + \beta_i t(1-t)^2 + \gamma_i (1-t)t^2 + \delta_i t^3

或者采用更常见的表示(以函数值和二阶导为参数):

[xi,xi+1][x_i, x_{i+1}] 上,令 Mi=S(xi)M_i = S''(x_i),则:

Si(x)=Mi(xi+1x)36hi+Mi+1(xxi)36hi+(f(xi)Mihi26)xi+1xhi+(f(xi+1)Mi+1hi26)xxihiS_i(x) = M_i \frac{(x_{i+1}-x)^3}{6h_i} + M_{i+1} \frac{(x-x_i)^3}{6h_i} + \left(f(x_i) - \frac{M_i h_i^2}{6}\right)\frac{x_{i+1}-x}{h_i} + \left(f(x_{i+1}) - \frac{M_{i+1} h_i^2}{6}\right)\frac{x-x_i}{h_i}

计算举例

一维三次样条插值示例,3 个数据点:(0,100),(1,150),(2,200)(0, 100), (1, 150), (2, 200),使用自然边界条件。

分段示意:

    x=0            x=1            x=2
     |              |              |
     o S0(x)       o S1(x)        o
     |              |              |
     |              |              |
----+--------------+--------------+----> x

S0(x) 在 [0,1] 上,S1(x) 在 [1,2] 上
每段是三次多项式,连接处一阶/二阶导连续

步骤 1:计算 h0=1h_0 = 1h1=1h_1 = 1

步骤 2:建立三对角方程组(自然边界 M0=M2=0M_0 = M_2 = 0):

对于 i=1i=1(内部节点):

h0M0+2(h0+h1)M1+h1M2=6(f(x2)f(x1)h1f(x1)f(x0)h0)h_0 M_0 + 2(h_0 + h_1) M_1 + h_1 M_2 = 6\left(\frac{f(x_2)-f(x_1)}{h_1} - \frac{f(x_1)-f(x_0)}{h_0}\right)

代入:1M0+2(1+1)M1+1M2=6(20015011501001)1 \cdot M_0 + 2(1+1) M_1 + 1 \cdot M_2 = 6\left(\frac{200-150}{1} - \frac{150-100}{1}\right)

M0+4M1+M2=6(5050)=0M_0 + 4M_1 + M_2 = 6(50 - 50) = 0

由于 M0=M2=0M_0 = M_2 = 0,得 M1=0M_1 = 0

步骤 3:在 [0,1][0, 1] 区间上构造 S0(x)S_0(x)

M0=0,M1=0,f(0)=100,f(1)=150,h0=1M_0 = 0, M_1 = 0, f(0)=100, f(1)=150, h_0=1

S0(x)=0(1x)36+0x36+(1000)(1x)+(1500)x=100(1x)+150xS_0(x) = 0 \cdot \frac{(1-x)^3}{6} + 0 \cdot \frac{x^3}{6} + \left(100 - 0\right)(1-x) + \left(150 - 0\right)x = 100(1-x) + 150x

S0(x)=100+50xS_0(x) = 100 + 50x

步骤 4:计算 x=0.5x=0.5 处值:S0(0.5)=100+50×0.5=125S_0(0.5) = 100 + 50 \times 0.5 = 125

此结果与线性插值一致,因为三点恰好在一条直线上。

优缺点与适用场景

优点:

  • 高度平滑,一阶、二阶导数连续
  • 收敛性好,不会有剧烈震荡
  • 局部修改只影响相邻区间
  • 广泛应用于工程和图形学

缺点:

  • 需要求解线性方程组,计算量较大
  • 边界条件的选择影响整体形状
  • 实现比双线性等方法复杂

适用场景:

  • 高质量医学图像处理
  • 需要平滑过渡的图像增强
  • 血管、器官边缘等需要保持光滑曲线的场合
  • 信号/图像重建的预处理

3. 算法对比总结

3.1 定量对比表

特性最近邻双线性双三次面积插值拉格朗日三次样条
邻域大小1×12×24×4可变可变4×4
计算复杂度O(1)O(1)O(1)O(n²)O(n²)O(n)
速度最快中等最慢中等
图像质量中等良好优秀取决于阶数优秀
边缘锐度锐利(有锯齿)模糊适中保持良好可能过冲光滑
混叠效应严重轻微轻微最小高阶时严重轻微
平滑性不连续C⁰连续C¹连续C⁰连续C⁰连续C²连续

3.2 适用场景速查

应用场景推荐算法
分类标签图像缩放最近邻
快速预览/实时显示最近邻或双线性
常规诊断图像浏览双线性或双三次
高质量图像显示/打印双三次或三次样条
下采样(缩小)面积插值或双三次
旋转/非正交变换面积插值
需要保持曲线光滑三次样条
需要避免混叠的场合面积插值
分类/分割结果图最近邻(保持标签值)

3.3 医疗影像中的算法选择原则

1. 图像模态考虑

模态推荐方法原因
CT面积插值/双三次灰度连续,需要避免混叠
MRI双三次/三次样条T1/T2加权图像需要平滑过渡
X-Ray双线性或双三次常规显示足够
超声双线性噪声较大,高阶方法优势不明显
PET/SPECT双线性分辨率较低,快速方法足够
分割结果最近邻保持像素值(标签)不变

2. 应用目的考虑

  • 诊断阅读:优先质量,选择双三次或更高
  • 快速筛查:优先速度,选择双线性或最近邻
  • 三维重建:质量优先,层间插值用三次样条
  • 图像配准:中间过程可用双线性,最终结果用高质量方法
  • 放射治疗计划:精度关键,使用面积插值或高阶样条

3. 操作类型考虑

  • 放大(Upscaling):双三次效果良好
  • 缩小(Downscaling):面积插值避免混叠伪影
  • 旋转/仿射变换:面积插值质量最优
  • 层间插值(三维):三次样条或基于切片的二维方法