首页 > 编程语言 >二维椭圆拟合算法及推导过程

二维椭圆拟合算法及推导过程

时间:2024-11-10 08:49:25浏览次数:3  
标签:椭圆 推导 sqrt 二维 拟合 y0 x0

目录

1、间接平差法

  该方法忽略了半长轴相对于 x x x轴的旋转角度,需要较好的初值才能拟合成功。

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

在这里插入图片描述

2、最小二乘法

  一般斜椭圆具有5个参数,即椭圆中心坐标 ( x 0 , y 0 ) ( x_0 , y_0 ) (x0​,y0​) (x_0,y_0),椭圆长径和短径 R 1 , R 2 R_1,R_2 R1​,R2​以及坐标轴旋转的角度 ϕ \phi ϕ,只需要求解了这几个参数椭圆就被唯一确定了。那么对于椭圆的求解则至少需要5个独立的方程。即输入的点的个数至少是5个。
  二维椭圆的一般方程为:
A x 2 + B x y + C y 2 + D x + E y + 1 = 0 (1) Ax^2+Bxy+Cy^2+Dx+Ey+1=0\tag{1} Ax2+Bxy+Cy2+Dx+Ey+1=0(1)
其与我们想要参数之间的转换关系是:
  参考文章:椭圆拟合理论推导和Matlab实现说怎么得来的不是重点,故直接给出截图。
在这里插入图片描述
  根据间接平差与最小二乘的关系可知,整个理论推导的过程就是间接平差理论中法方程的建立过程,也不是什么重点和难点,原文写的偏复杂化了,故省略。构建完法方程采用任意一种自己喜欢的方程解算方法进行求解即可。所以,参考文章里的代码实现过程也过于复杂了。

3、matlab案例

%% --------------------------最小二乘求解----------------------------------
X = lsqlin(NBB,W);
%% --------------------------获取椭圆参数----------------------------------
a = X(1); b = X(2); c = X(3); d = X(4); e = X(5);
x0 = (b * e - 2 * c * d) / (4 * a * c - b * b);
y0 = (b * d - 2 * a * e) / (4 * a * c - b * b);
r1 = sqrt(2 * (a * x0^2 + c * y0^2 + b * x0 * y0 - 1) / (a + c + sqrt((a - c)^2 + b^2)));
r2 = sqrt(2 * (a * x0^2 + c * y0^2 + b * x0 * y0 - 1) / (a + c - sqrt((a - c)^2 + b^2)));
phi = 0.5 * atan2(b, a - c);

4、案例结果

在这里插入图片描述

5、参考链接

标签:椭圆,推导,sqrt,二维,拟合,y0,x0
From: https://blog.csdn.net/qq_36686437/article/details/143579044

相关文章

  • 二维数组和数组指针数组的关系
    在深入理解指针end中,我在最后写了一长段代码#include<stdio.h>voidtest1(intarr[][5],intx,inty)//voidtest1(int(*p)[5],intx,inty){ for(inti=0;i<x;i++) { for(intj=0;j<y;j++) { //printf("%d",*(*(p+i)+j)); print......
  • 240. 搜索二维矩阵 II(中)
    目录题目法一、暴力法二、二分查找法三、Z字形查找题目编写一个高效的算法来搜索mxn矩阵matrix中的一个目标值target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。法一、暴力varsearchMatrix=function(matrix,target){......
  • OpenCV图像处理——基于OpenCV的直线检测与直线拟合
    OpenCV图像处理——基于OpenCV的直线检测与直线拟合前言:本节使用霍夫变换进行直线检测,使用最小二乘法拟合直线。1直线检测直线检测是图像处理中一种常见的任务,旨在从图像中提取出直线。这在许多应用中都很有用,例如道路检测、建筑物轮廓提取、对象检测等。1.1霍夫变换......
  • Html5QRCode扫描条形码+二维码
    代码:<html><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width,initial-scale=1.0"&......
  • c语言二维数组
    一、创建二维数组并初始化在c语言中二维数组可以在声明时直接初始化。#include<stdio.h>intmain(){//创建一个3x3的二维数组并初始化intmatrix[3][3]={{1,2,3},{4,5,6},{7,8,9}};return0;}二、访问二......
  • Halcon 二维码识别
        二维条形码(2-DimensionalBarCode)在水平和竖直方向的二维空间存储信息,其特点是信息容量大、安全性强、保密性高(可加密)、识别率高、编码范围广等。除此之外,二维条形码还可将汉字、图像等信息进行优化编码处理具有全方位识别,并可引入加密机制的功能。因此,二维条形码......
  • 二维树状数组
    前置知识树状数组(不会就学一下再来)简介因为树状数组可以非常简洁解决序列上的一些问题,所以考虑能否用树状数组解决矩阵(二维序列)的问题。比较暴力的想法是对于每一横行建一个树状数组,再对每一列建一个树状数组统计答案。但这样显然要\(n+m\)个树状数组,但是我们发现这些树状数......
  • 5.Java 数组(一维数组、二维数组、数组实例实操)
    一、数组1、基本介绍【数据类型】[]【数组名】=new【数据类型】[【长度】];【数据类型】[]【数组名】={【元素1】,【元素2】...};【数据类型】[]【数组名】=new【数据类型】[]{【元素1】,【元素2】...};数组中的元素可以是任何数据元素,包括基本类......
  • torch--模型选择-欠拟合-过拟合
    """模型选择,欠拟合、过拟合"""importmathimportnumpyasnpimporttorchfromd2limporttorchasd2lfromIPythonimportdisplayimportmatplotlib.pyplotaspltfromtorchimportnnmax_degree=20......
  • 《XGBoost算法的原理推导》12-1加法模型表达式 公式解析
    本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。公式(12-1)是XGBoost的加法模型表达式,用于描述如何通过多个基模型的组合来进行预测。我们来逐步解析这个公式。公式(12-1)的形式......