我有与这些类似的蚊子图像,我想自动绕着图像中每只蚊子的头部转圈。它们显然处于不同的方向,并且在不同的图像中它们的数量是随机的。有些错误很好。算法的任何想法来做到这一点?
3 回答
这个问题类似于人脸检测问题,因此您可以先尝试一种简单的方法,并在必要时对其进行改进。
首先,您需要重新创建训练集。为此,您想提取带有什么是蚊头或什么不是蚊头的示例的小图像。
然后你可以使用这些图像来训练分类算法,注意要有一个平衡的训练集,因为如果你的数据偏向一个类,它会影响算法的性能。由于图像是二维的,算法通常只将一维数组作为输入,因此您还需要将图像排列为该格式(例如:http ://en.wikipedia.org/wiki/Row-major_order )。
我通常使用支持向量机,但其他算法(例如逻辑回归)也可以解决问题。如果您决定使用支持向量机,我强烈建议您检查 libsvm ( http://www.csie.ntu.edu.tw/~cjlin/libsvm/ ),因为它是一个非常成熟的库,绑定了多种编程语言。他们还有一个非常容易遵循的针对初学者的指南(http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf)。
如果你有足够的数据,你应该能够避免对方向的容忍。如果您没有足够的数据,那么您可以创建更多的训练行,并旋转一些样本,这样您将拥有一个更具代表性的训练集。
至于预测,给定一张图像,您可以使用网格切割它,其中每个单元格的尺寸与您在训练集上使用的尺寸相同。然后,您将每个图像传递给分类器并标记分类器为您提供正输出的那些方块。如果你真的需要圆圈,那么取给定正方形的中心,半径将是正方形边尺寸的一半(很抱歉说得很明显)。
所以在你这样做之后,你可能会遇到尺寸问题(一些蚊子可能看起来比其他蚊子更靠近相机),因为我们没有训练算法来容忍缩放。此外,即使所有蚊子的规模都相同,我们仍然可能会因为它们不完全适合我们的网格而错过其中的一些。为了解决这个问题,我们需要重复这个过程(网格切割和预测),将给定的图像重新缩放到不同的大小。有多少个尺寸?那么在这里你必须通过实验来确定。
这种方法对您正在使用的“窗口”的大小很敏感,这也是我建议您尝试的方法。
有一些研究可能有用:
从您提供的图片来看,这似乎是一个非常困难的图像识别问题,我怀疑您将获得接近可接受的识别率。
我会推荐一种更简单的方法:
首先,如果您对图像有任何控制权,请在拍照前将蚊子分开,并使用白色无标记的地下,甚至可能是从下方照亮的东西。这将使分离蚊子更容易。
然后对图像进行阈值处理。例如在这里我做了一个快速的尝试,取红色通道,然后减去蓝色通道*5,然后应用 80 的阈值:
使用形态扩张和侵蚀来摆脱小腿结构。
通过连接组件标签识别大小合适的斑点为蚊子。如果一个斑点大到足以容纳两只蚊子,请将其切掉,并对其进行更多的扩张/侵蚀。
一旦你有一个像这样的 blob
您可以使用主成分分析找到身体的方向。头部应该是身体横截面最厚的部分。