You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于体素速度分量获取光流真值的实现问题咨询

从模拟速度分量生成光流真值方案

可以实现,你的模拟速度分量本身就是严格的光流真值,现有代码的问题修复后即可得到正确可视化结果

当前代码的核心问题有3个:

  • 坐标系不匹配:OpenCV的像素坐标系y轴向下为正,物理模拟的速度y分量通常向上为正,直接传入会导致角度计算完全错误,需要先翻转vy符号
  • 归一化逻辑异常:若模拟速度存在离群极值,全局归一化会导致有效速度的亮度被压缩,可通过分位数截断解决
  • 维度顺序需要确认:请先验证你的3D数组维度为(x, y, z, 分量),若维度顺序为(z, y, x, 分量)需要调整vx、vy的取值索引

修正后的可运行代码

import numpy as np
import cv2

data = np.fromfile('Velocity/ns_1000_v.dat', dtype=np.float32)
# 若你的数据维度顺序为(z,y,x,3),请修改reshape参数的顺序
data = np.reshape(data,(128, 128, 128, 3)) 

slice_num = 5 
vx = data[:,:,slice_num,0]
vy = data[:,:,slice_num,1]

# 修正y方向速度符号,匹配图像像素坐标系
vy = -vy

hsv = np.zeros((128,128,3), dtype=np.uint8)
hsv[..., 1] = 255

mag, ang = cv2.cartToPolar(vx, vy)
hsv[..., 0] = ang * 180 / np.pi / 2

# 修正归一化逻辑,截断99分位数以上的离群值避免亮度压缩
mag_max = np.percentile(mag, 99)
mag = np.clip(mag, 0, mag_max)
hsv[..., 2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)

bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
# 输出可视化结果
cv2.imwrite('gt_optical_flow.png', bgr)

对比时的对齐要求

和你基于密度计算的无监督光流做定量对比时,需要满足两个对齐条件:

  • 空间对齐:提取真值的切片位置、分辨率和无监督方案输出的光流完全一致
  • 数值对齐:计算EPE(端点误差)等指标时,两者的速度要使用相同的缩放系数,不能各自独立归一化

内容的提问来源于stack exchange,提问作者gadirohd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:57:01