DLT 直接线性变换

DLT 直接线性变换

对于单应变换 x i ′ = H x i x_i^{\prime}=Hx_i xi=Hxi,易知两图中对应的特征点,如何找出所需要的 H H H​,为了解决这个问题,可以采用DLT算法

原理

image-20240419162925203

其中采用Least Squares Error去拟合

image-20240419163020558

其中目标是获得最佳参数:使得误差平方最小的参数
p ^ = arg ⁡ min ⁡ p ∑ i ∥ f ( x i ; p ) − x i ′ ∥ 2 \hat{\boldsymbol{p}}=\arg\min_{\boldsymbol{p}}\sum_i\|\boldsymbol{f}(\boldsymbol{x}_i;\boldsymbol{p})-\boldsymbol{x}_i^{\prime}\|^2 p^=argpminif(xi;p)xi2
单应变换
f ( x ; p ) = H [ x y 1 ] f(x;p)=H\begin{bmatrix}x\\y\\1\end{bmatrix} f(x;p)=H xy1

[ x i ′ y i ′ 1 ] = λ [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] [ x i y i 1 ] x i ′ = λ ( h 11 x i + h 12 y i + h 13 ) y i ′ = λ ( h 21 x i + h 22 y i + h 23 ) 1 = λ ( h 31 x i + h 32 y i + h 33 ) \begin{aligned} \begin{bmatrix}x_i'\\y_i'\\1\end{bmatrix} &=\lambda\begin{bmatrix}h_{11}&h_{12}&h_{13}\\h_{21}&h_{22}&h_{23}\\h_{31}&h_{32}&h_{33}\end{bmatrix}\begin{bmatrix}x_i\\y_i\\1\end{bmatrix} \\ x_i'&=\lambda(h_{11}x_i+h_{12}y_i+h_{13}) \\ y_i^{\prime}&=\lambda(h_{21}x_i+h_{22}y_i+h_{23}) \\ 1&=\lambda(h_{31}x_i+h_{32}y_i+h_{33}) \end{aligned} xiyi1 xiyi1=λ h11h21h31h12h22h32h13h23h33 xiyi1 =λ(h11xi+h12yi+h13)=λ(h21xi+h22yi+h23)=λ(h31xi+h32yi+h33)
其中 λ \lambda λ为缩放因子,消去可得
x i ′ ( h 31 x i + h 32 y i + h 33 ) = h 11 x i + h 12 y i + h 13 y i ′ ( h 31 x i + h 32 y i + h 33 ) = h 21 x i + h 22 y i + h 23 x_i'(h_{31}x_i+h_{32}y_i+h_{33})=h_{11}x_i+h_{12}y_i+h_{13}\\y_i'(h_{31}x_i+h_{32}y_i+h_{33})=h_{21}x_i+h_{22}y_i+h_{23} xi(h31xi+h32yi+h33)=h11xi+h12yi+h13yi(h31xi+h32yi+h33)=h21xi+h22yi+h23

[ x i y i 1 0 0 0 − x i ′ x i − x i ′ y i − x i ′ 0 0 0 x i y i 1 − y i ′ x i − y i ′ y i − y i ′ ] [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 ] = [ 0 0 ] \begin{bmatrix}x_i&y_i&1&0&0&0&-x_i^{\prime}x_i&-x_i^{\prime}y_i&-x_i^{\prime}\\0&0&0&x_i&y_i&1&-y_i^{\prime}x_i&-y_i^{\prime}y_i&-y_i^{\prime}\end{bmatrix}\begin{bmatrix}h_{11}\\h_{12}\\h_{13}\\h_{21}\\h_{22}\\h_{23}\\h_{31}\\h_{32}\end{bmatrix}=\begin{bmatrix}0\\0\end{bmatrix} [xi0yi0100xi0yi01xixiyixixiyiyiyixiyi] h11h12h13h21h22h23h31h32 =[00]
这只是一个匹配点,扩展到多个匹配点
[ x 1 y 1 1 0 0 0 − x 1 ′ x 1 − x 1 ′ y 1 − x 1 ′ 0 0 0 x 1 y 1 1 − y 1 ′ x 1 − y 1 ′ y 1 − y 1 ′ ⋮ x n y n 1 0 0 0 − x n ′ x n − x n ′ y n − x n ′ 0 0 0 x n y n 1 − y n ′ x n − y n ′ y n − y n ′ ] [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] = [ 0 0 ] \begin{bmatrix}x_1&y_1&1&0&0&0&-x_1^{\prime}x_1&-x_1^{\prime}y_1&-x_1^{\prime}\\0&0&0&x_1&y_1&1&-y_1^{\prime}x_1&-y_1^{\prime}y_1&-y_1^{\prime}\\&&&&\vdots\\x_n&y_n&1&0&0&0&-x_n^{\prime}x_n&-x_n^{\prime}y_n&-x_n^{\prime}\\0&0&0&x_n&y_n&1&-y_n^{\prime}x_n&-y_n^{\prime}y_n&-y_n^{\prime}\end{bmatrix} \begin{bmatrix}h_{11}\\h_{12}\\h_{13}\\h_{21}\\h_{22}\\h_{23}\\h_{31}\\h_{32}\\h_{33}\end{bmatrix}=\begin{bmatrix}0\\0\end{bmatrix} x10xn0y10yn010100x10xn0y10yn0101x1x1y1x1xnxnynxnx1y1y1y1xnynynynx1y1xnyn h11h12h13h21h22h23h31h32h33 =[00]
其中将矩阵 [ x 1 y 1 1 0 0 0 − x 1 ′ x 1 − x 1 ′ y 1 − x 1 ′ 0 0 0 x 1 y 1 1 − y 1 ′ x 1 − y 1 ′ y 1 − y 1 ′ ⋮ x n y n 1 0 0 0 − x n ′ x n − x n ′ y n − x n ′ 0 0 0 x n y n 1 − y n ′ x n − y n ′ y n − y n ′ ] \begin{bmatrix}x_1&y_1&1&0&0&0&-x_1^{\prime}x_1&-x_1^{\prime}y_1&-x_1^{\prime}\\0&0&0&x_1&y_1&1&-y_1^{\prime}x_1&-y_1^{\prime}y_1&-y_1^{\prime}\\&&&&\vdots\\x_n&y_n&1&0&0&0&-x_n^{\prime}x_n&-x_n^{\prime}y_n&-x_n^{\prime}\\0&0&0&x_n&y_n&1&-y_n^{\prime}x_n&-y_n^{\prime}y_n&-y_n^{\prime}\end{bmatrix} x10xn0y10yn010100x10xn0y10yn0101x1x1y1x1xnxnynxnx1y1y1y1xnynynynx1y1xnyn 记为A,矩阵 [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] \begin{bmatrix}h_{11}\\h_{12}\\h_{13}\\h_{21}\\h_{22}\\h_{23}\\h_{31}\\h_{32}\\h_{33}\end{bmatrix} h11h12h13h21h22h23h31h32h33 记为h。

定义最小二乘问题:最小 ∥ A h ∥ 2 \|Ah\|^2 Ah2

  • 由于 h h h差一个缩放因子,因此增加约束 ∥ h ∥ = 1 \|h\|=1 h=1
  • 解: h ^ \widehat{h} h A T A A^\mathrm{T}A ATA的最小特征值对应的特征向量
  • 需要4对以上的对应点 ( n ≥ 4 (n\geq4 (n4,任意3点不共线)

最小 ∥ A h ∥ 2 \|Ah\|^2 Ah2,满足约束: ∥ h ∥ = 1 \|h\|=1 h=1 采用拉格朗日乘子法,拉格朗日函数为:
L ( h , λ ) = h T A T A h − λ ( h T h − 1 ) L(h,\lambda)=h^\mathrm{T}A^\mathrm{T}Ah-\lambda(h^\mathrm{T}h-1) L(h,λ)=hTATAhλ(hTh1)
L ( h , λ ) L(h,\lambda) L(h,λ)求偏导并等于0

∂ L ( h , λ ) ∂ h = ( A T A h + A A T ) h − 2 λ h = 2 A T A h − 2 λ h = 0 \frac{\partial L(h,\lambda)}{\partial h}=(A^{\mathrm{T}}Ah+AA^{\mathrm{T}})h-2\lambda h=2A^{\mathrm{T}}Ah-2\lambda h=0 hL(h,λ)=(ATAh+AAT)h2λh=2ATAh2λh=0

得到: A T A h = λ h A^\mathrm{T}Ah=\lambda h ATAh=λh

所以, h h h为矩阵 A T A A^\mathrm{T}A ATA的特征值,亦为A的SVD中 U Σ V T U\Sigma V^\mathrm{T} UΣVT V V V

步骤

给定两幅图像中特征点对的齐次坐标 x i = ( x i , y i , 1 ) x_i=(x_i,y_i,1) xi=(xi,yi,1) x i ′ = ( x i ′ , y i ′ , 1 ) x_i^{\prime}=(x_i^{\prime},y_i^{\prime},1) xi=(xi,yi,1), 计算 H H H, 使得 x i ′ = H x i x_i^{\prime}=Hx_i xi=Hxi

  1. 计算矩阵A
  2. 计算 A A A的特征值分解: A = U D V T A=UDV^\mathrm{T} A=UDVT
  3. 保留 A A A最小的特征值对应的特征向量 υ \upsilon υ h h h
  4. h h h写成矩阵形式 H = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] H=\begin{bmatrix}h_{11}&h_{12}&h_{13}\\h_{21}&h_{22}&h_{23}\\h_{31}&h_{32}&h_{33}\end{bmatrix} H= h11h21h31h12h22h32h13h23h33

DLT只对线性变换有效。

归一化的DLT

因为DLT算法不具备相似不变性

证明:

设第一次单应矩阵估计的结果为: x d s t = H x s r c x_{dst}=Hx_{src} xdst=Hxsrc
对两张图像分别进行相似变换 T T T并重新进行单应性估计
T d s t x d s t = H ′ ( T s r c x s r c ) ⇒ x d s t = T d s t − 1 H T s r c x s r c \begin{aligned} &\quad T_{dst}x_{dst}=H^{\prime}(T_{src}x_{src})\\ &\Rightarrow x_{dst}=T_{dst}^{-1}HT_{src}x_{src} \end{aligned} Tdstxdst=H(Tsrcxsrc)xdst=Tdst1HTsrcxsrc

一般情况下, H ≠ T d s t − 1 H T s r c H\neq T_{dst}^{-1}HT_{src} H=Tdst1HTsrc

DLT算法无法抵抗相似变换的干扰

为了解决这个问题,所以提出了归一化的DLT算法,其思想是:计算一个只包含平移和带缩放的相似变换 T T T, 使得归一化后的原点位于(0,0),所有点到原点的平均距离为 2 \sqrt2 2
x ~ = [ x ~ i y ~ i 1 ] = [ s 0 t x 0 s t y 0 0 1 ] [ x i y i 1 ] \tilde{\boldsymbol{x}}=\begin{bmatrix}\tilde{x}_i\\\tilde{y}_i\\1\end{bmatrix}=\begin{bmatrix}s&0&t_x\\0&s&t_y\\0&0&1\end{bmatrix}\begin{bmatrix}x_i\\y_i\\1\end{bmatrix} x~= x~iy~i1 = s000s0txty1 xiyi1
其中满足
{ 1 N ∑ i = 1 N x ~ i = 1 N ∑ i = 1 N ( s x i + t x ) = 0 1 N ∑ i = 1 N y ~ i = 1 N ∑ i = 1 N ( s y i + t y ) = 0 1 N ∑ i = 1 N ( x ~ i 2 + y ~ i 2 ) = 2 ⟹ { t x = − s N ∑ i = 1 N x i = − s x ˉ t y = − s N ∑ i = 1 N y i = − s y ˉ s = 1 N ∑ i = 1 N ( x ~ i 2 + y ~ i 2 ) = 1 N ∑ i = 1 N ( ( x i − x ˉ ) 2 + ( y i − y ˉ ) 2 ) \begin{cases}\dfrac{1}{N}\sum_{i=1}^N\tilde{x}_i=\dfrac{1}{N}\sum_{i=1}^N(sx_i+t_x)=0\\\dfrac{1}{N}\sum_{i=1}^N\tilde{y}_i=\dfrac{1}{N}\sum_{i=1}^N(sy_i+t_y)=0\\\dfrac{1}{N}\sum_{i=1}^N(\tilde{x}_i^2+\tilde{y}_i^2)=2\end{cases}\implies\begin{cases}t_x=-\dfrac{s}{N}\sum_{i=1}^Nx_i=-s\bar{x}\\t_y=-\dfrac{s}{N}\sum_{i=1}^Ny_i=-s\bar{y}\\s=\dfrac{1}{N}\sum_{i=1}^N(\tilde{x}_i^2+\tilde{y}_i^2)=\dfrac{1}{N}\sum_{i=1}^N((x_i-\bar{x})^2+(y_i-\bar{y})^2)\end{cases} N1i=1Nx~i=N1i=1N(sxi+tx)=0N1i=1Ny~i=N1i=1N(syi+ty)=0N1i=1N(x~i2+y~i2)=2 tx=Nsi=1Nxi=sxˉty=Nsi=1Nyi=syˉs=N1i=1N(x~i2+y~i2)=N1i=1N((xixˉ)2+(yiyˉ)2)
反归一:
H = T ′ − 1 H ~ T , x i ′ = H x i x ~ = T x , x ~ i ′ = T ′ x i ′ \begin{aligned}&H=T^{\prime-1}\widetilde{H}T,\\&x_i^{\prime}=Hx_i\\&\widetilde{x}=Tx,\quad\widetilde{x}_i^{\prime}=T^{\prime}x_i^{\prime}\end{aligned} H=T1H T,xi=Hxix =Tx,x i=Txi

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

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

相关文章

【办公类-22-05】20240419 UIBOT填写“PATHS课程”的《SSBS校园行为问卷》

背景需求: 每年都有一个PATHS课程的“家长问卷调查”和“教师问卷调查”需要填写 作为教师,每次要对全班所有的孩子进行评价,每位孩子64题! 反复点题目,感觉非常累,工作操作就是两位老师,每人做…

Golang | Leetcode Golang题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; func reverseKGroup(head *ListNode, k int) *ListNode {hair : &ListNode{Next: head}pre : hairfor head ! nil {tail : prefor i : 0; i < k; i {tail tail.Nextif tail nil {return hair.Next}}nex : tail.Nexthead, tail my…

U盘秒变0字节?别慌,数据恢复有妙招!

在日常的工作和生活中&#xff0c;U盘已成为我们不可或缺的数据存储工具。然而&#xff0c;有时候我们可能会遇到一个令人头疼的问题&#xff1a;原本存有重要文件的U盘&#xff0c;突然间容量显示为0字节。这意味着U盘中的数据全部丢失&#xff0c;无法读取。那么&#xff0c;…

hackthebox - Redeemer

2024.4.19 TASK 1 Which TCP port is open on the machine? 6379 TASK 2 Which service is running on the port that is open on the machine? redis TASK 3 What type of database is Redis? Choose from the following options: (i) In-memory Database, (ii) Traditiona…

UltraScale+的10G/25G Ethernet Subsystem IP核使用

文章目录 前言一、设计框图1.1、xxv_ethernet_01.2、xxv_ethernet_0_sharedlogic_wrapper1.3、xxv_ethernet_0_clocking_wrapper1.4、xxv_ethernet_0_common_wrapper 二、IP核配置三、仿真四、上板测速 前言 前面我们学习了很多基于XILINX 7系列的高速接口使用&#xff0c;本文…

组合预测 | Matlab实现ICEEMDAN-SMA-SVM基于改进完备集合经验模态分解-黏菌优化算法-支持向量机的时间序列预测

组合预测 | Matlab实现ICEEMDAN-SMA-SVM基于改进完备集合经验模态分解-黏菌优化算法-支持向量机的时间序列预测 目录 组合预测 | Matlab实现ICEEMDAN-SMA-SVM基于改进完备集合经验模态分解-黏菌优化算法-支持向量机的时间序列预测预测效果基本介绍程序设计参考资料预测效果 基本…

爬取微博评论数据

# -*- coding: utf-8 -*- import requests #用于发送请求并且拿到源代码 from bs4 import BeautifulSoup #用于解析数据 1.找到数据源地址并且分析链接 2.发送请求并且拿到数据 3.在拿到的数据中解析出需要的数据 4.存储数据 headers { "User-Agent": "…

C++中string的用法总结+底层剖析

前言&#xff1a;在C语言中&#xff0c;我们经常使用字符串进行一系列操作&#xff0c;经常使用的函数如下&#xff1a;增删改查 &#xff08;自己造轮子&#xff09;&#xff0c;C中设计出string容器&#xff0c;STL库中为我们提供了以上函数&#xff0c;所以我们使用string容…

QTableView获取可见的行数

场景 当我们需要实时刷新QTableView时&#xff0c;而此时tableView的数据量较大&#xff0c;如果全部刷新显然不合理&#xff0c;如果可以只对用户看的到的数据进行刷新那就最好了&#xff0c;经过一番摸索找到了几种方式&#xff0c;可供参考 代码 方法1 QVector<int>…

64B/66B编码 自定义PHY层设计

一、前言 之前的一篇文章讲解了64B/66B的基本原理&#xff0c;本篇在基于64B/66B GT Transceiver的基础之上设计自定义PHY。基本框图如下。 二、GT Mdule GT Module就按照4个GT CHannel共享一个GT COMMON进行设置&#xff0c;如下图。要将例子工程中的GT COMMON取出&#xff…

docker环境搭建

项目环境搭建 1、安装 Linux 虚拟机 &#xff08;1&#xff09;下载安装&#xff1a; VM VirtualBox 下载安装&#xff1a;Downloads – Oracle VM VirtualBox&#xff0c;要先开启CPU虚拟化 &#xff08;2&#xff09;通过vagrant&#xff0c;在VirtualBox中安装虚拟机 下…

STM32学习和实践笔记(15):STM32中断系统

中断概念 CPU执行程序时&#xff0c;由于发生了某种随机的事件(外部或内部)&#xff0c;引起CPU暂 时中断正在运行的程序&#xff0c;转去执行一段特殊的服务程序(中断服务子程序 或中断处理程序)&#xff0c;以处理该事件&#xff0c;该事件处理完后又返回被中断的程序 继…

MySQL基础-----约束详解

目录 一. 概述: 二.约束演示&#xff1a; 三.外键约束&#xff1a; 3.1介绍&#xff1a; 3.2外键约束语法&#xff1a; 3.3删除&#xff0c;更新行为&#xff1a; 一. 概述: &#x1f9d0;&#x1f9d0;概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制…

css面试题整理

css面试题 一、HTML语义化标签二、块级元素、内联元素、 行内块元素三、盒模型 一、HTML语义化标签 什么是HTML语义化标签&#xff1f;语义化标签的优势&#xff1f; HTML语义化标签顾名思义就是赋予标签含义&#xff0c;比如说<p>标签代表的是段落&#xff0c;还有<…

springboot结合vue实现文件上传下载功能

紧接着上一次的博客&#xff0c;这次来实现一下文件(主要是图片)的上传和下载功能&#xff0c;上一次的博客如下所示&#xff1a; Springboot集成JWT token实现权限验证-CSDN博客 其实文件的上传和下载功能(后端的部分)&#xff0c;在我之前的博客就已经有写了&#xff0c;所以…

LD-Pruner、EdgeFusion(On-Device T2I)、FreeDiff、TextCenGen、MemLLM

本文首发于公众号&#xff1a;机器感知 https://mp.weixin.qq.com/s/KiyNfwYWU-wBiCO-hE9qkA 苏 The devil is in the object boundary: towards annotation-free instance segmentation using Foundation Models Foundation models, pre-trained on a large amount of data…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;1&#xff09; 段子手168 1、微服务的注册中心 注册中心可以说是微服务架构中的”通讯录”&#xff0c;它记录了服务和服务地址的映射关系。 在分布式架构中服务会注册到这里&am…

Docker使用教程及docker部署Vue项目

什么是Docker及其工作原理 虚拟化技术Docker是什么&#xff1f;三大基本术语核心算法原理和具体操作步骤 Docker和传统虚拟化技术区别为什么使用Docker&#xff1f;Docker有什么作用&#xff1f;1.解决应用部署的环境问题遇到问题达到效果 2.容器化 docker的各种命令解释运行机…

6.GodotCanvasItem、Node2D及自定义节点

CanvasItem节点 CanvasItem节点&#xff0c;CanvasItem -> Node&#xff0c;所以CanvasItem继承了Node的所有功能Canvas是画布的意思&#xff0c;所以CanvasItem代表了就是可以被绘制的节点&#xff0c;可以设置可视化界面和材质的颜色所有的2D节点和GUI节点都继承于CanvasI…

网络行为分析与异常检测

构建防火墙和使用简单的安全解决方案不足以保护网络免受网络异常或攻击&#xff0c;因为DDoS攻击、未知恶意软件和其他安全威胁一直在上升&#xff0c;改变了网络安全格局。网络管理员必须积极主动地分析网络&#xff0c;获得对网络的完全控制&#xff0c;并全面了解网络流量活…