2016-04-01 19 views
2

我有一些图像列表。它们总是只包含成长中的物体。例如:检测图像上的“合并”对象

image01:

enter image description here

图像0​​1 + N:

enter image description here

图像0​​1 + N + N:

enter image description here

图像0​​1 + n + n + n:

enter image description here

我想要什么? (这是第三个画面,但经修饰)

enter image description here

如果两个(或更多)对象合并我喜欢得到合并的中心点(红点)和从该点到也两行背景。

我今天已经尝试过解决这个问题。我认为这并不难,但不幸的是,它似乎并不那么容易。

我尝试这样做:

1)对于每一个画面让黑

2中的所有对象)获得每个画面中的所有对象。获取每个对象的中心。

3)检查每个图像,如果在一个物体上有多个中心的前一个图像的多边形。如果这是两个对象合并的情况。

4)如果检测到合并,则取前一帧的两个合并对象的中心。将它们与当前帧上的A *算法连接起来。现在搜索前一帧为白色的像素。这是“合并点”。

5)现在尝试获取两个最接近的白点,并使用它们来绘制“断线”(最后一张图像上的蓝线)。

不幸的是,这似乎并不那么容易,编程也很难。可能已经实现的算法(Java)存在可以更容易地完成这项工作吗?我实现了我所描述的一切(快速和肮脏),但是它很慢并且很麻烦。有些东西不起作用,很难调试它。但我认为应该有一个更简单的解决方案。

回答

2

所以你的问题是软件开发和算法开发。

因为你说的越野车和慢:因为慢我不在乎现在,它必须工作;但越野车是一个问题(软件开发)。

第3部分基本上是正确的:您在当前帧中获取一个对象,并且如果它在前一帧中包含两个对象,则它将进行合并。

您的连接中心思路是不正确的,因为中心可以在任何地方,并且该线不会通过连接区域。

检查在前一帧中发生在当前帧中的变化:这将是围绕两个前一个对象的hallo。检查与前两个物体最接近的增长(这个hallo的一部分)。这是一个对象的增长,并检查增长的哪一部分接近第二个对象;反之亦然。这会给你合并区域。

这是一个完整的项目。