间接平差——四参数坐标转换模型

news/2024/3/29 20:33:16/文章来源:https://blog.csdn.net/qq_36686437/article/details/131931017

目录

  • 一、原理概述
  • 二、代码实现

在这里插入图片描述

爬虫网站自重。

一、原理概述

  如图1所示, x i ′ o y i ′ x_{i}'oy_{i}' xioyi代表原来的旧坐标系, x i o y i x_{i}oy_{i} xioyi代表将要转换的新坐标系, X X X轴平移参数为 x 0 x_0 x0 Y Y Y轴平移参数为 y 0 y_0 y0 ,旋转角为 α \alpha α ,比例(缩放)系数为 λ \lambda λ (图上未表示出来)。
在这里插入图片描述

图1 坐标转换示意图

  由转换示意图,可以得出关系式:
[ x i y i ] = [ x 0 y 0 ] + λ [ c o s α − s i n α s i n α c o s α ] [ x i ′ y i ′ ] (1) \left[ \begin{matrix} x_{i} \\ y_{i} \\ \end{matrix} \right]=\left[ \begin{matrix} x_0 \\ y_0 \\ \end{matrix} \right]+\lambda\left[ \begin{matrix} cos\alpha&-sin\alpha \\ sin\alpha& cos\alpha \\ \end{matrix} \right] \left[ \begin{matrix} x_{i}' \\ y_{i}' \\ \end{matrix} \right] \tag{1} [xiyi]=[x0y0]+λ[cosαsinαsinαcosα][xiyi](1)

  未知参数有四个 ( x 0 , y 0 , λ , α ) (x_0,y_0,\lambda,\alpha) (x0,y0,λ,α) ,根据以上方程组得出:必须具有2个公共点(具有两个坐标系下坐标值的点)列出四个方程式,解算四个参数。当公共点有3个或3个以上时,相当于具备多余观测值,需列立误差方程式用最小二乘原理进行平差求解参数的最或然值。将式(1)变换为纯量的形式如下:
{ x i = x 0 + λ c o s α ⋅ x i ′ − λ s i n α ⋅ y i ′ y i = y 0 + λ s i n α ⋅ x i ′ + λ c o s α ⋅ y i ′ (2) \begin{cases} x_i=x_0+\lambda cos\alpha \cdot x_{i}'-\lambda sin\alpha \cdot y_{i}'\\ y_i=y_0+\lambda sin\alpha \cdot x_{i}'+\lambda cos\alpha \cdot y_{i}'\\ \end{cases} \tag{2} {xi=x0+λcosαxiλsinαyiyi=y0+λsinαxi+λcosαyi(2)

  设两坐标系中有 n n n个公共点 ( x i , y i ) (x_i,y_i) (xi,yi) ( x i ′ , y i ′ ) , i = 1 , 2 , . . . , n (x_{i}',y_{i}'),i=1,2,...,n (xi,yi),i=1,2,...,n ,令新坐标系为观测值,旧坐标系中坐标设为无误差,当 n ≥ 3 n\geq3 n3时,则可列误差方程为:
[ v x 1 v y 1 ⋮ v x n v y n ] = [ 1 0 x 1 ′ − y 1 ′ 0 1 y 1 ′ x 1 ′ ⋮ ⋮ ⋮ ⋮ 1 0 x n ′ − y n ′ 0 1 y n ′ x n ′ ] [ x 0 ^ y 0 ^ λ c o s α ^ ^ λ s i n α ^ ^ ] − [ x 1 y 1 ⋮ x n y n ] (3) \left[ \begin{matrix} v_{x_1} \\ v_{y_1} \\ \vdots\\ v_{x_n} \\ v_{y_n} \\ \end{matrix} \right]=\left[ \begin{matrix} 1&0&x_{1}'&-y_{1}' \\ 0&1&y_{1}'&x_{1}' \\ \vdots&\vdots&\vdots&\vdots\\ 1&0&x_{n}'&-y_{n}' \\ 0&1&y_{n}'&x_{n}' \\ \end{matrix} \right] \left[ \begin{matrix} \hat{x_0} \\ \hat{y_0} \\ \hat{\lambda cos \hat{\alpha}} \\ \hat{\lambda sin \hat{\alpha}} \\ \end{matrix} \right]- \left[ \begin{matrix} x_1 \\ y_1 \\ \vdots \\ x_n \\ y_n \\ \end{matrix} \right] \tag{3} vx1vy1vxnvyn = 10100101x1y1xnyny1x1ynxn x0^y0^λcosα^^λsinα^^ x1y1xnyn (3)


V = B x ^ − l (4) V=B\hat{x}-l\tag{4} V=Bx^l(4)

{ l x = x i − ( x 0 + λ c o s α ⋅ x i ′ − λ s i n α ⋅ y i ′ ) l y = y i − ( y 0 + λ s i n α ⋅ x i ′ + λ c o s α ⋅ y i ′ ) (5) \begin{cases} l_x=x_i-(x_0+\lambda cos\alpha \cdot x_{i}'-\lambda sin\alpha \cdot y_{i}')\\ l_y=y_i-(y_0+\lambda sin\alpha \cdot x_{i}'+\lambda cos\alpha \cdot y_{i}')\\ \end{cases} \tag{5} {lx=xi(x0+λcosαxiλsinαyi)ly=yi(y0+λsinαxi+λcosαyi)(5)

  根据最小二乘原理 V T P V = m i n V^TPV=min VTPV=min 可得法方程:
B T B x ^ − B T l = 0 (6) B^TB\hat{x}-B^Tl=0\tag{6} BTBx^BTl=0(6)

  解法方程:
x ^ = ( B T B ) − 1 B T l = N B B − 1 W (7) \hat{x}=(B^TB)^{-1}B^Tl=N_{BB}^{-1}W\tag{7} x^=(BTB)1BTl=NBB1W(7)
X ^ = X 0 + x ^ (8) \hat{X}=X^0+\hat{x}\tag{8} X^=X0+x^(8)
式中: X 0 = [ x 0 , y 0 , λ c o s α , λ s i n α ] T = [ 0 , 0 , 1 , 0 ] T X^0=[x_0,y_0,\lambda cos \alpha,\lambda sin \alpha]^T=[0,0,1,0]^T X0=[x0,y0,λcosα,λsinα]T=[0,0,1,0]T
可求得参数 x 0 = X ^ [ 1 ] , y 0 = X ^ [ 2 ] , α = a r c t a n X ^ [ 4 ] X ^ [ 3 ] , λ = X ^ [ 3 ] 2 + X ^ [ 4 ] 2 x_0=\hat{X}[1],y_0=\hat{X}[2],\alpha=arctan\frac{\hat{X}[4]}{\hat{X}[3]},\lambda=\sqrt{\hat{X}[3]^2+\hat{X}[4]^2} x0=X^[1]y0=X^[2],α=arctanX^[3]X^[4],λ=X^[3]2+X^[4]2

二、代码实现

import numpy as npdef four_parameter_coordinate_conversion(old_pts, new_pts):"""四参数坐标转换:param old_pts: 旧坐标系:param new_pts: 新坐标系:return: 四参数计算结果"""if old_pts.shape[0] != new_pts.shape[0]:return Falseif old_pts.shape[0] < 3:return Falsen = old_pts.shape[0]  # 点的个数B = np.zeros((n * 2, 4))  # 矩阵BL = np.zeros((n * 2, 1))  # 矩阵LX = np.ones((4, 1))  # 解XdeltX = np.ones((4, 1))  # 迭代增量deltX# 四参数的初始值x0 = 0.0y0 = 0.0lamda = 1.0alpha = 0.0X[0] = x0X[1] = y0X[2] = lamda * np.cos(alpha)X[3] = lamda * np.sin(alpha)# 构建计算所需矩阵for i in range(0, n):B[2 * i, 0] = 1B[2 * i, 1] = 0B[2 * i, 0] = old_pts[i].xB[2 * i, 1] = -old_pts[i].yB[2 * i + 1, 0] = 0B[2 * i + 1, 1] = 1B[2 * i + 1, 0] = old_pts[i].yB[2 * i + 1, 1] = old_pts[i].xL[2 * i] = new_pts[i].xL[2 * i + 1] = new_pts[i].y# 迭代计算count = 0while np.linalg.norm(deltX) > 0.0001:l = L - B.dot(X)NBB = B.T.dot(B)W = B.T.dot(l)deltX = np.linalg.inv(NBB).dot(W)X += deltXcount += 1if count >= 10:breakprint("迭代次数:", count)return X

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

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

相关文章

005.PADS VX2.4自定义快捷键设置及修改

005.PADS VX2.4自定义快捷键设置及修改 若部分快捷键不符合操作习惯或者部分功能系统未设置快捷键&#xff0c;可自定义快捷键功能&#xff0c;自定义快捷键功能需要注意设置的按键需要与无模命令区分&#xff0c;以免与无模命令冲突&#xff1b;如若需要修改某个快捷功能&…

java排序算法之插入排序

文章目录 &#x1f4cb;插入排序概念&#x1f4d6;实现步骤&#x1f516;代码示例 &#x1f4c8;总结 &#x1f4cb;插入排序概念 插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法。它将数组划分为已排序和未排序两个部分&#xff0c;每次从未排序部分…

测试开源C#人脸识别模块ViewFaceCore(4:口罩检测、性别预测、年龄预测)

ViewFaceCore模块中的MaskDetector类支持识别人脸是否戴了口罩或有遮挡&#xff0c;主要调用PlotMask函数执行口罩检测操作&#xff0c;其函数原型如下所示&#xff1a; PlotMaskResult PlotMask<T>(T image, FaceInfo info)public class PlotMaskResult{//// 摘要:// …

Amazon Redshift Serverless – 现已正式推出新功能

去年在 re:Invent 上&#xff0c;我们推出了 Amazon Redshift Serverless 的预览版&#xff0c;这是 Amazon Redshift 的无服务器选项&#xff0c;可让您分析任何规模的数据&#xff0c;而无需管理数据仓库基础设施。您只需要加载和查询数据&#xff0c;并且只需为使用的内容付…

基于linux下的高并发服务器开发(第三章)- 3.10 死锁

deadlock.c #include <stdio.h> #include <pthread.h> #include <unistd.h>// 全局变量&#xff0c;所有的线程都共享这一份资源。 int tickets 1000;// 创建一个互斥量 pthread_mutex_t mutex;void * sellticket(void * arg) {// 卖票while(1) {// 加锁pt…

伦敦金在非农双向挂单

对伦敦金投资有一定经验的投资者都知道&#xff0c;在非农时期&#xff0c;伦敦金市场会出现很大的波动&#xff0c;那么我们如何才能抓住这些波动呢&#xff1f;答案是很难的。但是&#xff0c;有些投资者在多年实践中发明了一种双向挂单的方法&#xff0c;这里和大家一切分享…

SpringBoot Redis 多数据源集成支持哨兵模式和Cluster集群模式

Redis 从入门到精通【应用篇】之SpringBoot Redis 多数据源集成支持哨兵模式Cluster集群模式、单机模式 文章目录 Redis 从入门到精通【应用篇】之SpringBoot Redis 多数据源集成支持哨兵模式Cluster集群模式、单机模式0.前言说明项目结构Pom 依赖 1. 配置1.1 通用配置&#xf…

android app控制ros机器人二

Ros-Mobile的使用基本熟悉&#xff0c;接下来熟悉代码&#xff0c;记录中间的问题。 GitHub - ROS-Mobile/ROS-Mobile-Android: Visualization and controlling application for Android 使用android studio打开项目后有bug。 BUG&#xff1a; 1.FAILURE: Build failed wit…

RL 实践(5)—— 二维滚球环境【REINFORCE Actor-Critic】

本文介绍如何用 REINFORCE 和 Actor-Critic 这两个策略梯度方法解二维滚球问题参考&#xff1a;《动手学强化学习》完整代码下载&#xff1a;6_[Gym Custom] RollingBall (REINFORCE and Actor-Critic) 文章目录 1. 二维滚球环境2. 策略梯度方法2.1 策略学习目标2.2 策略梯度定…

2023年深圳杯数学建模C题无人机协同避障航迹规划

2023年深圳杯数学建模 C题 无人机协同避障航迹规划 原题再现&#xff1a; 平面上A、B两个无人机站分别位于半径为500 m的障碍圆两边直径的延长线上&#xff0c;A站距离圆心1 km&#xff0c;B站距离圆心3.5 km。两架无人机分别从A、B两站同时出发&#xff0c;以恒定速率10 m/s…

gensim conherence model C_V 值与其他指标负相关BUG

在我用gensim3.8.3 conherence model分析京东评论主题模型时&#xff0c; C_V 与npmi、u_mass出现了强烈的皮尔逊负相关&#xff1a; 这些地方也反映了类似问题&#xff1a; https://github.com/dice-group/Palmetto/issues/12 https://github.com/dice-group/Palmetto/issue…

微软亚研院提出模型基础架构RetNet或将成为Transformer有力继承者

作为全新的神经网络架构&#xff0c;RetNet 同时实现了良好的扩展结果、并行训练、低成本部署和高效推理。这些特性将使 RetNet 有可能成为继 Transformer 之后大语言模型基础网络架构的有力继承者。实验数据也显示&#xff0c;在语言建模任务上&#xff1a; RetNet 可以达到与…

Rust vs Go:常用语法对比(十三)

题图来自 Go vs. Rust: The Ultimate Performance Battle 241. Yield priority to other threads Explicitly decrease the priority of the current process, so that other execution threads have a better chance to execute now. Then resume normal execution and call f…

SpringBoot 配置⽂件

1.配置文件作用 整个项⽬中所有重要的数据都是在配置⽂件中配置的&#xff0c;⽐如&#xff1a; 数据库的连接信息&#xff08;包含⽤户名和密码的设置&#xff09;&#xff1b;项⽬的启动端⼝&#xff1b;第三⽅系统的调⽤秘钥等信息&#xff1b;⽤于发现和定位问题的普通⽇…

VMware horizon 8 建立手动桌面池

准备一台win10的虚拟机&#xff0c;改静态IP,计算机名&#xff0c;加入域&#xff0c;把Agent软件上传到机器中。 2&#xff1a;右键管理员身份安装程序。 一般默认 根据自己实际情况选择 启用桌面远程功能 安装完成 安装完成以后创建一个快照&#xff0c;以后是好知道机…

模拟Stevens Lewis描述的小型飞机纵向动力学的非线性动态反演控制器研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 针对Stevens和Lewis描述的小型飞机纵向动力学的非线性动态&#xff0c;研究非线性动态反演控制器可以是一个有趣的课题。动态反演控制器的目标…

会捷通云视讯 list 目录文件泄露漏洞

劳动永远是医治精神创伤的良药。 漏洞描述 会捷通云视讯某个文件 list参数 存在目录文件泄露漏洞&#xff0c;攻击者通过漏洞可以获取一些敏感信息 漏洞复现 构造payload访问漏洞url&#xff1a; /him/api/rest/V1.0/system/log/list?filePath../漏洞证明&#xff1a; 文…

【iOS】KVOKVC原理

1 KVO 键值监听 1.1 KVO简介 KVO的全称是Key-Value Observing&#xff0c;俗称"键值监听"&#xff0c;可以用于监听摸个对象属性值得改变。 KVO一般通过以下三个步骤使用&#xff1a; // 1. 添加监听 [self.student1 addObserver:self forKeyPath:"age"…

音视频——帧内预测

H264编码(帧内预测) 在帧内预测模式中&#xff0c;预测块P是基于已编码重建块和当前块形成的。对亮度像素而言&#xff0c;P块用于44子块或者1616宏块的相关操作。44亮度子块有9种可选预测模式&#xff0c;独立预测每一个44亮度子块&#xff0c;适用于带有大量细节的图像编码&…

云安全攻防(二)之 云原生安全

云原生安全 什么是云原生安全&#xff1f;云原生安全包含两层含义&#xff1a;面向云原生环境的安全和具有云原生特征的安全 面向云原生环境的安全 面向云原生环境的安全的目标是防护云原生环境中的基础设施、编排系统和微服务系统的安全。这类安全机制不一定会具有云原生的…