版本:V1.0.2 | 2026-03-27
用于光场图像/视频的局部放大对比、EPI(极平面图像)提取和残差分析的桌面 GUI 工具。
- 🖼️ 双可视化模式:支持子孔径图像 (SAI) 和微透镜图像 (MLI) 两种可视化模式
- 📐 多方法并排对比:同时显示所有方法的重建结果,支持自适应网格排布
- 🗂️ 三个标签页:SAI/MLI 全图 / 局部放大 / EPI 对比(EPI 仅 SAI 模式可用)
- 🔍 SAI 全图:滚轮同步缩放、鼠标拖拽平移、右键拖拽画框
- 🔢 零填充文件名支持:兼容
1_1.png和013_013.png等命名方式 - 🟥 多矩形框:支持多个放大区域,颜色自动分配或手动 RGB 输入
- 📊 残差图:局部放大区域与 Ground_Truth 做差,jet 伪彩色显示,带全局统一颜色条
- 📈 EPI 提取:水平/垂直方向,指定角度索引和空间位置,裁剪范围可调
- 💾 导出功能:一键导出原始图、标注图、局部放大、残差图、EPI + 参数日志
🐛 Bug 修复
- 🔽 EPI 标签页图像下移:切换 tab 或点击"刷新"后,EPI 图像会逐渐向下偏移。原因是每次刷新时布局末尾的弹性空白(spacer)不断累积。现已修复,每次刷新彻底清空布局后重建。
- ⌨️ 键盘方向键无效:在 SAI 全图标签页中,点击图片后使用 ↑↓←→ 方向键无法平移。原因是点击图片时焦点留在子 Label 上而非父面板。现已修复,点击任意图片后父面板自动获取键盘焦点,方向键和 Home 键均可正常使用。
- 👻 EPI 标签页残留旧图像:在 Tab1/Tab2 关闭 EPI 后切换到 EPI 标签页,仍会显示之前的旧 EPI 图像。现已修复,切换标签页时自动触发刷新。
- 📋 MLI 模式切换时场景下拉框不清空:切换到 MLI 模式但找不到 MLI 场景时,场景下拉框仍显示旧的 SAI 场景名。现已修复,无论是否找到场景均刷新下拉框内容。
- 🔬 纯 MLI 数据集无法识别:数据根目录下方法文件夹仅包含 MLI 图像(无 SAI 子目录结构)时,程序扫描后方法列表为空,MLI 场景也无法显示。现已修复,支持纯 MLI 图像数据集(
Method/Scene.png)和纯 MLI 视频数据集(Method/Scene/frame_XXXX.png)的正确识别与加载。
✨ 改进
- 🎯 鼠标中心缩放:SAI/MLI 全图标签页中,滚轮缩放现在以鼠标所在位置为中心进行放大/缩小,而非固定以左上角为中心,操作更直观自然。
- 📦 Demo 数据集:新增
Demo数据格式/目录,包含 SAI 图像、SAI 视频、MLI 图像、MLI 视频四种格式的示例数据,方便用户快速验证目录结构是否正确。
🆕 新功能
- 🔬 新增微透镜图像 (MLI) 可视化模式,支持光场图像和光场视频(暂定格式)
- 📊 新增残差图功能:局部放大区域与 Ground_Truth 做差,jet 伪彩色显示,带全局统一颜色条(Times New Roman 字体)
- 🔢 支持零填充 SAI 文件名(如
013_013.png),通过目录预扫描映射自动识别 - 🖨️ 新增颜色条 DPI 设置(默认 150),导出时控制颜色条图像分辨率
- 💬 状态栏新增视角切换提示(显示当前 u、v 值)
🐛 Bug 修复
- 修复
on_data_root_changed不响应 MLI 模式的场景列表问题 - 修复 MLI 缓存 key 未包含
mode导致切换数据类型后缓存混淆 - 修复导出日志中帧索引字段名错误(
'frame'→'frame_index') - 修复局部放大 widget 清理逻辑,避免潜在的重复删除
- 🚀 初始版本发布
无需安装 Python 环境,从 Releases 页面下载 LightFieldViewer.exe,双击即可使用。
cd D:\Light_Field_Video\Light_Field_Viewer
python main.pycd D:\Light_Field_Video\Light_Field_Viewer
build.bat
# 生成 dist\LightFieldViewer.exe- Python 3.7+
- PyQt5
- NumPy
- Pillow
- Matplotlib(残差图颜色条渲染)
pip install PyQt5 numpy Pillow matplotlib💡 项目内附
Demo数据格式/目录,包含以下四种格式的完整示例,可直接用软件打开验证。
数据根目录/ # 📂 对应 Demo数据格式/SAI/光场图像/
├── Ground_Truth/
│ └── Scene_001/
│ ├── 01_01.png # {u}_{v}.png(支持零填充: 1_1 / 01_01 / 001_001)
│ ├── 01_02.png
│ ├── ...
│ └── 05_05.png # 5×5 角度分辨率 = 25 张图
├── Method_A/
│ └── Scene_001/
│ ├── 01_01.png
│ └── ...
└── Method_B/
└── ...
数据根目录/ # 📂 对应 Demo数据格式/SAI/光场视频/
├── Ground_Truth/
│ └── Scenes_0001/ # 场景目录
│ ├── frame_0001/ # 帧目录(或 sample_000001/,名称不限)
│ │ ├── 01_01.png
│ │ └── ... # 5×5 = 25 张 SAI
│ ├── frame_0002/
│ │ └── ...
│ └── ...
├── Method_A/
│ └── Scenes_0001/
│ └── frame_0001/
│ └── ...
└── ...
数据根目录/ # 📂 对应 Demo数据格式/MLI/光场图像/
├── Method_A/
│ ├── Bikes.png # 文件名 = 场景名
│ └── Origami.png
├── Proposed/
│ ├── Bikes.png
│ └── Origami.png
└── Ground_Truth/ # 可选
└── ...
数据根目录/ # 📂 对应 Demo数据格式/MLI/光场视频/
├── Ground_Truth/
│ ├── Bikes/ # 场景目录
│ │ ├── frame_0001.png # 帧图像
│ │ ├── frame_0002.png
│ │ └── ...
│ └── Origami/
│ └── ...
├── Method_A/
│ ├── Bikes/
│ │ └── ...
│ └── Origami/
│ └── ...
└── ...
📌 说明:
- 不同方法的帧子目录名可以不同(如
frame_XXXX和sample_XXXXXX),按排序后的位置索引自动对应 - 支持 png、jpg、jpeg、bmp、tif、tiff 等常见图像格式
- 角度分辨率不限定(5×5、7×7、9×9 等均可),在左侧面板设置
以下命名方式均可正确识别,u 和 v 从 1 开始:
| 命名格式 | 示例 | 说明 |
|---|---|---|
{u}_{v}.ext |
1_1.png, 3_5.jpg |
基本格式,无零填充 |
{0u}_{0v}.ext |
01_01.png, 03_05.png |
两位零填充 |
{00u}_{00v}.ext |
001_001.png, 013_013.png |
三位零填充 |
| 任意位数零填充 | 0001_0001.png |
均可正确解析 |
同一目录下的所有 SAI 文件应使用相同的命名格式。程序会自动解析数字部分,零填充不影响识别。
| 命名格式 | 示例 | 说明 |
|---|---|---|
{场景名}.ext |
Bikes.png, Fountain.jpg |
直接放在方法目录下,文件名为场景名 |
在左侧面板最顶部选择可视化模式:
- 子孔径图像 (SAI):查看各视角的子孔径图像,支持 EPI 提取
- 微透镜图像 (MLI):查看微透镜原始图像,支持局部放大对比
- 选择数据类型(光场图像 / 光场视频)
- 点击数据目录的"浏览"按钮,选择数据根目录
- 程序自动扫描所有方法、场景、帧,并检测角度分辨率
- Ground_Truth 会自动排在第一位
- 角度分辨率:默认自动检测,也可手动修改
- 场景:下拉选择(SAI 和 MLI 模式下场景列表可能不同)
- 帧(仅光场视频模式):下拉选择
- 角度坐标 (u, v):选择要查看的视角(仅 SAI 模式)
- 方法:勾选/取消要对比的方法,支持全选/全不选
| 操作 | 说明 |
|---|---|
| 滚轮 | 所有方法同步放大/缩小 |
| 左键拖拽 | 所有方法同步平移 |
| 右键拖拽 | 在图上画矩形框(自动添加到左侧列表) |
| 方向键 ↑↓←→ | 键盘平移(需先点击 SAI 区域获取焦点) |
| Home 键 / 双击 | 重置缩放和平移 |
- 点击**"+ 添加框"或在全图上右键拖拽**添加矩形框
- 每个框自动分配不同颜色(红→绿→蓝→黄→青→品红→循环)
- 在左侧列表中选中框后,可修改坐标 (x, y, w, h)、粗细和 RGB 颜色
- 点击**"- 删除框"**删除选中的框
- SAI 和 MLI 模式下均可使用矩形框进行局部放大
- 勾选**"显示残差图 (与 Ground_Truth 对比)"**启用
- 在局部放大标签页中,每个矩形框区域下方会显示各方法与 Ground_Truth 的残差图
- 残差图使用 jet 伪彩色映射,颜色越暖(红色)表示差异越大
- 颜色条全局统一:同一矩形框内所有方法共享相同的颜色条范围(取所有方法中的最大残差值),确保横向可比
- 需要数据中包含名为
Ground_Truth的方法才能计算残差
- 勾选**"显示 EPI"**启用(MLI 模式下 EPI 设置自动隐藏)
- 选择方向:水平 / 垂直
- 设置参数:
- 角度索引:选择哪一行/列视角提取 EPI(从 1 开始)
- 空间位置:在图像的第几行(水平 EPI)或第几列(垂直 EPI)提取
- 裁剪起始 / 结束:只显示和导出这个范围内的局部 EPI
- 高度拉伸:放大 EPI 的高度方向,方便观察线性结构(1 = 不拉伸)
- SAI 全图上会用蓝色短线段标记 EPI 提取位置(只在裁剪范围内)
- 点击导出目录的"浏览"设置保存路径
- 点击**"导出"**按钮
导出目录结构(SAI 模式):
导出目录/
├── 00_original_sai/ # 原始无标注的 SAI 图
│ ├── Ground_Truth/
│ │ └── Ground_Truth_Scene_f0_3_3.png
│ ├── RIFE/
│ └── ...
├── 01_rect_annotated/ # 带矩形框 + EPI 标记线的 SAI
│ └── ...
├── 02_zoom_crop/ # 局部放大裁剪(带对应颜色边框)
│ └── ...
├── 03_epi_full/ # 完整 EPI
│ └── ...
├── 04_epi_crop/ # 裁剪后的局部 EPI
│ └── ...
├── 05_residual/ # 残差图(带颜色条,jet 伪彩色)
│ └── ...
└── export_log.txt # 参数日志(记录所有设置)
导出目录结构(MLI 模式):
导出目录/
├── 00_original_mli/ # 原始无标注的 MLI 图
│ └── ...
├── 01_rect_annotated_mli/ # 带矩形框的 MLI
│ └── ...
├── 02_zoom_crop/ # 局部放大裁剪(带对应颜色边框)
│ └── ...
├── 05_residual/ # 残差图(带颜色条,jet 伪彩色)
│ └── ...
└── export_log.txt # 参数日志
SAI 文件名格式:方法名_场景_f帧索引_u_v[_后缀].png
MLI 文件名格式:方法名_场景_mli[_后缀].png
Light_Field_Viewer/
├── main.py # 入口
├── config.py # 默认参数配置
├── build.bat # PyInstaller 打包脚本
├── models/
│ ├── light_field_data.py # 目录扫描、SAI/MLI/光场加载
│ ├── rect_annotator.py # 矩形框绘制与裁剪
│ ├── epi_extractor.py # EPI 提取与标记
│ └── residual.py # 残差计算与伪彩色渲染
├── views/
│ ├── main_window.py # 主窗口(左设置 + 右对比)
│ ├── settings_panel.py # 左侧设置面板(含可视化模式、残差开关)
│ └── comparison_panel.py # 右侧三标签页对比面板(含残差图显示)
├── controllers/
│ ├── app_controller.py # 主控制器(SAI/MLI 双模式)
│ └── export_controller.py # 导出控制器(含残差图导出)
└── utils/
├── image_utils.py # 图像工具(格式转换、EPI 拉伸)
└── log_utils.py # 日志工具
| 操作 | 按键/鼠标 | 说明 |
|---|---|---|
| 放大 | 滚轮向上 | 所有方法同步放大(1.25x 步进,最大 20x) |
| 缩小 | 滚轮向下 | 所有方法同步缩小(最小恢复到 1x 全图) |
| 平移 | 左键按住拖拽 | 放大后拖拽移动查看区域,所有方法同步 |
| 平移 | ↑ ↓ ← → | 键盘方向键精细平移(需先点击 SAI 区域获取焦点) |
| 画框 | 右键按住拖拽 | 在 SAI 上拖出矩形框,自动添加到框列表 |
| 重置 | 双击 或 Home 键 | 恢复到无缩放无平移的初始状态 |
| 操作 | 说明 |
|---|---|
| 查看 | 自动显示每个矩形框对应的所有方法裁剪区域 |
| 排布 | 窗口大小变化时自动重新排列网格 |
| 操作 | 说明 |
|---|---|
| 查看 | 所有方法的 EPI 竖向排列,方便上下对比线性结构 |
| 操作 | 说明 |
|---|---|
| 添加框 | 点击 "+ 添加框" 按钮,或在 SAI 上右键拖拽 |
| 删除框 | 选中框后点击 "- 删除框" |
| 修改框 | 选中框后在下方调整 X、Y、W、H、粗细、RGB 颜色 |
| 导出 | 设置导出目录后点击 "导出" 按钮 |
如有 Bug 反馈或功能需求,请联系:
- 📧 邮箱:chenzean2024@126.com
- 💬 微信:18358481590