WX: help-assignment
C++ 课程设计,图片元素的获取,拟合椭圆
代码实现步骤:
-
读取.jpg 图片(259219443),将图片中的x∈(700,1450)y∈(1,1944)的像素值置为0;
-
提取图片的r、g、b 通道,按照(1r-0.6g-0.3*b)对图像中的每个像素值进行重置;
-
二值化图片,二值化阈值人为可调(暂定0.2);
-
提取二值化后灰度值为1 的所有白点的横纵坐标,将所有坐标保存到数组A 中;
-
利用4 中的所有点,拟合椭圆,得到椭圆参数x0,y0,a,b,phi,求出拟合椭圆的两焦点坐标;
-
计算4 中所有[(点到椭圆两焦点距离之和)-2a)]的值d;定义可变阈值u=15,找出满足d>u和d<-u 的所有点,将这些满足条件的点的横纵坐标和d 值保存到数组B1(满足d>u)和B2(满足d<-u);
-
再将6 中满足条件的点B1、B2 从4 的数组A 中删除,利用剩下的点再拟合一次椭圆,定义角度deg=2(°),按照极坐标将拟合椭圆的(0,deg+50)、(125-eg,235+deg)、(310-deg,360)三个范围内的圆弧,以点的形式保存到数组C 中,定义变量-总点数N=1000 控制点的密度;
-
按照极坐标,根据7 拟合椭圆的圆心将360°圆周均分为36 个区域(如下图所示),根据B1、B2 点坐标与7 拟合椭圆圆心的相对位置分别对B1、B2 中的点进行分区,将坐标和
d 值保存到两个数组D1、D2 中;
-
将36 个区域的第1 个区域移动到第36 个区域,其他区域前移一位,然后将相邻的两区的点坐标和d 值合并,将18 个区的结果保存到数组E1、E2 中;
-
找到每个区域中d 值的最大值(舍弃其他坐标和d 值),将最大d 值对应的点坐标保存到数组F1、F2 中;
-
找到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; -
将G1、G2 和F1、F2 中的横坐标-cx(=ximg),纵坐标-cy(=yimg);将上述横纵坐标和11 中的参数代入下列方程组,得到xc,yc,zc,保存到数组M1、M2 和N1、N2 中;
-
计算数组M1(点)和数组N1 对应点(最近点)的空间距离,将空间距离每个空间距离×sin(26.5°),将距离不为0 的值保存到数组DIST_1、DIST_2 中;
WX: help-assignment