C++ 课程设计,图片元素的获取,拟合椭圆

WX: help-assignment

C++ 课程设计,图片元素的获取,拟合椭圆

代码实现步骤:

  1. 读取.jpg 图片(259219443),将图片中的x∈(700,1450)y∈(1,1944)的像素值置为0;

  2. 提取图片的r、g、b 通道,按照(1r-0.6g-0.3*b)对图像中的每个像素值进行重置;

  3. 二值化图片,二值化阈值人为可调(暂定0.2);

  4. 提取二值化后灰度值为1 的所有白点的横纵坐标,将所有坐标保存到数组A 中;

  5. 利用4 中的所有点,拟合椭圆,得到椭圆参数x0,y0,a,b,phi,求出拟合椭圆的两焦点坐标;

  6. 计算4 中所有[(点到椭圆两焦点距离之和)-2a)]的值d;定义可变阈值u=15,找出满足d>u和d<-u 的所有点,将这些满足条件的点的横纵坐标和d 值保存到数组B1(满足d>u)和B2(满足d<-u);

  7. 再将6 中满足条件的点B1、B2 从4 的数组A 中删除,利用剩下的点再拟合一次椭圆,定义角度deg=2(°),按照极坐标将拟合椭圆的(0,deg+50)、(125-eg,235+deg)、(310-deg,360)三个范围内的圆弧,以点的形式保存到数组C 中,定义变量-总点数N=1000 控制点的密度;

  8. 按照极坐标,根据7 拟合椭圆的圆心将360°圆周均分为36 个区域(如下图所示),根据B1、B2 点坐标与7 拟合椭圆圆心的相对位置分别对B1、B2 中的点进行分区,将坐标和
    d 值保存到两个数组D1、D2 中;
    在这里插入图片描述

  9. 将36 个区域的第1 个区域移动到第36 个区域,其他区域前移一位,然后将相邻的两区的点坐标和d 值合并,将18 个区的结果保存到数组E1、E2 中;

  10. 找到每个区域中d 值的最大值(舍弃其他坐标和d 值),将最大d 值对应的点坐标保存到数组F1、F2 中;

  11. 找到F1、F2 数组中的非零点,在椭圆点的数组C 中,找到每个F1、F2 数组中非零点的最近点,将其坐标保存到数组G1、G2 中;
    定义变量
    fx=1.225864026416392e+03、
    fy=1.222035920702631e+03、
    cx=1.262867786018872e+03、
    cy=9.965525461409534e+02、
    数组
    distor=[-0.062350435204761,0.084767499824599,-2.758193383474388e-04,0.001373886815629,
    -0.031851981006323]、
    k1=-0.062350435204761、
    k2=0.084767499824599、
    数组
    p=[-3.216993173751905e-26,-3.160339026653889e-26,1.091798484384938e-26,9.32639128826
    0196e-28,-7.223471162545130e-27,2.253257582218905e-27,-1.091261397869860e-24,2.930349
    684261594e-25,4.866930211908356e-26,-9.193306331385255e-24]、
    dx = 1.4e-03、
    dy = 1.4e-03;

  12. 将G1、G2 和F1、F2 中的横坐标-cx(=ximg),纵坐标-cy(=yimg);将上述横纵坐标和11 中的参数代入下列方程组,得到xc,yc,zc,保存到数组M1、M2 和N1、N2 中;
    在这里插入图片描述

  13. 计算数组M1(点)和数组N1 对应点(最近点)的空间距离,将空间距离每个空间距离×sin(26.5°),将距离不为0 的值保存到数组DIST_1、DIST_2 中;

WX: help-assignment

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值