opencv建立椭圆边缘检测路径(四)——剔除距离过近的边缘点

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;
}

一种源代码:

(下班,未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值