2d椭圆拟合学习

算法来自论文《 Direct Least Square Fitting of Ellipses》

《NUMERICALLY STABLE DIRECT LEAST SQUARES FITTING OF ELLIPSES》

相关文章 

论文阅读:·直接拟合椭圆 Direct Least Square Fitting of Ellipsesicon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/645391510Fitting Ellipse拟合椭圆的若干方法分析

论文源码找呀找~

给出一些椭圆上离散的点的横纵坐标,怎么用matlab拟合出椭圆方程比如这些点是(1,0) (-1,0) (0,2 ) (0,-2)_作业帮

没说来源,表示看不懂

直接最小二乘法拟合椭圆-CSDN博客

High-quality-ellipse-detection/fitEllipse.m at master · hnexplorer/High-quality-ellipse-detection · GitHub

我想用MATLAB实现 将近似椭圆形的一些离散点 拟合成椭圆曲线_百度知道

基于直接最小二乘的椭圆拟合(Direct Least Squares Fitting of Ellipses)

https://github.com/seisgo/EllipseFit

EllipseFitting/EllipseFitting at master · xiamenwcy/EllipseFitting · GitHub

看上去上面的代码似乎都出自同一处

继续找呀找

Fitzgibbon, Pilu, Fisher: Direct Least Squares Fitting of Ellipses

这个应该代码源头了, 根据上面两篇论文,对着里面的公式来看

% unnormalize 这一句注释千的代码还是比较好理解

但是这句话是什么意思呢?

par = [
    A(1)*sy*sy,   ...
    A(2)*sx*sy,   ...
    A(3)*sx*sx,   ...
    -2*A(1)*sy*sy*mx - A(2)*sx*sy*my + A(4)*sx*sy*sy,   ...
    -A(2)*sx*sy*mx - 2*A(3)*sx*sx*my + A(5)*sx*sx*sy,   ...
    A(1)*sy*sy*mx*mx + A(2)*sx*sy*mx*my + A(3)*sx*sx*my*my   ...
    - A(4)*sx*sy*sy*mx - A(5)*sx*sx*sy*my   ...
    + A(6)*sx*sx*sy*sy   ...
    ]';

我在stack overflow上找到了答案

Unnormalization of ellipse coefficients after direct ellipse fitting

可能是本人数学基础不好的原因,接下来的代码就完全看不懂了

一番求助,现在应该是理解了

椭圆几何参数与椭圆方程参数的相互转换

一般椭圆方程标准化及其推导

% Convert to geometric radii, and centers

thetarad = 0.5*atan2(par(2),par(1) - par(3));

%
cost = cos(thetarad);
sint = sin(thetarad);
sin_squared = sint.*sint;
cos_squared = cost.*cost;
cos_sin = sint .* cost;

Ao = par(6);F
Au =   par(4) .* cost + par(5) .* sint;D
Av = - par(4) .* sint + par(5) .* cost;E
Auu = par(1) .* cos_squared + par(3) .* sin_squared + par(2) .* cos_sin;A
Avv = par(1) .* sin_squared + par(3) .* cos_squared - par(2) .* cos_sin;C

% ROTATED = [Ao Au Av Auu Avv]

将x',y'代入 

并方程整理 得 Auu.x^2+Bxy+Avv.y^2+Au.x+Av.y+Ao=0

相当于将椭圆逆时针绕坐标原点旋转了thetarad

新的方程下椭圆已经没有旋转,也就是B=0,为什么B=0呢

因为

不知道这里理解的对不对?

计算椭圆中心点,根据

tuCentre = - Au./(2.*Auu);//刚好是-D/(2A)
tvCentre = - Av./(2.*Avv);//刚好是-E/(2C)


wCentre = Ao - Auu.*tuCentre.*tuCentre - Avv.*tvCentre.*tvCentre;

//因为tuCentre,tvCentre是逆时针旋转得到的椭圆中心,再绕原点顺时针旋转thetarad 才是最初椭圆的中心坐标
uCentre = tuCentre .* cost - tvCentre .* sint;
vCentre = tuCentre .* sint + tvCentre .* cost;

//长短半轴根据

进行理解B=0,注意不带旋转的椭圆的中心上面已经计算得到了,和代码就完全对应得上了

Ru = -wCentre./Auu;
Rv = -wCentre./Avv;

Ru = sqrt(abs(Ru)).*sign(Ru);
Rv = sqrt(abs(Rv)).*sign(Rv);

a = [uCentre, vCentre, Ru, Rv, thetarad];

以上就是数学盲的我对这个算法的代码的初步理解了。

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

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

相关文章

线段树离散化、二分搜索、特别修改

699. 掉落的方块 - 力扣(LeetCode) 1.如果直接按照原落点的值构造线段树,空间开辟会过大,所以收集所有出现过的点进行离散化 2.方块a落在1--3点,b落在3--4点,如果直接按照落点修改,查询3时位置…

基于Docker搭建Graylog分布式日志采集系统

文章目录 一、简介二、Graylog1、主要特点2、组件3、工作流程介绍4、使用场景 三、Graylog 安装部署1、 安装 docker2、安装docker compose3、 安装graylog4、Graylog控制台 四、springboot集成Graylog 一、简介 Graylog是一个开源的日志管理工具,主要功能包括日志…

go 切片slice学习总结

切片的结构 切片的底层结构: type SliceHeader struct {Data uintptr // 指向底层数组的指针 Len int //长度Cap int //空间容量 } 切片的初始化 1 通过数组或者已有的slice创建新的slice 1.1 使用数组创建切片 通过数组的一部分来初始化切片。 …

数据结构-c/c++实现栈(详解,栈容量可以动态增长)

一.栈的基本介绍 栈是一种只能够在一端进行插入和删除的顺序表。如下图 空栈:表示不含任何元素的栈 栈顶:表示允许进行插入和删除元素的一端 栈底:表示不允许进行插入和删除元素的一端 即栈是一种后进先出的线性表数据结构 二.栈的常见操…

为什么我的手机卡需要快递员给激活?这到底安全吗?

网友咨询:网上申请了一张新卡,本来想着自己激活,没想到快递员先打电话过来说,要身份证给帮助激活,所以我想问一下,网上申请的卡是不是都是快递给激活呢?安不安全呢? 首先要说一下&a…

第4章-08-用Python Requests库模拟浏览器访问接口

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

CSRF漏洞的预防

目录 CSRF漏洞预防措施 深入研究 CSRF Token的工作原理是什么? 为什么仅依靠Referer头字段来防范CSRF攻击不是完全可靠? SameSite cookie属性如何防止CSRF攻击? SameSite Cookie属性的作用 如何通过SameSite属性防止CSRF攻击 导图 CS…

Eclipse 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 打开字体设置页面3. 找到Text Font,点击修改4. 修改字体 前言 Eclipse 自定义字体大小,统一设置为 Courier New ,大小为 三号 具体操作 【Windows】>【Perfer…

Qt第二课----信号和槽

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

C#笔记4 详细解释事件及其原型、匿名方法和委托的关系

匿名方法 定义 匿名方法允许一个与委托关联的代码被内联的写入使用委托的位置。 语法形式 delegate(参数列表) {代码块 } 前文说过,委托是定义了一个公司,公司专门承接某一类型的任务。 委托的实例化就是公司把任务交给了具体的职员(方…

掌握测试的艺术:深入探索Python的pytest库

文章目录 **掌握测试的艺术:深入探索Python的pytest库**背景:为什么选择pytest?pytest是什么?如何安装pytest?5个简单的库函数使用方法1. pytest.main()2. pytest.skip()3. pytest.mark.parametrize()4. pytest.raises…

基于物联网的低成本便携式传感器节点用于火灾和空气污染的检测与报警

目录 摘要 引言 材料和方法 传感器节点 IoT 微控制器 颗粒物传感器 环境和气体传感器 MQTT代理 Node-Red监控平台 系统结构 数据存储 工作描述 实验结果 讨论 结论 致谢 参考文献 这篇论文的标题是《Low-cost IoT-based Portable Sensor Node for Fire and Air…

STM32G474之TIM1捕获1模式

STM32G474采用TIM8产生方波信号,使用TIM1工作于捕获1模式,并计算方波频率。捕获方波周期,在有些开发中,还是能用到。建议开发时使用HAL库自带的库函数。使用寄存器方法也可以实现,但是后期修改不太方便。 测试时&…

利用 Web 浏览器构建 Java Media Player

如果您需要在 Java 桌面应用程序中嵌入媒体播放器,有几种方法可供选择: 您可以使用 JavaFX Media API 来实现所有必需的媒体播放器功能。虽然稍显过时但仍然可用的 Java Media Framework 也可以作为一种解决方案。您可以集成像 VLCJ 这样的第三方 Java …

如何选择适合企业的财税自动化解决方案

财税自动化解决方案是现代企业提升财务管理效率、降低运营成本的关键工具。然而,市场上的财税自动化产品琳琅满目,功能各异,企业在选择时常常感到困惑。本文金智维将从中小型的需求出发,帮助企业了解如何选择适合自身的财税自动化…

QT实战项目之音乐播放器

项目效果演示 myMusicShow 项目概述 在本QT音乐播放器实战项目中,开发环境使用的是QT Creator5.14版本。该项目实现了音乐播放器的基本功能,例如开始播放、停止播放、下一首播放、上一首播放、调节音量、调节倍速、设置音乐播放模式等。同时还具备搜索功能,通过搜索歌曲名字…

另一种关于类的小例

前言 我们还是以一段关于构造函数的代码作为开端,我们以之前银行家的小项目为背景 class Account {constructor(owner, currency, pin) {this.owner owner;this.currency currency;this.pin pin;} }const ITshare new Account(ITshare, EUR, 21211); console.…

零基础入门天池镜像提交--windows场景VirtualBox虚拟机安装linux系统并ssh远程登录,直至镜像的制作及提交

背景:由于本人只有一台windows,天池上的比赛需要提交镜像,自己试了好多方法给windows安装linux,但是始终没安装成功。最终采用在利用VirtualBox安装linux虚拟机,使用MobaXterm进行ssh登陆linux,镜像的制作、push、提交…

Java+Swing实现学生选课管理系统

JavaSwing实现学生选课管理系统 一、系统介绍二、系统展示1.课程查询2.课程添加3.退课 三、系统实现四、其他1.其它系统2.获取源码 一、系统介绍 本系统实现了学生登录和管理员登录,学生实现选课,查看已选课程,修改密码,查看学生…

Java | Leetcode Java题解之第386题字典序排数

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> lexicalOrder(int n) {List<Integer> ret new ArrayList<Integer>();int number 1;for (int i 0; i < n; i) {ret.add(number);if (number * 10 < n) {number * 10;} els…