当前位置: 首页 > news >正文

为什么基础矩阵F的自由度是7

一、基础矩阵的定义?
基础矩阵是对极几何中,将左图中的一个点的像素坐标,映射到右图中对应极线坐标的矩阵。
二、为什么基础矩阵的自由度是7?
首先,对极几何中,基础矩阵的维度是3×3,也就是有9个元素。基础矩阵是一种射影变换矩阵,将一个齐次坐标变换到另一个齐次坐标。射影变换矩阵(数学上只要是一个3×3的可逆矩阵,就是射影变换矩阵)本身就存在一个尺度因子,可以减少一个自由度,如下所示:
a = [ a 1 a 2 a 3 ] , b = [ b 1 b 2 b 3 ] , h = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] , a = h b a=\left[\begin{matrix}a_{1}\\ a_{2}\\ a_{3}\end{matrix}\right],b=\left[\begin{matrix}b_{1}\\ b_{2}\\ b_{3}\end{matrix}\right],h=\left[\begin{array}{ccc}h_{11}&h_{12}&h_{13}\\ h_{21}&h_{22}&h_{23}\\ h_{31}&h_{32}&h_{33}\end{array}\right],a=hb a= a1a2a3 ,b= b1b2b3 ,h= h11h21h31h12h22h32h13h23h33 ,a=hb
a,b都是齐次坐标,因此不妨等式前后都提出一个标量比例因子得到
s 1 a ′ = s 2 h b ′ s_1a' = s_2hb' s1a=s2hb
同时h矩阵中也可以提出一个比例因子s,得到
s 1 a ′ = s 2 s h ′ b ′ , s 1 s 2 s a ′ = h ′ b ′ s_1a' = s_2sh'b',\frac{s_1}{s_2s}a'=h'b' s1a=s2shbs2ss1a=hb
式子的左边, a a a a ′ a' a都是齐次坐标,因此是等价的,式子的右边 h b hb hb h ′ b ′ h'b' hb表达的意义也是等价的,即使是 h ′ b h'b hb,得出的齐次坐标也是同一个点。因此,射影变换 h h h只有8个自由度,其中的 h 33 h_{33} h33其实可以固定为1,以消除比例因子的影响。
那么基础矩阵呢,由于还存在一个对极约束,使得
x ′ T F x = 0 x'^TFx=0 xTFx=0
即展开成
x i ′ x i f 11 + x i ′ y i f 12 + x i ′ f 13 + y i ′ x i f 21 + y i ′ y i f 22 + y i ′ f 23 + x i f 31 + y i f 32 + f 33 = 0. x'_ix_if_{11}+x'_iy_if_{12}+x'_if_{13}+y'_ix_if_{21}+y'_iy_if_{22}+y'_if_{23}+x_if_{31}+y_if_{32}+f_{33}=0. xixif11+xiyif12+xif13+yixif21+yiyif22+yif23+xif31+yif32+f33=0.
其中 f 33 = 1 f_{33}=1 f33=1,其余8个未知数 f i j f_{ij} fij,由于受到这个式子的约束,知道其中7个元素,就可以求得剩下1个的元素,因此说,自由度为7。即基础矩阵F的自由度为7.

相关文章:

  • 防火墙的NAT技术
  • Pyspark_结构化流3
  • 【云原生】Kubernetes(k8s)部署 MySQL+Dubbo+Nacos服务
  • Linux使用:环境变量指南和CPU和GPU利用情况查看
  • 自学大数据第13天~Hbase数据库操作
  • FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(三)
  • Java 基本数据类型
  • 做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
  • ChatGPT如何批量撰写最新的热点自媒体文章
  • 虚拟动力数字人技术亮相第六届文创产业大会,探见元宇宙 驱动新文创
  • 内存优化小结
  • Android复习总结
  • 回溯算法37:解数独
  • Web前端 jQuery
  • 银行数字化转型导师坚鹏:银行产品经理技能快速提升之道
  • CentOS 7 修改主机名
  • JavaScript标准库系列——Math对象和Date对象(二)
  • js操作时间(持续更新)
  • js中的正则表达式入门
  • Linux快速复制或删除大量小文件
  • vue:响应原理
  • 从setTimeout-setInterval看JS线程
  • 使用API自动生成工具优化前端工作流
  • 双管齐下,VMware的容器新战略
  • 优化 Vue 项目编译文件大小
  • 大数据全解:定义、价值及挑战
  • 数据可视化之下发图实践
  • ​Java基础复习笔记 第16章:网络编程
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #QT(串口助手-界面)
  • $nextTick的使用场景介绍
  • (1)bark-ml
  • (3)STL算法之搜索
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (二)正点原子I.MX6ULL u-boot移植
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (十五)使用Nexus创建Maven私服
  • (小白学Java)Java简介和基本配置
  • (转)jdk与jre的区别
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net操作Excel出错解决
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net项目IIS、VS 附加进程调试
  • .NET中 MVC 工厂模式浅析
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • ::前边啥也没有
  • [20190401]关于semtimedop函数调用.txt
  • [Android]使用Android打包Unity工程
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [C#] 我的log4net使用手册
  • [C#]C# winform部署yolov8目标检测的openvino模型