目录

全景图像拼接

计算机视觉课程实验一(大三下):从零实现多条拼路径的全景拼接流水线,覆盖线性链、闭合环、网状视图与固定视点球面扫描。

任务背景

实现一套能处理多种拓扑的全景图像拼接流水线。按实验要求,RANSAC 与 image warping 全部手写,不调用 OpenCV 的 findHomography、warpPerspective 或 cv2.Stitcher 成品接口;特征检测(SIFT)、描述子匹配、数值优化与基础图像算子使用 OpenCV、NumPy、SciPy。

在 12 个公开数据集(plain / 360° / casual / hard 四类)之外,另用 4 组自制 Minecraft 固定视点蛇形截图检验算法在重复方块纹理、弱纹理天空、首尾闭合条件下的鲁棒性。整体按”基线建立 → 失败诊断 → 几何与融合改进 → 分层验证 → 球面扩展”的顺序迭代出 v2 版本。

内容结构

路径 说明
main.py CLI 入口,顶部带全代码带读注记
panorama/io_utils.py 读图与中文路径 IO(np.fromfile + cv2.imdecode)
panorama/features.py SIFT + BFMatcher + Lowe 比率 + 双向交叉校验
panorama/ransac.py 手写 RANSAC + 归一化 DLT 单应估计(numba 加速)
panorama/center_detect.py 四指标加权排名自动选拼接中心
panorama/graph.py 最大生成树 + 从中心 BFS 的拼接顺序
panorama/bundle_adjustment.py 相似变换参数化光束法平差,多轮剔粗差
panorama/warping.py 手写后向映射 + 双线性插值 warp
panorama/blending.py 羽化 / 多频带 / DP 接缝融合
panorama/cylindrical.py 360° 圆柱投影、平移链与闭合环推断
panorama/spherical.py 球面投影、旋转估计与姿态图
panorama/stitcher.py flat / cylindrical / spherical 三模式编排
panorama/visualize.py 特征点与匹配可视化
data-all/**/ 各数据集拼接图真值 *-STITCH-GRAPH.txt(轻量文本)
outputs/**/summary.txt 各数据集一次运行的汇总文本(中心、拼接顺序、内点数)
验收答辩指南.md 按评分标准逐条对应到 文件:函数 的答辩讲稿
pyproject.toml / uv.lock uv 项目配置(锁定依赖不含 cv2/numba/tqdm,见下)

原始图片数据集与输出图片(jpg/png)、实验报告 docx、课件 pptx 均未入库;公开数据集(APAP、AANAP、DHW、NISwGSP 系列)需自行下载放入 data-all/{plain,360,casual,hard}/<dataset>/。

运行方法

Python ≥ 3.11。实际 import 的依赖:numpy、opencv-python、scipy、numba、tqdm、psutil(pyproject.toml 仅声明了其中一部分,建议直接 pip 安装全表):

pip install numpy opencv-python scipy numba tqdm psutil

# 单数据集(平面模式 + 羽化融合)
python main.py --dataset APAP-conssite --category plain --mode flat --blend feather

# 全部数据集
python main.py --all

# 网状数据集启用多轮 Bundle Adjustment
python main.py --dataset NISwGSP-08_SienaCathedralLibrary3 --category hard --mode flat --blend seam --ba --ba-rounds 3

# Minecraft 固定视点球面模式(游戏 FOV=70,16:9 水平视场 102.4°)
python main.py --dataset MCPVZ-Lawn --category own --mode spherical --spherical-hfov 102.4

输出写入 outputs/<dataset>/:panorama.jpg、summary.txt 与若干 vis_*.jpg 中间图。

来源声明

  • 课程提供的实验框架与数据集清单(实验一课件)仅用于明确任务要求,仓库内全部算法代码为本人独立实现。
  • 数据集图片来自 APAP / AANAP / DHW / NISwGSP 等公开论文数据集;data-all/own 的 Minecraft 截图为本人自制。
  • 融合与投影思路参考 Efros & Freeman 2001(接缝法)、Burt & Adelson 1983(多频带)与 Hartley & Zisserman《Multiple View Geometry》(归一化 DLT、RANSAC),实现均为手写。
关于

计算机视觉实验一:从零实现全景拼接(SIFT 筛选、手写 RANSAC、归一化 DLT、圆柱投影、羽化融合)

144.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号