基于PyTorch设计的全景图合成系统【文末完整工程源码下载】

前言

本项目实现基于PyTorch将多张图片合成为一张全景图。(图像存储路径为/images/1)。

作者:阿齐Archie(联系我+微信公众号:阿齐Archie)

使用的图片为:

合成后为:

这个全景图项目主要由四个文件组成:`task.py`、`stitching.py`、`utils.py` 和 `task.json`。以下是对每个文件的详细总结和软件设计细节的描述。

目录

前言

1. `task.py` 文件

1.1主要功能

1.2代码结构

2.`stitching.py`文件

2.1主要功能

2.2代码结构

3.`utils.py` 文件

3.1主要功能

3.2代码结构

4.`task.json` 文件

效果与总结

工程源码下载


1. `task.py` 文件

`task.py` 是项目的主入口文件,负责解析命令行参数、读取输入图像、调用全景图拼接函数并保存结果。

1.1主要功能

1.解析命令行参数:使用 `argparse` 库解析输入路径、输出路径和 JSON 文件路径。

2.读取输入图像:调用 `utils.read_images` 函数读取指定路径下的图像。

3.调用全景图拼接函数:调用 `stitching.py` 中的 `panorama` 函数进行图像拼接。

4.保存结果:调用 `utils.write_image` 保存拼接后的图像,并将结果保存到 JSON 文件中。

1.2代码结构

from stitching import panoramaimport argparseimport jsonimport osimport sysimport utilsdef parse_args():# 解析命令行参数...def save_results(result_dict, filename):# 保存结果到 JSON 文件...def main():# 主函数...if __name__ == "__main__":main()

2.`stitching.py`文件

`stitching.py` 文件包含全景图拼接的核心算法。使用了 `torch` 和 `kornia` 库进行图像处理和特征匹配。

2.1主要功能

1.图像拼接:通过特征匹配和 RANSAC 算法计算图像之间的变换矩阵,并将图像拼接在一起。

2.计算重叠区域:计算图像之间的重叠区域,用于后续的拼接。

2.2代码结构

import torchimport korniaimport utilsfrom utils import show_imagedef stitch_background(imgs: torch.Tensor) -> torch.Tensor:# 拼接两张图像...def panorama(imgs: torch.Tensor):# 全景图拼接...

3.`utils.py` 文件

`utils.py` 文件包含一些辅助函数,用于图像的读取、显示和保存。

3.1主要功能

1.显示图像:使用 `matplotlib` 库显示图像。

2.读取图像:使用 `torchvision.io` 读取单张图像或目录下的所有图像。

3.保存图像:使用 `torchvision.io` 保存图像。

4.BGR 转 RGB:转换图像的颜色通道。

3.2代码结构

   

 import os, torchimport zipfile, argparseimport matplotlib.pyplot as pltfrom torchvision.transforms import functional as Fimport torchvision.io as iodef show_image(img: torch.Tensor, delay=1000):# 显示图像...def read_image(img_path):# 读取单张图像...def read_images(img_dir):# 读取目录下的所有图像...def write_image(input_image: torch.Tensor, output_path: str):# 保存图像...def bgr_to_rgb(img: torch.Tensor):# BGR 转 RGB...def parse_args():# 解析命令行参数...def files2zip(files: list, zip_file_name: str):# 压缩文件...if __name__ == "__main__":args = parse_args()file_list = ['stitching.py', 'outputs', 'images', 'task2.json', 'bonus.json']files2zip(file_list, 'submission_' + args.ubit + '.zip')

4.`task.json` 文件

`task.json` 文件是一个示例 JSON 文件,存储了图像之间的重叠信息。在这个项目中,它是一个 4x4 的矩阵,每个元素都是 1.0,表示图像之间的完全重叠。

    [[1.0, 1.0, 1.0, 1.0],[1.0, 1.0, 1.0, 1.0],[1.0, 1.0, 1.0, 1.0],[1.0, 1.0, 1.0, 1.0]]

效果与总结

这个全景图项目通过模块化的设计,将图像拼接的各个功能分离到不同的文件中。`task.py` 负责整体流程控制,`stitching.py` 负责核心算法实现,`utils.py` 提供辅助函数,`task.json` 存储图像重叠信息。

工程源码下载

下载链接:基于PyTorch设计的全景图合成系统.rar(完整源码、设计文档,毕设/课设/竞赛/大创/立项/项目开发)资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/m0_61712829/89474677?spm=1001.2014.3001.5503

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支持WebDav的网盘infiniCloud(静读天下,Zotero 等挂载)

前言 WebDav是一种基于HTTP的协议,允许用户在Web上直接编辑和管理文件,如复制、移动、删除等。 尽管有一些网盘支持WebDav,但其中大部分都有较多的使用限制。这些限制可能包括:上传文件的大小限制、存储空间的限制、下载速度的限…

如何打造稳定、好用的 Android LayoutInspector?

速度极慢,遇到复杂的布局经常超时 某些情况无法选中指定的 View 本文将围绕 LayoutInspector 的痛点,分析问题并修复,最终将 LayoutInspector 变成一个稳定、好用的插件。 二、加速 Dump View Hierarchy 2.1 问题描述 开发复杂业务的同学…

Spring Boot + WebSocket 实现 IM 即时通讯

文章目录 1. 项目环境准备2. 配置WebSocket3. 创建消息处理器4. 创建消息类5. 创建前端页面6. 启动应用并测试7. 分析与扩展结论 🎉欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈…

Go语言之基础入门

网站:http://hardyfish.top/ 免费书籍分享: 资料链接:https://url81.ctfile.com/d/57345181-61545511-81795b?p3899 访问密码:3899 免费专栏分享: MySQL是怎样运行的从根儿上理解MySQL 课程链接:https:/…

nn.Embedding 根据索引生成的向量有权重吗

import torch import torch.nn as nn 假设有一个大小为 10x3 的 Embedding 层,其中有 10 个单词,每个单词用一个长度为 3 的向量表示 num_words 10 embedding_dim 3 创建 Embedding 层 embedding_layer nn.Embedding(num_words, embedding_dim) p…

LeetCode 算法:翻转二叉树 c++

原题链接🔗:翻转二叉树 难度:简单⭐️ 题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 …

【Python】已解决:安装python-Levenshtein包时遇到的subprocess-exited-with-error问题

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例及解决方案五、注意事项 已解决:安装python-Levenshtein包时遇到的subprocess-exited-with-error问题 一、分析问题背景 在安装python-Levenshtein这个Python包时,有时会…

godot所有2D节点介绍

五十个2D节点介绍 2D节点介绍 前言一、Node2D二、sprite2D三、AnimatedSprite2D四、Camera2D五、PhysicsBody2D六、 RigidBody2D七、CharacterBody2D八、StaticBody2D九、joint2D十、DampedSpringJoint2D十一、GrooveJoint2D十二、PinJoint2D十三、Area2D十四、AnimatableBody2…

智能优化算法改进策略之局部搜索算子(三)—二次插值法

1、原理介绍 多项式是逼近函数的一种常用工具。在寻求函数极小点的区间(即寻查区间)上,我们可以利用在若干点处的函数值来构成低次插值多项式,用它作为求极小点的函数的近似表达式,并用这个多项式的极小点作为原函数极…

快速业务建模

一句话故事 培训学院进行新季度招生工作,出计划后教务处审批,教学秘书下发计划,班主任手机名单审核后完成计划 用户故事 角色 时间线 动作为动名词 业务建模 多次建模,模型是否能完成业务

高考填报志愿(选专业),怎样找准自己的兴趣?

在很多的高考报考指南中,第一要点,都会建议我们根据自己的兴趣来选择自己的专业。很多人虽然是依据这条规则,选择了自己大学的专业。却依然在学习的过程中发现,好像自己对这个专业并不是那么的有兴趣。 甚至对专业学习深入了解之…

docker部署ClamAV集成java和python实现文件病毒扫描

介绍 官方文档:https://docs.clamav.net/manual/Signatures/DatabaseInfo.html ClamAV 是一个开源的反病毒引擎,它由多个模块组成,负责不同的任务处理。以下是 ClamAV 的主要模块和它们的功能: clamd:clamd 是 Clam…

(done) 关于 GNU/Linux API setenv 的实验

写一个下面的代码来验证 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h>int main() {// 设置环境变量 MY_VAR 的值为 "hello_world"if (setenv("MY_VAR", "hello_world", 1) ! 0…

【数据挖掘】机器学习中相似性度量方法-闵可夫斯基距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

Android简单登录界面布局设计

<ImageView android:id“id/yxlg” android:layout_marginTop“12dp” android:layout_marginLeft“80dp” android:layout_width“30dp” android:layout_height“30dp” android:background“drawable/net” /> <TextView android:paddingTop“5dp” andr…

Go 语言学习笔记之数组与切片

大家好&#xff0c;我是码农先森。 数组与切片的区别 在 Go 语言中&#xff0c;数组和切片是两种不同的数据结构&#xff0c;它们之间有以下主要区别。 参数长度&#xff1a; 数组&#xff08;Array&#xff09;&#xff1a;数组的长度是固定的&#xff0c;在创建时就需要指…

图片覆盖攻击

点击劫持的本质是一种视觉欺骗。顺着这个思路&#xff0c;还有一些攻击方法也可以起到类似的作 用&#xff0c;比如图片覆盖。 一名叫 sven.vetsch 的安全研究者最先提出了这种 Cross Site Image Overlaying 攻击&#xff0c;简称 XSIO。sven.vetsch 通过调整图片的 style 使得…

DVWA-XSS(Stored)-beef

用Low Level来测试beef的使用 beef配置 如果kali没有beef的&#xff0c;进行下载 apt install beef-xss使用 beef-xss # 命令方式启动 beef-xss-stop # 命令方式关闭 systemctl start beef-xss.service #开启beefsystemctl stop beef-xss.service #关闭…

前端 CSS 经典:backface-visibility 属性

前言&#xff1a;backface-visibility 属性可以使反转 180deg 的元素隐藏&#xff0c;使用这个属性实现卡片翻转效果 效果 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta http-equiv"X-…

记MySQL事务+消息队列引起的问题

问题描述&#xff1a; 先说一下流程&#xff1a;后端保存前端提交的图表信息&#xff0c;然后发送异步消息到消息队列&#xff0c;由下游服务去处理图表信息。 部署项目到服务器&#xff0c;验证项目功能的时候&#xff0c;出现了以下错误&#xff1a;数据库存在数据。下游服…