光学系统不再追求完美成像,而是精心设计"可控缺陷",让算法来完成最后的拼图。这不是妥协,而是一场成像范式的革命,正在工业检测领域掀起风暴。
自1839年达盖尔银版法问世以来,光学成像的范式从未根本改变:光学系统追求极致完美,数字算法仅作锦上添花。这种“先采集后处理”(Capture-then-Process)的架构建立在两个核心假设之上:
然而,这一范式正面临物理定律的硬约束,而在工业检测场景中,这些约束直接转化为产线效率的瓶颈和检测精度的天花板。
根据阿贝衍射极限(Abbe Diffraction Limit),传统光学系统的分辨率存在理论下界:

其中λ为光波长,NA为数值孔径。对于可见光(λ≈550nm\lambda \approx 550\text{nm}λ≈550nm)和高NA物镜,极限分辨率约为200nm。这意味着在半导体晶圆检测中,传统光学显微镜无法分辨更小的制程缺陷,工程师不得不依赖昂贵的电子显微镜进行抽检,而非全检。
更严峻的是不可能三角(Impossible Trinity):在成像系统中,高分辨率、大景深、紧凑体积三者不可兼得。
| 工业场景 | 传统方案的两难困境 | 代价 |
|---|---|---|
| PCB缺陷检测 | 高分辨率需要大光圈,但大光圈导致景深极浅,无法覆盖板面起伏 | 需机械扫描对焦,检测速度降低10倍 |
| 金属表面检测 | 长工作距离需要长焦距镜头,体积庞大且成本高 | 无法集成到机械臂末端 |
| 焊接质量监控 | 焊接弧光极亮(>10⁶ cd/m²),周围金属较暗(<10² cd/m²) | 传统相机要么过曝要么欠曝 |
| 3C产品外观检测 | 高反光表面产生镜面反射,遮挡真实缺陷 | 需复杂多角度照明+多次拍摄 |

图1:传统成像 vs 波前编码成像的PSF与MTF对比
图1展示了传统成像与计算光学中波前编码技术的本质差异。传统成像的点扩散函数(PSF)随离焦量急剧展宽,导致调制传递函数(MTF)迅速下降;而波前编码通过三次相位板将PSF编码为离焦不变的特定图案,虽然光学MTF较低,但可通过算法稳定恢复,实现"大光圈+大景深"的兼得。
计算光学(Computational Optics)颠覆了这一传统范式。它不再将光学系统视为"完美记录设备",而是将其设计为信息编码器——通过主动引入可控的光学调制,将高维场景信息编码为可测量的低维信号,再通过算法解码重建。
核心定义:计算光学是一种联合设计光学调制传递函数(MTF)与信号重建算法的成像范式,其本质是光学编码 + 算法解码的端到端优化系统。
用数学语言描述,传统成像的前向模型为:
y=Hideal⋅x+n\mathbf{y} = \mathbf{H}_{\text{ideal}} \cdot \mathbf{x} + \mathbf{n} y=Hideal⋅x+n
其中 Hideal\mathbf{H}_{\text{ideal}}Hideal 逼近理想冲激响应。而计算光学的前向模型为:

其中φ为可设计的编码参数(如相位板形状、掩膜图案、照明模式等)。重建过程则转化为逆问题求解:

这里 R(x)\mathcal{R}(\mathbf{x})R(x) 为正则化项,可引入深度学习先验。
Python伪代码:计算光学前向模型与重建框架
import numpy as np
import torch
import torch.nn as nn
from scipy.signal import convolve2d
class ComputationalOpticsModel:
def __init__(self, psf_size=256):
"""
计算光学成像模型
psf_size: 点扩散函数尺寸
"""
self.psf_size = psf_size
def optical_encoding(self, scene, phase_mask_params):
"""
光学编码过程:模拟波前编码成像
scene: 输入场景 (H, W)
phase_mask_params: 相位板参数,如三次相位板系数 alpha
"""
# 生成离焦不变的点扩散函数(PSF)
# 基于三次相位板理论:phi(x,y) = alpha * (x^3 + y^3)
x = np.linspace(-1, 1, self.psf_size)
X, Y = np.meshgrid(x, x)
# 三次相位板引入的相位调制
alpha = phase_mask_params['alpha']
phase_mask = alpha * (X**3 + Y**3)
# 计算离焦PSF(简化模型)
defocus_range = phase_mask_params['defocus_range']
psf_stack = []
for defocus in defocus_range:
# 广义光瞳函数 = 孔径函数 * exp(i*(相位板 + 离焦相位))
pupil = np.exp(1j * (phase_mask + defocus * (X**2 + Y**2)))
# PSF是光瞳函数的傅里叶变换的模平方
psf = np.abs(np.fft.fftshift(np.fft.fft2(pupil)))**2
psf = psf / np.sum(psf) # 归一化
psf_stack.append(psf)
# 对不同深度进行卷积(简化:假设场景深度分层)
encoded_image = np.zeros_like(scene, dtype=np.float32)
for i, psf in enumerate(psf_stack):
layer = scene * (i + 1) / len(psf_stack) # 模拟深度分层
encoded_image += convolve2d(layer, psf, mode='same', boundary='fill')
return encoded_image, np.array(psf_stack)
def algorithmic_decoding(self, encoded_image, psf_stack, method='wiener'):
"""
算法解码:从编码图像恢复清晰场景
"""
if method == 'wiener':
# 维纳滤波(简化版)
decoded = self._wiener_deconv(encoded_image, psf_stack[0])
elif method == 'unet':
# 基于深度学习的重建(ResUnet++示例)
decoded = self._deep_reconstruction(encoded_image)
return decoded
def _wiener_deconv(self, blurred, psf, K=0.01):
"""维纳反卷积基础实现"""
psf_fft = np.fft.fft2(psf, s=blurred.shape)
blurred_fft = np.fft.fft2(blurred)
# 维纳滤波器
wiener_filter = np.conj(psf_fft) / (np.abs(psf_fft)**2 + K)
decoded = np.fft.ifft2(blurred_fft * wiener_filter).real
return decoded
# 使用示例:模拟PCB检测场景
model = ComputationalOpticsModel(psf_size=128)
scene = np.random.rand(512, 512) # 模拟PCB场景
# 光学编码:使用三次相位板,alpha=20,覆盖10个离焦位置(对应PCB起伏±2mm)
params = {
'alpha': 20,
'defocus_range': np.linspace(-5, 5, 10)
}
encoded, psfs = model.optical_encoding(scene, params)
# 算法解码:从编码图像恢复全清晰图像
recovered = model.algorithmic_decoding(encoded, psfs, method='wiener')
计算光学的兴起源于三大技术驱动力,每一项都直击工业检测的痛点:
(1)突破衍射极限(Super-Resolution)
传统光学受限于阿贝极限,但计算光学通过结构光照明显微镜(SIM)、傅里叶叠层成像(Fourier Ptychography)等技术,已实现深亚埃级分辨率(0.39 Å)。在半导体晶圆检测中,这意味着可用可见光系统分辨7nm制程的关键缺陷,而无需依赖电子显微镜。
核心思想:放弃对“完美光学”的追求,转而采集冗余编码测量,通过求解逆问题突破物理极限。
(2)系统轻薄化与成本降低(Form Factor Reduction)
波前编码(Wavefront Coding)技术通过在孔径光阑处插入三次相位板(Cubic Phase Plate),使光学系统对离焦不敏感。这意味着:
(3)高维信息获取(High-Dimensional Sensing)
传统相机仅记录二维空间-强度信息(x, y, I),而计算光学可扩展至:
表1:传统工业视觉方案 vs 计算光学方案对比
| 维度 | 传统方案 | 计算光学方案 | 工业价值 |
|---|---|---|---|
| 分辨率 | 受限于阿贝极限 (~200nm) | 叠层成像可达0.39Å | 检测更小缺陷,提升良率 |
| 景深 | 与光圈大小 Trade-off | 波前编码扩展10-20倍 | 单次拍摄全清晰,速度提升10x |
| 系统厚度 | 多镜片组(>50mm) | 单透镜+相位板(<10mm) | 集成到机械臂,产线布局灵活 |
| 光谱维度 | 扫描式(耗时) | 快照式编码(单帧) | 实时材质分类,在线检测 |
| 相位信息 | 干涉仪(复杂、昂贵) | 强度传播方程(简单) | 透明缺陷检测,应力分析 |
| 成本 | 精密抛光镜片(高) | 低成本塑料+算法(低) | 降低硬件成本,算法可迭代升级 |
计算光学并非单一技术,而是一个跨学科的技术家族。依据成像流程与信息维度,可划分为四大主要分支,每一分支都对应着工业检测的特定场景:

图2:计算光学在工业检测中的典型应用场景
图2展示了计算光学在四大工业检测场景中的应用:PCB缺陷检测利用波前编码实现大景深高分辨率成像;金属表面检测通过光度立体视觉重建微观形貌;焊接质量检测借助HDR成像捕捉极端对比场景;半导体晶圆检测则通过傅里叶叠层显微实现超分辨率突破。

图3:计算光学技术谱系与工业检测应用映射
本系列文章将围绕四大技术分支展开,每一分支对应特定的工业检测价值:相机几何模型解决三维重建与定位问题;光度成像模型实现表面质量检测;HDR成像处理极端光照场景;超分辨率成像突破物理分辨率极限。
面向三维测量与定位,核心技术包括:
Shree K. Nayar在其经典综述中系统分类了计算摄影的技术体系[1],强调软件与硬件的协同设计是提升成像质量的关键路径。在工业场景中,这意味着相机模型不再是简单的针孔模型,而是需要考虑镜头畸变、透视变形、非线性标定等复杂因素。
主动控制照明模式以解耦表面属性,包括:
Laura Waller团队的开创性工作证明,通过相位恢复算法与编码照明联合设计,可用“廉价而粗糙”的光学硬件达到昂贵精密显微镜的效果[2]。
解决极端光照对比场景的成像问题:
突破传感器像素限制与光学衍射极限:
为了深入理解计算光学在工业检测中的应用,必须掌握三个核心概念:
PSF描述光学系统对理想点源的响应。在计算光学中,PSF不再是“越窄越好”,而是被设计为具有特定编码特性:
Python代码:生成并可视化波前编码PSF
import numpy as np
import matplotlib.pyplot as plt
def generate_wavefront_coding_psf(size=256, alpha=20, defocus=0):
"""
生成三次相位板的点扩散函数
alpha: 相位板强度系数(控制编码强度)
defocus: 离焦量(波长单位)
"""
# 坐标网格(归一化到[-1,1])
x = np.linspace(-1, 1, size)
X, Y = np.meshgrid(x, x)
R = np.sqrt(X**2 + Y**2)
# 圆形孔径(硬边)
aperture = (R <= 1).astype(float)
# 三次相位板 + 离焦相位(抛物面)
phase_cubic = alpha * (X**3 + Y**3)
phase_defocus = defocus * (X**2 + Y**2)
total_phase = phase_cubic + phase_defocus
# 广义光瞳函数 = 孔径 * 相位调制
pupil = aperture * np.exp(1j * total_phase)
# PSF = |FFT(光瞳函数)|^2
psf = np.abs(np.fft.fftshift(np.fft.fft2(pupil)))**2
psf = psf / np.sum(psf) # 能量归一化
return psf
def plot_psf_comparison():
"""对比传统与波前编码PSF随离焦的变化"""
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
defocus_values = [0, 2, 4] # 不同离焦量(对应工业场景中的高度起伏)
size = 256
# 传统成像(无相位编码,alpha=0)
for i, df in enumerate(defocus_values):
psf_trad = generate_wavefront_coding_psf(alpha=0, defocus=df)
axes[0, i].imshow(psf_trad, cmap='hot', extent=[-1, 1, -1, 1])
axes[0, i].set_title(f'传统成像 | 离焦={df}\n(α=0)', fontsize=11, fontweight='bold')
axes[0, i].axis('off')
# 计算并显示MTF
mtf = np.abs(np.fft.fftshift(np.fft.fft2(psf_trad)))
axes[0, i].text(0.5, -0.15, f'MTF(0)={mtf[size//2, size//2]:.2f}',
transform=axes[0, i].transAxes, ha='center', fontsize=9)
# 波前编码成像(alpha=30)
for i, df in enumerate(defocus_values):
psf_wfc = generate_wavefront_coding_psf(alpha=30, defocus=df)
axes[1, i].imshow(psf_wfc, cmap='viridis', extent=[-1, 1, -1, 1])
axes[1, i].set_title(f'波前编码 | 离焦={df}\n(α=30)', fontsize=11, fontweight='bold')
axes[1, i].axis('off')
mtf = np.abs(np.fft.fftshift(np.fft.fft2(psf_wfc)))
axes[1, i].text(0.5, -0.15, f'MTF(0)={mtf[size//2, size//2]:.2f}',
transform=axes[1, i].transAxes, ha='center', fontsize=9)
plt.suptitle('工业检测场景:传统成像 vs 波前编码成像的离焦稳定性对比',
fontsize=16, y=1.02, fontweight='bold')
plt.tight_layout()
return fig
# 运行可视化
fig = plot_psf_comparison()
plt.show()
MTF是PSF的傅里叶变换模值,表征系统对不同空间频率的传递能力。计算光学的核心洞见是:
光学MTF与算法MTF的乘积才是系统总MTF。
通过允许光学MTF在中高频段适度下降(但保持可预测性),算法可通过反卷积或深度学习网络恢复高频信息,最终系统MTF可超越纯光学极限。在工业检测中,这意味着:
当仅测量光强而丢失相位时(如透明材料检测、X射线成像),需通过相位恢复算法重建光场。经典算法包括:
Python伪代码:GS算法基础实现
def gerchberg_saxton(measured_intensity, initial_guess, iterations=100):
"""
经典GS相位恢复算法
适用于:透明缺陷检测、X射线相位成像、全息重建
参数:
measured_intensity: 观测平面强度测量值 sqrt(I)
initial_guess: 初始相位估计
"""
amplitude_obj = np.sqrt(measured_intensity)
phase = initial_guess
for i in range(iterations):
# 当前估计:振幅约束
estimate = amplitude_obj * np.exp(1j * phase)
# 傅里叶变换到频域(模拟传播)
spectrum = np.fft.fft2(estimate)
magnitude_ft = np.abs(spectrum)
phase_ft = np.angle(spectrum)
# 频域约束:例如有限带宽或已知频谱幅度
# 这里简化处理
# 逆傅里叶变换回空域
estimate_new = np.fft.ifft2(spectrum)
amplitude_new = np.abs(estimate_new)
phase = np.angle(estimate_new)
# 空域约束:替换为测量幅度
# 计算误差监控收敛
if i % 10 == 0:
error = np.sum((amplitude_new - amplitude_obj)**2)
print(f"Iteration {i}, Error: {error:.4f}")
return amplitude_new * np.exp(1j * phase)
《计算成像》系列将深入探索计算光学的核心技术栈,每一篇都紧密结合工业检测的实际需求:
第二篇:《相机几何模型:从针孔到多目立体视觉》
第三篇:《光度成像模型:当光照成为编码器》
第四篇:《光度立体视觉:超越2D的缺陷检测》
第五篇:《高动态范围成像:征服极端光照》
第六篇:《超分辨率成像:突破像素的边界》
计算光学代表了一场成像范式革命:从“硬件完美主义”转向“算法增强主义”。正如Laura Waller所言:“我们可以用‘廉价而粗糙’的光学实现昂贵精密显微镜的效果——关键在于软硬件的联合设计。”[2:1]
这一转变与工业4.0的演进异曲同工。当光学系统不再是物理约束的被动接受者,而是信息编码的主动设计者时,分辨率的极限、景深的束缚、体积的约束都将被重新定义。
对于工业视觉工程师而言,计算光学开辟了一片新疆域:成像不再是前端黑箱,而是可微分、可优化、可学习的计算图层。当检测算法不再受限于传统相机的“所见即所得”,而是能够解码三维形貌、表面法线、材质光谱的丰富信息时,下一代工业智能检测系统的真正潜力将被释放。
从“看得清”到“看得懂”,从“二维像素”到“多维信息”,计算光学正在重塑工业视觉的边界。
Nayar, S. K. (2006). Computational cameras: Redefining the image. IEEE Computer, 39(8), 30-38. (计算摄影奠基性综述) ↩︎
Waller, L., & Tian, L. (2015). Computational imaging: Machine learning for 3D microscopy. Nature, 523(7561), 416-423. (Laura Waller团队关于计算显微的经典工作) ↩︎ ↩︎
Gerchberg, R. W., & Saxton, W. O. (1972). A practical algorithm for the determination of phase from image and diffraction plane pictures. Optik, 35, 237-246. (相位恢复经典算法) ↩︎