功能简介
立体视觉工作区读取并排摄像头流,分离两个视图,在 OpenCV 可用时应用内置校正配置,并生成探索性灰度深度预览。你可以单独保存立体图像对和深度图像,或将会话文件打包为 ZIP。
仅供探索性深度
深度画布是逐帧可视化,不是校准的原始深度数据。它不保留毫米值,不得直接用于叶片厚度、尺寸计量或独立归一化帧之间的比较。
开始之前
- 连接一个在一帧视频中并排输出左右视图的摄像头。
- 使用 HTTPS 或 localhost,以及支持
MediaDevices、Canvas 和 WebAssembly 的浏览器。 - 仅在选择 Start camera(启动摄像头)后授予摄像头权限;页面不会自动开始捕获。
- 对于内置标定配置,使用原始 1280 × 480 流:每只眼 640 × 480 像素。其他设备或分辨率不受此配置标定。
- 在 OpenCV.js 和 JSZip 从外部 CDN 加载期间保持网络连接可用。
- 预期在实时校正和深度计算期间会有较大的 CPU 和内存使用。
快速流程
- 在 Camera configuration(摄像头配置)下,选择 Video device(视频设备)并设置 Total width(总宽度)和 Height(高度)。
- 输入文件系统安全的 Sample ID(样本 ID)或保持默认
sample前缀。 - 选择 Start camera 并批准浏览器权限请求。
- 检查状态面板。校准校正需要 OpenCV 和成功初始化的校正映射;basic mode(基本模式)仅是回退预览。
- 选择 Capture stereo(捕获立体对)以保存当前左右画布。
- 选择 Compute depth(计算深度),检查灰度结果,然后如果它作为视觉记录有用则选择 Save depth map(保存深度图)。
- 选择 Download ZIP(下载 ZIP)以打包所有捕获的会话文件。
- 在断开摄像头或离开页面之前选择 Stop(停止)。
控件与输出
| 控件 | 当前行为 |
|---|---|
| Video device | 选择一个检测到的摄像头。标签在授予权限前可能保持通用。 |
| Total width / Height | 请求流尺寸。这些值不会创建新的标定配置。 |
| Start camera / Stop | 启动或释放所选媒体流。 |
| Sample ID | 提供捕获文件名中使用的已清理前缀。 |
| Capture stereo | 将左右 PNG 添加到会话 ZIP 并提供单独下载链接。 |
| Compute depth | 从当前图像对计算一个视差衍生的灰度深度可视化。 |
| Save depth map | 将当前灰度深度 PNG 添加到会话。它在深度计算后启用。 |
| Download ZIP | 将内存中的会话下载为 stereo_captures.zip。 |
立体图像对文件名遵循:
sample_stereo_001_left_rectified.png
sample_stereo_001_right_rectified.png
深度文件名遵循:
sample_depth_001_depth_precision.png
文件名描述了预期工作流。确认状态面板报告了正常工作的 OpenCV 校正;回退分割图像可能否则在未经校准重映射的情况下保留 _rectified 后缀。
工作原理
每帧视频被复制到隐藏的 Canvas 并在宽度中点处分割。OpenCV 就绪时,应用使用固定的内参、畸变、旋转和平移值为一个立体装置构建 640 × 480 校正映射,然后重映射两个眼睛图像。
Compute depth 将图像对转换为灰度,并运行 OpenCV StereoBM,使用 64 个视差和 15 像素块。视差使用内置焦距和约 59.94 mm 基线在内部转换,但应用随后将该单帧的有效最小和最大值映射到 0–255。仅显示和保存此归一化图像。
如果 OpenCV 无法加载,应用回退到简单分割和基于浏览器的块匹配。该回退较慢,不是 OpenCV 路径的校准替代。
数据、隐私与外部服务
- 摄像头帧、图像处理、捕获列表和 ZIP 组装保留在浏览器中;应用不上传视频流。
- OpenCV.js 从多个公共 CDN 尝试加载,JSZip 从 jsDelivr 加载。其可用性和策略对本站来说是外部的。
- 捕获仅保留在页面的内存 ZIP 中,直到下载。刷新或离开页面会清除会话。
- 所选摄像头 ID 在本地存储,以便浏览器稍后恢复偏好。
局限性
- 内置标定特定于一个 1280 × 480 并排装置。镜头更换、摄像头移动、对焦更改、尺寸调整或其他设备会使其失效。
- 在配置的焦距、基线和 64 视差搜索下,最近可表示深度约为 0.49 m。因此工作区未配置为 5–30 cm 测量范围。
- 保存的深度 PNG 仅包含相对灰度;它不包含该帧的归一化范围、原始视差、置信度或公制深度。
- 逐帧归一化意味着不同图像中相等的灰度值不一定代表相等的距离。
- 无纹理、反射、重复、遮挡或同步不良的场景可能产生无效匹配。
- 实时重映射和回退匹配器在移动或低功耗硬件上可能较慢。
- 不提供标定编辑器、原始深度导出、点云、叶片轮廓或厚度分析。
排障
| 问题 | 应检查什么 |
|---|---|
| 未列出摄像头 | 连接设备,使用 HTTPS,授予权限,并在浏览器显示标签后重新打开设备列表。 |
| 摄像头访问失败 | 关闭其他摄像头应用程序,检查站点权限,并再次尝试 Start camera。 |
| 两个眼睛视图未对齐 | 确认并排顺序,请求 1280 × 480,并验证物理装置与内置标定匹配。 |
| 状态报告基本模式 | 检查网络并重新加载以便 OpenCV.js 初始化;不要将回退输出视为已校准。 |
| 深度大部分为黑色或有噪声 | 改善纹理和漫射照明,减少反射,保持两只眼睛同步,并避免遮挡。 |
| Save depth map 不可用 | 先启动摄像头并完成 Compute depth。 |
| ZIP 下载不可用 | 至少捕获一对立体图像或深度图,并确保 JSZip CDN 已加载。 |
| 页面无响应 | 停止流,降低分辨率,关闭其他重度标签页,并避免在低功耗设备上使用基本回退。 |
