.net 识别多个(图形)对象';从点中删除边

.net 识别多个(图形)对象';从点中删除边,.net,image,image-processing,computer-vision,object-detection,.net,Image,Image Processing,Computer Vision,Object Detection,我有一个应用程序,可以识别网络摄像头图像中的运动。它会产生如下结果 黑色区域表示运动。这在很大程度上是以每像素为基础完成的(尽管考虑了附近的像素) 所以。。。现在我已经得到了每个像素的运动真/假,我需要使用这些信息来识别对象轮廓 我想要的是下面这样的东西 轮廓不必精确,我可以接受边界框。如果我向你们展示两者的结合,也有一些噪音区域更明显 如您所见,在对象外部有两个“移动”像素。大概,我会通过为一个对象指定最小面积来消除这些 那么,有什么算法来识别对象的边缘呢。理想情况下,我将能够使用这些信

我有一个应用程序,可以识别网络摄像头图像中的运动。它会产生如下结果

黑色区域表示运动。这在很大程度上是以每像素为基础完成的(尽管考虑了附近的像素)

所以。。。现在我已经得到了每个像素的运动真/假,我需要使用这些信息来识别对象轮廓

我想要的是下面这样的东西

轮廓不必精确,我可以接受边界框。如果我向你们展示两者的结合,也有一些噪音区域更明显

如您所见,在对象外部有两个“移动”像素。大概,我会通过为一个对象指定最小面积来消除这些

那么,有什么算法来识别对象的边缘呢。理想情况下,我将能够使用这些信息来计算每个对象的近似中心


注:@mmgp提到,上面的图片都是完整的RGB,甚至是黑白的。这是由于我生成要导出的图像的方式。在内部,它是一个位数组。

这似乎是数学形态学的完美任务。要移除在这种情况下形成噪声的小对象,请按区域执行形态学打开。问题中的面积很容易估计,因为感兴趣的区域比不需要的区域大得多。现在,您还希望消除大型对象内部的孔(请注意,在您的示例中有一些孔)。要做到这一点,您需要执行一个称为“孔填充”的操作,该操作只需丢弃那些从图像背景无法到达的点。此时,您可以继续检测对象的质心,但如果您希望使对象的边界更加均匀,可以使用带有小结构元素的形态学扩展,或者可能使用形态学闭合来保留更多的对象

这些任务在Matlab中执行,如下所示:

f = imread('http://i.stack.imgur.com/DexHs.png');
% The PNG is in RGB, but it actually describes a binary image.    
f = ~im2bw(f, 0);
g = bwareaopen(f, 100); % 100 is the maximum area for unwanted objects here
h = imfill(g, 'holes');
l = bwlabel(h);
cent = regionprops(l, 'centroid');
其结果是:

两条闭合的白色曲线是其余对象的边界,在黄色中可以看到它们的质心。如果您想要本答案初始注释中所述的“较软”边界:

h1 = imclose(h, strel('disk', 3));


我看到您将其标记为.net,但我希望这些工具可以在一些.net包中随时可用,因为它们非常基本和常见。

我的建议是您使用emgu(opencv)完成这些任务,它比您可能知道的matlab要复杂一些,但速度更快

OpenCV为您实施了腐蚀和扩张形态学操作:

或morphologyex适用于更多的通用形态学操作

它还具有findContours功能,您可以将其视为斑点检测器。在您的情况下,您可以将您的第一个图像(可能在经过一些去噪预处理后)馈送给它,它将返回这些形状。如果需要,这些返回的形状很容易按区域过滤

查找目录文档:


现在我注意到我没有对答案中的边缘检测进行评论。这是因为这里不需要它。给定一个对象,描述其边界的点很容易获得,因为它们与背景和对象内部的其他点都有接触。这看起来正是我需要做的。谢谢你给我指明了正确的方向。我不知道是否有一个.Net库允许我这样做,或者我是否需要自己组装一个,但我会深入研究,然后再给你回复。我唯一真正关心的是速度(我怀疑我是否能够处理每一帧,但1/秒就好了…)这些操作允许非常快速的实现。随着框架的发展,我听说了.NET的一个forge(),但我不知道它到底有多好。似乎没有专门的形态学领域,但对于你的情况,这个:是等效的。我过去避免了forge,而支持emgu(和OpenCV实现)这在我的测试中更快,但我认为它的功能是值得的。谢谢你的帮助谢谢你的建议,我会通读一遍的。我已经成功地使用了一个RGE,但是它没有我想要的那么有效。不要被这个
morphologyex
所愚弄,它远远不能执行通用形态学操作。这就是为什么我说“更通用”。好吧,这可能会误导,所以morphologyex实际上可以做的是文档中描述的5个操作(打开、关闭、顶帽、黑帽、形态梯度),它们是扩张和侵蚀的组合。