我有类似于这些蚊子的图像,我想自动围绕图像中每只蚊子的头部画圈。它们显然处于不同的方向,并且在不同的图像中它们的数量是随机的。一些错误是好的。任何算法的想法来做到这一点?
最佳答案
此问题类似于人脸检测问题,因此您可以先尝试一种简单的方法,并在必要时对其进行改进。
首先,您需要重新创建训练集。为此,您想提取带有蚊子头或不是蚊子头的示例的小图像。
然后你可以使用这些图像来训练分类算法,注意要有一个平衡的训练集,因为如果你的数据偏向一个类,它会影响算法的性能。由于图像是 2D 并且算法通常只将 1D 数组作为输入,因此您还需要将图像排列为该格式(例如: http://en.wikipedia.org/wiki/Row-major_order )。
我通常使用支持向量机,但其他算法(例如逻辑回归)也可以解决问题。如果您决定使用支持向量机,我强烈建议您检查 libsvm ( http://www.csie.ntu.edu.tw/~cjlin/libsvm/ ),因为它是一个非常成熟的库,可以绑定(bind)到多种编程语言。此外,他们还有一个非常易于遵循的针对初学者的指南( http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf )。
如果你有足够的数据,你应该能够避免对方向的容忍。如果您没有足够的数据,那么您可以创建更多的训练行并旋转一些样本,这样您就会拥有更具代表性的训练集。
至于你可以做的预测是给定一个图像,使用网格切割它,其中每个单元格的尺寸与你在训练集中使用的单元格尺寸相同。然后您将每个图像传递给分类器并标记分类器为您提供正输出的那些方块。如果您确实需要圆形,则取给定正方形的中心,半径将是正方形边长的一半(抱歉,很明显)。
因此,在您执行此操作后,您可能会遇到尺寸问题(有些蚊子可能看起来比其他蚊子更靠近相机),因为我们没有训练算法容忍缩放。此外,即使所有蚊子的规模都相同,我们仍然可能会因为它们不完全适合我们的网格而错过其中的一些。为了解决这个问题,我们需要重复这个过程(网格切割和预测)将给定的图像重新缩放到不同的大小。有多少尺寸?那么在这里你必须通过实验来确定。
这种方法对您使用的“窗口”的大小很敏感,这也是我建议您尝试的方法。
关于image-processing - 在图片中找到蚊子的头,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15698934/