1.为什么要剔除距离过近的边缘点
接上节,线性边缘检测后,会得到若干边缘点,有些边缘点强度非常相似,但是对于这一部分边缘点又想删去一部分,留下一部分,比如剔除距离过近的边缘点。
如图所示(图片出自Adaptive Vision Studio 4.12 Professional,侵删):
上图中想要得到的点是0号点和10号点,然而中间有很多相同强度的边缘,造成了干扰,所以需要把这些“距离过近”的点剔除掉。
这个方法的应用在于:对于线性排列的重复物体,对其定位时,只希望检测到某个物体的一个最外层边缘,而不希望看到物体里面的边缘也被检测到,这时可以剔除距离过近的边缘点。
2.剔除算法
点与点之间距离很好计算,所以直接用整数来代替点,以整数之间的差值代表点间距。
之前试了很多方法效果都不理想,在这里我给出最终的方法,和源码,希望看到的哥哥姐姐们给这篇文章点个赞~QAQ
方法:对于一个n个元素的整数数组 QAQ [x1,x2,x3…,xn],
规定数组元素间最小距离为β。
伪代码:
{
if(|x1 - x2| < β)将x2赋值为nil,if(|x1 - x3| < β)将x3赋值为nil,......,if(|x1 - xn| < β)将xn赋值为nil;
if(|x2 - x3| < β)将x3赋值为nil,if(|x2 - x4| < β)将x4赋值为nil,......,if(|x2 - xn| < β)将xn赋值为nil;
.
.
.
if(|x(n-1) - xn| < β)将xn赋值为nil;
QAQ.删去所有nil元素(假设QAQ有删除指定元素的方法);
return QAQ;
}
一种源代码:
(下班,未完待续)