先限定这个基线解释什么
这是一篇方法回顾,归档月份用于编排主题。讨论的前提是已有证据支持探测器时间滞后,并能获得连续投影或标定序列;它不是针对所有 CT 残影的通用滤镜。
一个简单起点是线性时不变(LTI)模型:每帧观测同时包含当前输入与过去输入的残留。它的价值是参数有明确含义、错误容易追踪。相关研究也指出,响应可能随曝光强度变化,线性模型存在适用边界。Starman 等,2012
因果卷积与边界条件
令 x_t 为希望恢复的信号,y_t 为观测,h_k 为已标定的响应,e_t 为噪声:
y_t = sum(h_k * x_(t-k), k=0...K) + e_t
这里的时间轴是探测器读出帧,不能换成重建后的空间切片轴。输入序列开始之前的状态同样重要:如果前一段曝光仍有残留,直接假设历史为零会把起始误差传播到后续帧。
处理位置也必须与标定定义一致。若响应针对线性探测器读数建立,不能未经推导就搬到负对数后的投影数据上。暗场、增益和对数变换的先后顺序需要固定并记录。
从响应标定到正则化求解
标定应覆盖目标使用条件,并保留独立序列用于验证;不要在同一条尾迹上既拟合又宣布有效。核长度应考虑尾部是否已接近背景,截断太早会遗漏长时间残留。
将卷积写成 y = Hx + e 后,可加入一阶差分约束:
x_hat = argmin_x ||Hx-y||² + alpha * ||Dx||²
下面是便于检查的小规模 NumPy 示例。它假设序列前历史为零、核已经标定、时间间隔一致;稠密矩阵不适合直接处理完整投影体。
import numpy as np
def correct_lag(y, h, alpha):
y = np.asarray(y, dtype=float)
h = np.asarray(h, dtype=float)
if y.ndim != 1 or h.ndim != 1 or len(y) < 2 or not len(h):
raise ValueError("expected a sequence and a nonempty kernel")
if not np.isfinite(y).all() or not np.isfinite(h).all():
raise ValueError("nonfinite input")
if not np.isfinite(alpha) or alpha <= 0 or h[0] == 0:
raise ValueError("invalid regularization or leading response")
n = len(y)
H = np.zeros((n, n))
for k in range(min(len(h), n)):
H += np.diag(np.full(n - k, h[k]), k=-k)
D = np.diff(np.eye(n), axis=0)
A = np.vstack((H, np.sqrt(alpha) * D))
b = np.concatenate((y, np.zeros(n - 1)))
return np.linalg.lstsq(A, b, rcond=None)[0]
参数要由副作用共同约束
正则化太弱,反演可能放大噪声;太强,则会压平真正的时间变化。选择参数时,应同时查看尾迹残留、平稳段噪声、突变位置和校正后的数值范围。不能只最小化一段尾迹上的误差。
求解后还可以用同一个前向模型重新生成观测,检查残差是否集中在曝光切换处、序列开头或特定强度区间。这能帮助定位模型不匹配,但较小的拟合残差不等于真实信号已经恢复;过度灵活的校正也可能拟合噪声。没有独立参考时,应将这两类结论分开。
核的估计也应检查稳定性。若换一个标定片段,参数就发生明显变化,应先排查背景漂移、输入时序和拟合区间。若按探测器区域估计响应,则需检查区域交界处是否引入新的不连续。增加参数前,先确认现有参数确实可由数据约束。
若出现负值或振铃,先检查响应与边界条件,而不是立即裁剪。裁剪可能掩盖模型不匹配,并改变后续对数运算的输入。需要非负约束时,应把它写入优化问题,作为单独方案验证。
基线失败能告诉我们什么
同一个核在不同输入幅度下持续失效,提示需要重新检查线性假设;只有序列开头异常,更应先查历史状态。若响应标定稳定,但重建伪影仍在,问题也可能来自其他环节。
验证时应固定重建设置,并保留未校正分支。本文没有给出任何实测改善幅度;这个基线提供的是一个可解释、能被对照推翻的起点。生产实现还需处理空间响应差异、状态管理和数值稳定性。
参考
- A nonlinear lag correction algorithm for a-Si flat-panel x-ray detectors:线性模型及其曝光相关局限的研究背景。
- NumPy
linalg.lstsq:增广最小二乘示例所用接口。