从图像中获取对象的位置

人工智能 神经网络 卷积神经网络 图像识别 建筑学
2021-11-16 13:25:52

我有一些具有固定背景的图像和它们上面的单个对象,该对象在每个图像中放置在该背景的不同位置。我想找到一种方法来以无人监督的方式提取该对象的位置。例如,作为人类,我们会记录对象的 x 和 y 位置。当然,NN 没有 x 和 y 的概念,但我希望给定图像,NN 产生 2 个数字,尽可能地保留背景上物体的实际相对位置。例如,如果 3 个对象在一条直线上等距分布(在 3 个图像中),我希望 NN 为 3 个图像中的每一个生成的 2 个数字保持这种顺序,即使它们不会形成直线。它们可以形成一条奇怪的曲线,但只要顺序正确,就可以拓扑变换为正确的直线。有人可以向我推荐任何类似的论文/架构吗?谢谢!

1个回答

正如评论中所说,我不会为此使用机器学习。

您可以使用 OpenCV 之类的工具来实现该结果。

例如:

  1. 获取“裸体”背景图片:如果没有,可以通过对每张图片取平均值来轻松计算:background = np.mean(images, axis=0)
  2. 对于每个图像,计算图像和背景之间的像素差。diffs = [img - background for img in images]
  3. Diff 的像素可以是负数,所以在转换为灰度之前取每个像素的绝对值。
  4. 如果一切顺利,您现在就有了一张暗噪图像,并且您的对象有一个明亮的轮廓。
  5. 设置一个阈值(即threshold = diff.percentile(95))并制作一个二进制掩码,因此现在每个像素都表示1图像轮廓和0背景。
  6. 找到对象的质心(例如计算每个像素 = 1 的平均坐标)。你有它!

当然,我只是描述了一种清晰而简单的方法。但是您可以找到自己的最佳解决方案。

  • ✅ 不需要训练神经网络
  • ✅ 不需要标记数据
  • ✅ 适用于任何一组图像/背景
  • ✅ 精确坐标
  • ✅ 易于制作、调试和适应。
  • ✅ 跑得快