自动喂鱼的核心思想就是要判断是否有鱼在投食区域里,其实有许多方法都可以实现,比边缘探测更准确的方法有很多,但是为什么选择边缘探测这个算法,主要有以下的原因:
- 树莓派的处理能力不是很强,所以需要找到一个比较轻量级的算法,这样对硬件的压力会小一点
- 这个设备是给生物实验室开发的,所以实验之前就是有假设的,假设喂鱼区底面是白色的,而且底部什么都没有,没有水草,没有石头,这些假设对于实现边缘探测来说很重要
下面我们来简单的讲一下边缘探测,边缘产生通常是因为图像中像素密度所产生的变化,比如说表面的不连续性,图像颜色发生大的变化,纹理等等。这些都会导致图像相邻的像素点之间产生大的密度差,那我们探测出这些密度变化不就可以知道边缘在哪里了吗?那我们如何探测这些密度变化呢,一种方法是用一阶导数,下面给大家举个列子
上面这幅图指的是输入,这个输入信号有一天边缘,在一阶求导之后,可以看到如下,
很明显,这个边缘很容易被判断出来