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

【机器视觉------标定篇(二)】三点成圆算法(求相机旋转中心)

应用场景

机器视觉项目应用中,相机安装在机器人上,并且需要定位产品返回坐标偏差以及角度偏差。
与九点标定配合使用,实现精准角度补偿。

算法输入

不共线的三点坐标 A(X₁,Y₁) ,B(X₂,Y₂) ,C(X₃,Y₃)
在这里插入图片描述

算法原理及实现

原理:

由图可知,线OA=OB=OC=外接圆的半径(r),从三点向【以O点为原点的坐标系】做垂线。由勾股定理可得:

(X - X₀)² + (Y - Y₀)² = r ²

由上式带入三点坐标可的可得:
在这里插入图片描述
公式变换可得(由公式①-②,①-③):
计算圆心公式
由于上公式可得,该式有唯一解的条件为:
在这里插入图片描述
即任两点组成的斜率不能相等,也验证了三点成圆条件:三点不共线。

实现:

设:
a = 2(X₁ - X₂)
b = 2(Y₁ - Y₂)

c = 2(X₁ - X₃)
d= 2(Y₁ - Y₃)

e = (X₁)² - (X₂)² + (Y₁)² - (Y₂)²
f = (X₁)² - (X₃)² + (Y₃)² - (Y₃)²

代回方程:
在这里插入图片描述

代码实现

 public PointF CalculateCicular(PointF px1, PointF px2, PointF px3)
{
	float x1, y1, x2, y2, x3, y3;
	float a, b, c, g, e, f, X, Y;
	x1 = px1.X;
	y1 = px1.Y;
    x2 = px2.X;
    y2 = px2.Y;
    x3 = px3.X;
    y3 = px3.Y;
    a = 2 * (x1 - x2);
    b = 2 * (y1 - y2);

    c = 2 * (x1 - x3);
    d = 2 * (y1 - y3);
    
    e = x1 * x1 - x2 * x2 + y1 * y1 - y2 * y2;
    f = x1 * x1 - x3 * x3 + y1 * y1 - y3 * y3;
    
    X = (e * d - b * f) / (a * d - b * c);  
    Y = (e * c - a * f) / (b * c - a * d);
    //R = (float)Math.Sqrt((X - x1) * (X - x1) + (Y - y1) * (Y - y1)); //半径

     PointF center = new PointF(X, Y);
     return center;
}

http://www.kler.cn/a/11842.html

相关文章:

  • win32 / WTL 开发多线程应用,子线程传递大对象给UI线程(主窗口)的方法
  • Flink_DataStreamAPI_输出算子Sink
  • AI 写作(五)核心技术之文本摘要:分类与应用(5/10)
  • 【Qt-ROS开发】使用 Qt Creator 构建和编译含 ROS 库的 Qt 项目
  • [ComfyUI]Flux:繁荣生态魔盒已开启,6款LORA已来,更有MJ6写实动漫风景艺术迪士尼全套
  • 监控录音如何消除杂音?降低录音噪音的五个技巧
  • 【算法LearnNO.1】算法介绍以及算法的时间复杂度和空间复杂度
  • Python遥感开发之FY的批量处理
  • 关于二叉树访问顺序的选择题
  • 中核科技:科技匠心 智启未来
  • huggingface transformer模型介绍
  • 【记录】windows中edge常用快捷键
  • 统信UOS专业版系统安装教程 - 手动分区安装UOS系统
  • MinIO基础教程
  • 矩阵键盘+CH559制作国产USB矩阵键盘
  • 2023年4月 每日一题 day2
  • 丝滑的打包部署,一套带走~
  • tpm2-tools源码分析之tpm2_create.c(2)
  • 如何使用Socks5代理IP提高网络安全性
  • 【Python】ChatGPT入门
  • 找漏洞赚外快?给ChatGPT挑毛病,最高奖励14万
  • http状态码
  • Go并发(2)
  • JUC-01 线程的创建和状态转换
  • 浪潮:2022年净利同比增长51.39%
  • Windows服务器使用代码SSH免密登录并执行脚本