这篇论文全名叫Effective ellipse detection method in limited-performance embedded system for aerospace application,一种适用于航天应用的高性能嵌入式椭圆检测方法。这篇论文发表在Advances in Mechanical Engineering 是4区的SCI。这篇论文主要是将椭圆检测应用于航天,针对航天问题专门做的椭圆检测,下面对其进行进一步分析。
这次阅读,主要是分析其与传统方法不一样的地方,即分析这篇论文针对航天部分主要改进了那些地方,其他常见的方法不具体细说,查阅之前论文即可读明白
航天问题主要难点是:
受限的计算性能和内存资源,这篇论文在保证精度和速度的前提下解决这个问题。
论文使用了FPGA A3PE1500-FG676 Actel和DSP TMS320C6672 TI结合着实现了这个算法,这个算法与之前一样,是基于边缘连接的方法。
文章目录
1 边缘轮廓的提取
这部分主要是检测边缘,提取边缘线。与传统方法不同的是,这里用了
加速边缘提取的方法,如果嵌入式需要加速,直接阅读其论文即可,这里仅仅是加速,因此不细致分析了(有需要应用嵌入式加速的话在评论区告诉我,我会给补上,方法不是很难)。
在复现时候,建议使用matlab里的canny进行边缘提取,有两点好处,第一,噪声少,第二,sobel梯度平滑,不会有太多的噪声。
提取的边缘满足两个性质:
- 边缘段个数大于阈值Th1
- 弧段中点到其首尾连成的直线的距离应该大于阈值Th2,防止其为直线。
2 弧段分割与组合
分割部分
这部分与传统方法不同的是,这里没有利用多边形逼近算法来近似其曲率信息,其使用sobel角度变换程度来判断分割点。
e3=(p1,p2,..,pn)为提取出的一条边缘点,
θ=(θ1,θ2,...,θn)为期对应的sobel梯度。
G=(g1,g2,..,gn)为对应的梯度变化率,其计算方式为
gi=θi+1−θi。
值得注意的是,在这里计算gi没有完全写清楚,在相减之后,一定要将梯度再进行角度处理,防止出现大于180°的角度变量量。
每个弧段的极大值
S=(s1,s2,...,sn−1)计算方式如下所示:
si={10(gi>gi−1 and gi>gi+1) and ∣gi−gi−1∣>Th3otherwise
组合部分
分割出来的弧段仍然需要满足上述提取边缘时候给出的两个准则,即个数大于阈值
Th1,中点到起始点对应的直线的距离小于
Th2。两个弧段是否可以组合需要需要满足三个条件,这些条件将会在下一节进行说明(我怎么感觉这个论文的结构有问题,(
/ω\))。
3 椭圆提取
任意两个弧段组合需要满足三个条件。
条件1: 条件1的说明可以具体看下面这张图,针对于航天目标来说,很少出现同一个椭圆其梯度差异很大的情况,因此作者认为两个弧段的组合
其梯度应具有相似性。这也是与常规方法不同的地方。
对于一个弧段
ei4,设其首尾点,弧段中点为
p1,pn,pn/2。从
p1,pn中点到
pn/2构成向量
v,同时在点
pn/2处的梯度为
θn/2,那么这个弧段按照如下公式进行标记。
Dei4={−+if 23π>∣θv−θn/2∣>2πotherwise
如果两个边缘弧段
li4,lj4可以组合,那么其应满足
Dli4Dlj4>0,否则不能组合。
条件2: 这个条件主要是判断两个弧段的位置关系,对于弧段
ei,根据其首尾点可以计算出一条直线
li:f(x)=ax+by+c=0,a⩾0。
先计算弧段
i的凹凸性,根据弧段
i的中点