基于双经度模型的鱼眼图像畸变校正

news2024/11/18 6:33:09

文章目录

    • 1. 简介
    • 2. 基本原理
      • 基本思路
      • 从目标图到半球面模型的投影
      • 从半球面模型到鱼眼图像的投影
        • 正交投影
        • 等距投影
    • 3.实际效果示例
      • 论文中的原图去畸变
    • 4. 有意思的玩法
      • 5. 对生成的鱼眼图去畸变

1. 简介

算法来自论文《基于双经度模型的鱼眼图像畸变矫正方法》

2. 基本原理

在这里插入图片描述

基本思路

去畸变需要建立一个投影链路,这里是从目标图(最终要得到的去畸变的图)到半球面模型的投影,再从半球面模型到鱼眼图投影。目标图的ij坐标转换为半球面模型上的经度值(类比地球经纬度描述表面位置),半球面模型到鱼眼图的投影有多种方式,这里采用的正交投影和等距投影。目标图到半球面再到鱼眼图上都是一一对应的。

从目标图到半球面模型的投影

α \alpha α为y方向的经度值, β \beta β为x方向的经度值,经度值范围 [ 0 , π ] [0,\pi] [0,π]
下面的公式5 6就建立了从目标图到半球面的坐标的一一对应关系
在这里插入图片描述

在这里插入图片描述
注意:这里的公式有点问题,z一定是正数,但是x,y却不一定,忽略x,y的符号会导致最终得到一个只有一个象限的图,看起来像是一朵四片重复的花瓣的花。

从半球面模型到鱼眼图像的投影

正交投影

下面的公式20 21建立了从半球面到鱼眼图的一一对应关系。
在这里插入图片描述

等距投影

下面的公式28 29建立了从半球面到鱼眼图的一一对应关系。
在这里插入图片描述

3.实际效果示例

论文中的原图去畸变

在这里插入图片描述
下面左边是最近邻插值的效果,右侧为双线性插值的结果
在这里插入图片描述

4. 有意思的玩法

正常去畸变的链路是从目标图—>半球面—>鱼眼图,这样可以去畸变,那链路反过来呢?那不是就可以制造鱼眼图的效果了吗!yes,是的。那后面验证效果可以用生成的鱼眼图来做去畸变。(目前有的数据不能发,所以才有了这个自己造鱼眼图的想法!)
左边为原图,右侧为生成的鱼眼图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5. 对生成的鱼眼图去畸变

左侧为输入图,右侧为去畸变的图。从效果来看对生成的鱼眼图去畸变效果非常好,这也就说明了在去畸变的时候,建立和真实的投影模型一致的模型是多么重要,用简单的模型来模拟真实的物理世界,还是很有意思,但是怎么去近似这个真实的物理过程真是件需要创造力的事情。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法也还算是很简单,初版一天完成,后面稍微修改了一点,总的代码量300-400行左右。

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

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

相关文章

【复利思维 + 项目成功方程式】用1年,超越别人38年!

复利思维—每天进步1%。 一年后会比现在的自己优秀38倍。在做任何事情时都要考虑,这件事是否能随着时间不断积累扩大,不能积累价值的事情要及时调整和止损。 在这个过程中,千万不要陷入心理暗示的陷阱,尤其是越想得到的&#xf…

ElasticSearch集群环境

ElasticSearch集群环境 1、Linux单机 下载地址:LINUX X86_64 (elastic.co) 下载之后进行解压 tar -zxf elasticsearch-7.8.0-linux-x86_64.tar.gz 名字太长了改个名字改成es mv elasticsearch-7.8.0 es因为安全问题,Elasticsearch 不允许 root 用户…

一文读懂NVIDIA AI全景:从芯片到应用,全面解析未来科技

英伟达 NVIDIA AI 全景解析 NVIDIA 概述 公司概况 NVIDIA作为全球顶尖科技公司,早期深耕图形处理器设计制造,现已跃升为人工智能领域的领军者,产品和服务覆盖AI应用的全方位,引领科技潮流。 NVIDIA,1993年创立于美国…

Linux进程间通信 pipe 实现线程池 命名管道 实现打印日志 共享内存代码验证 消息队列 信号量

文章目录 前言管道匿名管道 pipe测试管道接口 --> 代码验证管道的4种情况管道的5种特征 线程池案例代码实现:ProcessPool.ccTask.hpp检测脚本makefile 命名管道代码演示:makefilenamedPipe.hppserver.ccclient.cc 实现日志Log.hpp 共享内存共享内存原…

机器人系统ros2-开发实践08-了解如何使用 tf2 来访问坐标帧转换(Python)

tf2 库允许你在 ROS 节点中查询两个帧之间的转换。这个查询可以是阻塞的,也可以是非阻塞的,取决于你的需求。下面是一个基本的 Python 示例,展示如何在 ROS 节点中使用 tf2 查询帧转换。 本教程假设您已完成tf2 静态广播器教程 (Python)和tf…

车辆运动模型中LQR代码实现

一、前言 最近看到关于架构和算法两者关系的一个描述,我觉得非常认同,分享给大家。 1、好架构起到两个作用:合理的分解功能、合理的适配算法; 2、好的架构是好的功能的必要条件,不是充分条件,一味追求架构…

海外云手机解决海外社交媒体运营难题

随着全球数字化浪潮的推进,海外社交媒体已成为外贸企业拓展市场、提升品牌影响力的重要阵地。Tiktok、Facebook、领英、twitter等平台以其庞大的用户基础和高度互动性,为企业提供了前所未有的营销机会。本文将介绍如何通过海外云手机,高效、快…

[优选算法]------滑动窗⼝——209. 长度最小的子数组

目录 1.题目 1.解法⼀(暴⼒求解)(会超时): 2.解法⼆(滑动窗⼝): 1.算法思路: 2.手撕图解 3.代码实现 1.C 2.C语言 1.题目 209. 长度最小的子数组 给定一个含有 n…

pod介绍

一、前言 Pod 是 Kubernetes 中最小的部署单元,它可以包含一个或多个容器,以及共享的存储卷和网络命名空间,Pod 提供了一种抽象,用于组织和管理容器化的应用程序,并提供了一种灵活、轻量级的方式来部署和管理应用程序 …

基于JSP动漫论坛的设计与实现(四)

目录 功能模块测试 6.1 测试概述及所用方案 6.1.1软件测试概述 6.1.3 测试的步骤 6.1.4 测试的主要内容 6.1.5 测试方案 6.1.6测试设计 6.2 前端功能测试 6.2.1 登录功能测试 6.2.2 注册功能测试 6.2.3 发帖功能测试 6.2.4 回复帖子测试 6.3 后台功能测试 6…

ETL工具中JSON格式的转换方式

JSON的用处 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,其设计初衷是为了提升网络应用中数据的传输效率及简化数据结构的解析过程。自其诞生以来,JSON 已成为Web开发乃至众多软件开发领域中不可或缺的一部分&a…

C++:类与对象—继承

类与对象—继承 一、继承是什么?二、继承定义三、基类和派生类对象赋值转换四、继承中的作用域五、派生类的默认成员函数六、继承与友元七、继承与静态成员八、复杂的菱形继承及菱形虚拟继承九、继承的总结和反思十、考察重点 一、继承是什么? 继承(inh…

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三)

基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 大家继续看 https://lilianweng.github.io/posts/2023-06-23-agent/的文档内容 第二部分:内存 记忆的类型 记忆可以定义为用于获取、存储、保留以及随后检索信息的过程。人脑中有多…

【qt】设计器实现界面

设计器实现界面 一.总体思路二.具体操作1.创建项目2.粗略拖放3.水平布局4.垂直布局5.修改名字6.转到槽7.实现槽函数 一.总体思路 二.具体操作 1.创建项目 这次咱们一定要勾选Generate form哦。 因为我们要使用设计器进行拖放。 2.粗略拖放 这里用到了复选框:C…

dos命令改3389端口,通过dos命令更改3389端口的操作

要使用DOS命令更改3389端口,通常涉及修改Windows注册表中的相关键值。请注意,直接操作注册表具有一定的风险,因此在进行任何更改之前,请确保您了解正在进行的操作,并已经采取了适当的备份措施。 以下是一个基本的操作步…

Apache Sqoop:高效数据传输工具搭建与使用教程

目录 引言一、环境准备二、安装sqoop下载sqoop包解压文件 三、配置Sqoop下载mysql驱动拷贝hive的归档文件配置环境变量修改sqoop-env.sh配置文件替换版本的commons-lang的jar包 验证Sqoop安装查看Sqoop版本测试Sqoop连接MySQL数据库是否成功查看数据库查看数据表去除警告信息 四…

matlab的imclose()详解

J imclose(I,SE) J imclose(I,nhood) 说明 J imclose(I,SE) 使用结构元素 SE 对灰度或二值图像 I 执行形态学闭运算。形态学闭运算是先膨胀后腐蚀,这两种运算使用相同的结构元素。 J imclose(I,nhood) 对图像 I 执行闭运算,其中 nhood 是由指定结…

开启异步线程的方法

1,开启异步线程,在启动类上加注解: 2,自定义线程池: Configuration public class PromotionConfig {Beanpublic Executor generateExchangeCodeExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExec…

大模型面试常考知识点1

文章目录 1. 写出Multi-Head Attention2. Pre-Norm vs Post-Norm3. Layer NormRMS NormBatch Norm 4. SwiGLU从ReLU到SwishSwiGLU 5. AdamW6. 位置编码Transformer位置编码RoPEALibi 7. LoRA初始化 参考文献 1. 写出Multi-Head Attention import torch import torch.nn as nn …

【.NET Core】你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟

你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟 文章目录 你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟一、概述二、CallerMemberNameAttribute类三、CallerFilePathAttribute 类四、CallerLineNumberAttribute 类…