Skip to content

chenzean/Light_Field_Viewer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔭 Light Field Viewer — 光场图像查看器 (V1.0.2)

版本:V1.0.2 | 2026-03-27

用于光场图像/视频的局部放大对比EPI(极平面图像)提取残差分析的桌面 GUI 工具。

✨ 功能概览

  • 🖼️ 双可视化模式:支持子孔径图像 (SAI) 和微透镜图像 (MLI) 两种可视化模式
  • 📐 多方法并排对比:同时显示所有方法的重建结果,支持自适应网格排布
  • 🗂️ 三个标签页:SAI/MLI 全图 / 局部放大 / EPI 对比(EPI 仅 SAI 模式可用)
  • 🔍 SAI 全图:滚轮同步缩放、鼠标拖拽平移、右键拖拽画框
  • 🔢 零填充文件名支持:兼容 1_1.png013_013.png 等命名方式
  • 🟥 多矩形框:支持多个放大区域,颜色自动分配或手动 RGB 输入
  • 📊 残差图:局部放大区域与 Ground_Truth 做差,jet 伪彩色显示,带全局统一颜色条
  • 📈 EPI 提取:水平/垂直方向,指定角度索引和空间位置,裁剪范围可调
  • 💾 导出功能:一键导出原始图、标注图、局部放大、残差图、EPI + 参数日志

🗂️ 更新日志

🔧 V1.0.2(2026-03-27)

🐛 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 视频四种格式的示例数据,方便用户快速验证目录结构是否正确。

✨ V1.0.1(2026-03-27)

🆕 新功能

  • 🔬 新增微透镜图像 (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 清理逻辑,避免潜在的重复删除

🎉 V1.0.0(2026-03-25)

  • 🚀 初始版本发布

🚀 运行方式

方式一:直接双击 exe 运行(推荐)

无需安装 Python 环境,从 Releases 页面下载 LightFieldViewer.exe,双击即可使用。

方式二:Python 源码运行

cd D:\Light_Field_Video\Light_Field_Viewer
python main.py

方式三:打包为 exe

cd 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数据格式/ 目录,包含以下四种格式的完整示例,可直接用软件打开验证。

🖼️ 子孔径图像 SAI(选择"子孔径图像 (SAI)"模式)

光场图像(选择"光场图像"数据类型)

数据根目录/                        # 📂 对应 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/
│           └── ...
└── ...

🔬 微透镜图像 MLI(选择"微透镜图像 (MLI)"模式)

光场图像

数据根目录/                        # 📂 对应 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_XXXXsample_XXXXXX),按排序后的位置索引自动对应
  • 支持 png、jpg、jpeg、bmp、tif、tiff 等常见图像格式
  • 角度分辨率不限定(5×5、7×7、9×9 等均可),在左侧面板设置

🏷️ 文件命名兼容性

SAI 子孔径图像命名

以下命名方式均可正确识别,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 文件应使用相同的命名格式。程序会自动解析数字部分,零填充不影响识别。

MLI 微透镜图像命名

命名格式 示例 说明
{场景名}.ext Bikes.png, Fountain.jpg 直接放在方法目录下,文件名为场景名

📖 使用说明

1. 🖥️ 选择可视化模式

在左侧面板最顶部选择可视化模式

  • 子孔径图像 (SAI):查看各视角的子孔径图像,支持 EPI 提取
  • 微透镜图像 (MLI):查看微透镜原始图像,支持局部放大对比

2. 📂 加载数据

  1. 选择数据类型(光场图像 / 光场视频)
  2. 点击数据目录的"浏览"按钮,选择数据根目录
  3. 程序自动扫描所有方法、场景、帧,并检测角度分辨率
  4. Ground_Truth 会自动排在第一位

3. ⚙️ 选择参数

  • 角度分辨率:默认自动检测,也可手动修改
  • 场景:下拉选择(SAI 和 MLI 模式下场景列表可能不同)
  • (仅光场视频模式):下拉选择
  • 角度坐标 (u, v):选择要查看的视角(仅 SAI 模式)
  • 方法:勾选/取消要对比的方法,支持全选/全不选

4. 🔍 SAI / MLI 全图标签页

操作 说明
滚轮 所有方法同步放大/缩小
左键拖拽 所有方法同步平移
右键拖拽 在图上画矩形框(自动添加到左侧列表)
方向键 ↑↓←→ 键盘平移(需先点击 SAI 区域获取焦点)
Home 键 / 双击 重置缩放和平移

5. 🟥 矩形框管理

  • 点击**"+ 添加框"或在全图上右键拖拽**添加矩形框
  • 每个框自动分配不同颜色(红→绿→蓝→黄→青→品红→循环)
  • 在左侧列表中选中框后,可修改坐标 (x, y, w, h)、粗细和 RGB 颜色
  • 点击**"- 删除框"**删除选中的框
  • SAI 和 MLI 模式下均可使用矩形框进行局部放大

6. 📊 残差图

  1. 勾选**"显示残差图 (与 Ground_Truth 对比)"**启用
  2. 在局部放大标签页中,每个矩形框区域下方会显示各方法与 Ground_Truth 的残差图
  3. 残差图使用 jet 伪彩色映射,颜色越暖(红色)表示差异越大
  4. 颜色条全局统一:同一矩形框内所有方法共享相同的颜色条范围(取所有方法中的最大残差值),确保横向可比
  5. 需要数据中包含名为 Ground_Truth 的方法才能计算残差

7. 📈 EPI 设置(仅 SAI 模式)

  1. 勾选**"显示 EPI"**启用(MLI 模式下 EPI 设置自动隐藏)
  2. 选择方向:水平 / 垂直
  3. 设置参数:
    • 角度索引:选择哪一行/列视角提取 EPI(从 1 开始)
    • 空间位置:在图像的第几行(水平 EPI)或第几列(垂直 EPI)提取
    • 裁剪起始 / 结束:只显示和导出这个范围内的局部 EPI
    • 高度拉伸:放大 EPI 的高度方向,方便观察线性结构(1 = 不拉伸)
  4. SAI 全图上会用蓝色短线段标记 EPI 提取位置(只在裁剪范围内)

8. 💾 导出

  1. 点击导出目录的"浏览"设置保存路径
  2. 点击**"导出"**按钮

导出目录结构(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            # 日志工具

⌨️ 快捷键与操作

🖼️ SAI 全图标签页

操作 按键/鼠标 说明
放大 滚轮向上 所有方法同步放大(1.25x 步进,最大 20x)
缩小 滚轮向下 所有方法同步缩小(最小恢复到 1x 全图)
平移 左键按住拖拽 放大后拖拽移动查看区域,所有方法同步
平移 ↑ ↓ ← → 键盘方向键精细平移(需先点击 SAI 区域获取焦点)
画框 右键按住拖拽 在 SAI 上拖出矩形框,自动添加到框列表
重置 双击Home 键 恢复到无缩放无平移的初始状态

🔍 局部放大标签页

操作 说明
查看 自动显示每个矩形框对应的所有方法裁剪区域
排布 窗口大小变化时自动重新排列网格

📈 EPI 对比标签页

操作 说明
查看 所有方法的 EPI 竖向排列,方便上下对比线性结构

🎛️ 左侧设置面板

操作 说明
添加框 点击 "+ 添加框" 按钮,或在 SAI 上右键拖拽
删除框 选中框后点击 "- 删除框"
修改框 选中框后在下方调整 X、Y、W、H、粗细、RGB 颜色
导出 设置导出目录后点击 "导出" 按钮

📬 反馈与联系

如有 Bug 反馈或功能需求,请联系:

About

A Tool for Visual Comparison and Local Zoom-in of Light Field Images across Different Methods

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors