Skip to content

PIV 粒子图像测速

PIV 从粒子图像对、相关计算到速度矢量场的测量流程图
PIV 的输出是速度矢量场,适合解释流体实验里的流速、涡量和流场结构。

基本原理

PIV(Particle Image Velocimetry)通过分析流体中示踪粒子在连续两帧图像中的位移,计算局部速度矢量。典型方法是把图像分成 interrogation windows,对相邻帧窗口做互相关,找到粒子群的平均位移。

PIV 输出的是速度矢量场,而不是单个目标的位置。后续还可以计算涡量、流线、湍流统计量和流场结构。

解决的问题

流体内部速度场很难用单点传感器完整测量。PIV 解决的是流场可视化和定量测量问题,可用于验证 CFD、研究涡结构、喷流、边界层、微流控和流固耦合。

应用场景

  • 风洞和水槽实验中的速度场测量。
  • 涡结构、尾流、湍流和边界层研究。
  • 喷流、燃烧、微流控和生物流体。
  • CFD 结果验证和模型校准。
  • 流固耦合实验中的速度场和结构响应关联。

Python 库

工具用途
openpiv-pythonPIV 计算、窗口互相关、矢量场处理
PIVlabMATLAB 生态的 PIV 工具,适合作为 GUI 工具参考
opencv-python图像读取、增强和视频处理
numpy / scipy数值处理和滤波
matplotlib速度矢量和流场可视化

最小示例

python
import numpy as np
from openpiv import tools, pyprocess, validation, filters, scaling

frame_a = tools.imread("frame_a.tif").astype(np.int32)
frame_b = tools.imread("frame_b.tif").astype(np.int32)

u, v, sig2noise = pyprocess.extended_search_area_piv(
    frame_a,
    frame_b,
    window_size=32,
    overlap=16,
    dt=0.01,
    search_area_size=64,
    sig2noise_method="peak2peak"
)

x, y = pyprocess.get_coordinates(image_size=frame_a.shape, search_area_size=64, overlap=16)
u, v, mask = validation.sig2noise_val(u, v, sig2noise, threshold=1.3)
u, v = filters.replace_outliers(u, v, method="localmean", max_iter=3, kernel_size=2)
x, y, u, v = scaling.uniform(x, y, u, v, scaling_factor=1.0)

tools.save("velocity.txt", x, y, u, v, mask)

这个示例展示 PIV 的核心流程:读入两帧、互相关、验证、替换异常矢量、保存速度场。

工程流程概览

示踪粒子布置 -> 图像采集 -> 窗口互相关 -> 速度矢量场 -> 异常矢量过滤 -> 物理解释和 CFD 对比。

维知 Wiki · 面向应用工程的 AI 知识与训练系统