OpenGL(八)——图像逆透视算法IPM

news2025/1/13 13:43:46

目录

一、前言

二、相机模型

2.1 针孔模型

2.2 相机外参

三、逆透视模型

四、算法总结


一、前言

 透视变换(Perspective Transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换

逆透视变换是透视变换的逆过程,主要是结合相机的内在和外在参数,将图像从图像坐标系映射到世界坐标系,从而消除透视影响对图像检测和识别任务的干扰和误差。

二、相机模型

2.1 针孔模型

 建立相机模型的目的是为了得到世界坐标中某一点相机坐标系下 图像像素对应关系

经过一些列推导(网上有很多,不再重复),得到相机模型:

 上述公式表示  世界坐标------------------------------------------------------->像素坐标 转换,其中:

R表示从世界坐标到相机坐标的旋转矩阵,实际上就是相机的内外参数;内参表示相机本身固有特性,如焦距;外参表示位置特性,即在世界坐标系下的姿态

P表示世界坐标系原点 在相机坐标系下的位置

α表示在x轴或者y轴放大系数

f表示相机焦距

Xw表示世界坐标系,Xc表示相机坐标系

u0,v0表示光轴中心线与图像平面交点位置,如相机坐标系下的成像点(x2,y2)经过电压放大、补偿变换后最终变成图像像素(u,v):

2.2 相机外参

相机标定主要是计算 相机 映射矩阵, 确定 3D 世界 中任意点在 2D 图像中的位 置。相机模型由内参和外参矩阵构成,内参表示工艺特性,外参表示相机位置特性。

上述针孔模型的外参矩阵描述为4x4:

 通过推导得:

 其中旋转矩阵R表示横摆角γ,侧倾角fai,俯仰角θ决定。

外参可以根据matlab工具箱计算:

三、逆透视模型

透视示意图为:

 Xc表示相机坐标系,Xv表示车辆坐标系,车辆坐标系与世界坐标系原点重合。2α表示相机图像视野,任意世界坐标系点Xb,Yb在相机坐标系下投影为Bx,By,图像坐标系u方向每个像素尺寸为lu,v方向每个像素尺寸为lv,通过推导相机逆透视计算公式为:

上述变换表示 像素坐标------------------------------------------------------->世界坐标 转换,其中

m,n表示图像高度、宽度

h,l,d表示相机相对车辆的高度、垂直和水平偏移量

ui,vi表示像素点索引

Xp,Yp表示图像ui,vi在车辆坐标系下对应的预估距离

四、算法总结

逆透视变换详解 及 代码实现(一)_既然如此的博客-CSDN博客这边博客很值得参考,写的也详细,但是仅仅给出了世界坐标到相机图像的变换,并没有说明旋转矩阵R,导致一些博友无法理解xyLimit得来,实际上是整体矩阵的逆变换,在这里对其代码算法步骤进行总结:

  1. 根据摄像机厂家产品技术手册,获取相机FOV角度α,焦距f
  2. 通过标准网格板标定出相机内参矩阵、相机高度h;通过摄像机与车辆坐标系安装位置标定出外参矩阵;
  3. 通过外参矩阵分离出旋转矩阵R,从而计算出相机姿态,俯仰角θ
  4. 基于相机姿态计算消失点, 从而得出图像像素的uv范围uvLimit
  5. 通过像素------>世界的坐标转换,uvLimit计算出水平坐标系xyLimit;
  6. 已知xyLimit和IPM成像范围,通过世界------>像素的坐标转换,计算理论图像uv映射uvMap
  7. 已知原始图像、uvMap通过线性插值计算出IPM最终图像

 其他:

(一)实际应用

通常是首先得到目标在图片中的信息,通过图像坐标系(pixel)与像平面坐标系(x/mm,y/mm)的转换得到像平面坐标,已知相机内外参,通过相机与世界坐标系的转换得到世界坐标系下的位置

(二)插值算法

A:原图像像素坐标通过式2-19,在经过缩放比得到逆透视图像坐标,但该坐标一般是浮点数,显然,这个对应坐标一般来说不是整数,而非整数的坐标是无法在图像这种离散数据上使用的。双线性插值通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值(灰度值或者RGB值)。双线性插值如下所示

使用公式:int x=(i+0.5)*m/a-0.5;int y=(j+0.5)*n/b-0.5,来代替int x=i*m/a;int y=j*n/b;

双线性插值的优化:

在图像处理中,双线性插值算法的使用频率相当高,比如在图像的缩放中,在所有的扭曲算法中,都可以利用该算法改进处理的视觉效果。在数学上,双线性插值算法可以看成是两个变量间的线性插值的延伸。执行该过程的关键思路是先在一个方向上执行线性插值,然后再在另外一个方向上插值。考虑将该过程中的所有类似于1-x、1-y的变量放大合适的倍数,得到对应的整数,最后再除以一个合适的整数作为插值的结果

如有错误,感谢指正!

参考:

opencv实现逆透视GitHub-19.01:GitHub - oreillymedia/Learning-OpenCV-3_examples

https://www.cnblogs.com/star91/p/6012425.html——相机标定

https://blog.csdn.net/qq_35356190/article/details/79790042——视场角获得

相机模型详解_Hao_09的博客-CSDN博客——相机针孔模型详解

https://www.cnblogs.com/singlex/p/RotateMatrix2Euler.html——相机横摆俯仰侧倾角详解

http://www.cnblogs.com/funny-world/p/3162003.html——基本双线性插值

http://www.cnblogs.com/Imageshop/archive/2011/11/12/2246808.html——双线性插值的优化

一文带你搞懂相机内参外参(Intrinsics & Extrinsics) - 知乎 (zhihu.com)

逆透视变换详解 及 代码实现(一)_既然如此的博客-CSDN博客

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

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

相关文章

Cesium 实战-解决 The browser supports WebGL, but initialization failed 问题

Cesium 实战-解决 The browser supports WebGL, but initialization failed 问题 系统环境版本试错过程解决问题 在公司内网服务器部署 Cesium 项目的时候,发现提示浏览器不支持 WebGL 错误,经尝试,确认 Cesium 1.101.0 以及之前的版本是可以…

职场小白如何快速成为房地产策划专家?全覆盖解密

如果你是刚入行的地产策划新手小白: 1、首先要会房地产的基础知识,相关的政策法规等,因为这些都是制定策略的最基本的依据,如果这些你都不熟,制定出来的策划就会有错误。建议你多买几本地产基础知识的书看看。 2、把…

14.网络编程基础

1.网络编程入门 1.1 网络编程概述【理解】 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计…

Axios概述

一、Json-server 获得零编码的完整伪造 REST API zero coding 在不到 30 秒的时间内 &#xff08;认真&#xff09;。 使用 <3 创建&#xff0c;适用于需要快速后端进行原型设计和模拟的前端开发人员&#xff0c;模拟后端发送过来json数据。 1.安装 npm install -g jso…

OPNET Modeler 例程——停等协议的建模和仿真

文章目录 一、概述二、链路模型和包格式创建三、进程模型1.src 进程模型2.sink 进程模型 四、节点模型五、网络模型六、仿真结果 一、概述 本例程是在 OPNET Modeler 中对停等协议的建模和仿真&#xff0c;其中停等协议的操作过程如下&#xff1a; &#xff08;1&#xff09;发…

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

文章目录 &#x1f40d;第一步&#xff0c;创建配置文件到nacos中&#x1f40d;第二步&#xff0c;在项目中配置nacos的地址和指定文件&#x1f40d;第三步&#xff0c;读取配置文件&#x1f426;高阶用法&#x1f426;高阶用法一&#xff1a;使用yaml文件&#x1f426;第一步&…

5年功能测试,薪资定格8K迷茫了....我该如何破局?

前言 来自一位粉丝的投稿&#xff0c;从毕业开始就一直在从事软件测试的工作&#xff0c;到目前已经是第5个年头了&#xff0c;从4k涨到了8K&#xff0c;显而易见我们这位粉丝并不满足现状&#xff0c;于是问我怎么破局&#xff0c;他当下应该干什么事情,或者应该学习什么技术…

从零开始学习Linux运维,成为IT领域翘楚(十)

文章目录 &#x1f525;Linux网络防火墙&#x1f525;Linux内核机制 &#x1f525;Linux网络防火墙 防火墙管理工具 firewalld概述 Centos 系统中集成了多款防火墙管理工具&#xff0c;其中 firewalld服务是默认的防火墙配置管理工具&#xff0c;它拥有基于 CLI&#xff08;…

Aha! Adaptive History-driven Attack for Decision-based Black-box Models

AHA!基于决策的黑盒模型的自适应历史驱动攻击 Aha! Adaptive History-driven Attack for Decision-based Black-box Models ABSTRACT 基于决策的黑盒攻击指的是只使用受害者模型的前1个标签来制作对抗示例。一种常见的做法是从一个大的扰动开始&#xff0c;然后用一个确定的方…

【Nacos源码分析】

Nacos源码分析 Nacos源码分析1.下载Nacos源码并运行1.1.下载Nacos源码1.2.导入Demo工程1.3.导入Nacos源码1.4.proto编译1.4.1.什么是protobuf1.4.2.安装protoc1.4.3.编译proto 1.5.运行 2.服务注册2.1.服务注册接口2.2.客户端2.2.1.NacosServiceRegistryAutoConfiguration2.2.2…

【软件测试】| 软件测试 - 答疑篇

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️ 专栏&#xff1a;软件测试 &#x1f397;️ 如何优雅的活着&#xff0c;是我找寻的方向 目录 一、什么是软件测试二、测试和调试的区别三、软件测试和开发的区别 一、什么是软件测试 最常见的理解是&#xff1a;软…

使用J-Link的J-Scope功能查看数据实时波形

使用串口打印波形的不便之处 对于要查看的实时变量&#xff0c;一般可以用串口打印到可以查看波形的上位机上。但是这种办法有几个不方便的地方&#xff1a; 需要根据配套上位机的通讯协议&#xff0c;在单片机上编写上传数据的代码 单片机CPU需要浪费部分时间在串口数据上传上…

Makefile基础教程(变量的介绍和使用)

文章目录 前言一、Makefile变量概念介绍二、Makefile中变量的赋值方式1.简单赋值2.递归赋值3.条件赋值4.追加赋值 三、Makefile赋值在工程中的应用总结 前言 在C语言等语言中存在变量这个概念那么在Makefile中也是存在变量这个概念的&#xff0c;现在就让我们来学习一下什么是…

Solr(5):Solr控制台说明-主面板

1 Dashboard(仪表盘) 访问 http://ip:8983/solr时&#xff0c;出现该主页面&#xff0c;可查看到solr运行时间、solr版本&#xff0c;系统内存、虚拟机内存的使用情况 这里的图片描述 2 Logging(日志) 显示solr运行出现的异常或错误 3 Core Admin (core管理) 主要有Add Cor…

Java--io流知识总结

什么是输入/输出流 Java 程序通过流来完成输入/输出&#xff0c;所有的输入/输出以流的形式处理。因此要了解 I/O 系统&#xff0c;首先要理解输入/输出流的概念。 输入就是将数据从各种输入设备&#xff08;包括文件、键盘等&#xff09;中读取到内存中&#xff0c;输出则正好…

抢先微软,Google版Copilot上线!谷歌宣布给Google全家桶开放Bard功能

夕小瑶科技说 原创作者 | 智商掉了一地、兔子酱 就在本月 5 号&#xff0c;Bard 和 Google Workspace 同步更新了一则新闻&#xff0c;宣布 Workspace 的团队用户即日起可以申请体验由 Bard 大模型驱动的生成式 AI 工具。 这项计划在今年 3 月份首次公布&#xff0c;当时该工具…

上架Google play 提示 不符合64位版本应用的要求

此版本不符合 Google Play 关于提供 64 位版本应用的要求以下 APK 或 App Bundle 面向 64 位设备&#xff0c;但只有 32 位原生代码:[29]请向应用中添加64位和 32 位原生代码。使用 Android App Bundle 发布格式可自动确保每种设备架构仅收到所需加应用的总大小。 在build.gra…

HCIA-RS实验-路由配置-RIPv2 路由汇总和认证

RIPv2 路由汇总和认证简介&#xff1a; RIPv2 是一个距离向量路由协议&#xff0c;用于在网络中选择最佳路径。RIPv2 路由汇总和认证是两个重要的功能&#xff0c;可以提高路由协议的可靠性和安全性。 1. 路由汇总 路由汇总是将多个路由表项合并成一个较小的路由表项的过程。在…

vscode IDE 能用的上的扩展工具功能介绍

记录分享vscode扩展&#xff0c;包括提升开发效率。必备。主题美化。ChatGPT等。 参考 vscode-extensions [Best] 记录分享方式&#xff0c;整理自己用的扩展&#xff0c;还有一键备份和还原方法。 ⭐快速下载和使用扩展 后面会介绍很多vscode扩展.这裡有一个技巧&#xff0c;…

腾讯云2核2G4M轻量服务器带宽CPU流量系统盘性能测评

腾讯云轻量2核2G4M服务器自带4M公网带宽&#xff0c;下载速度可达512KB/秒&#xff0c;100%CPU性能&#xff0c;系统盘为50GB SSD盘&#xff0c;300GB月流量&#xff0c;折合每天10G流量&#xff0c;地域节点可选上海/广州/北京。腾讯云百科分享腾讯云轻量应用服务器2核2G4M配置…