用C#检测摄像机图像中的对象

时间:2009-07-31 10:09:37

标签: c# .net image-processing edge-detection

我有一个从实时网络摄像头拍摄的图像,我希望能够检测图像中的特定对象并提取其中的一部分以进行进一步处理。

具体来说,图像是游戏板,让我们说这个问题的目的是它是一个数独游戏板。

我最初的方法是寻找对比区域并从那里开始研究,但我似乎最终有很多潜在的边缘(许多错误的)并且没有真正的线索如何找出哪些是那些我真的想要!

是否有任何算法,库,代码示例,甚至是那些明智的想法,关于如何查找和提取图像的相关部分?

10 个答案:

答案 0 :(得分:9)

使用免费的AForge.Net图像处理库。有很多很酷的东西可以玩。

答案 1 :(得分:3)

您需要在图像上执行滤镜操作和遮罩。

我认为没有简单的方法只从图像中获取对象,您需要使用边缘检测算法,剪切,并设置有效对象/图像的标准。

您还可以使用图像阈值来检测对象。您可能需要查看下面的图像处理库。

  1. Filters适用于C,C ++,C#,Visual Basic .NET,Delphi,Python的API
  2. http://www.catenary.com/
  3. CIMG比上面的库更丰富,但它是用C ++编写的

答案 2 :(得分:1)

其中一种(我猜很多可能的)方法:

  1. 查找从给定图像“获取/计算”直线(边缘等)的过滤器。

  2. 现在你拥有所有行的集合(数组)(xStart,yStart& xEnd,yEnd)。您可以从坐标轻松计算所有线长。

  3. 现在,考虑到你可以随时(!)期望图像中出现“一个最大的正方形/矩形”,很容易找到并计算想要的数独矩形区域并将其从图像中裁剪出来做一些进一步的处理。
  4. 编辑:解决/编程这类问题总是充满挑战,但同时真的很有趣:)。

答案 3 :(得分:1)

您可以尝试使用Hough Transform

答案 4 :(得分:1)

我首先使用角落探测器(Harris探测器工作得很好)来找到数独网格的交叉点和角落。

然后我会使用这些点进行图像校正来转换图像,使网格尽可能为矩形。现在你应该毫不费力地找到每个方格进行OCR。

图像校正并不简单,需要大量的数学运算。

准备好阅读:)

如果游戏板的图像已接近矩形,您当然可以跳过整改部分并直接使用角点找到OCR的正方形。

很多人一直建议使用神经网络。我很确定在这个问题上抛出一个神经网络是完全没必要的。如果你需要对对象定义模糊的对象进行分类,NN(有时)是好的。 “在图像中查找汽车”是一个可以用于神经网络的问题,因为汽车可能看起来非常不同但具有相同的一些功能。因此,给定足够的数据,您可以训练您的NN来检测汽车。 在这个问题中,你有一些非常规律的东西,看起来几乎一样,所以NN不会让任何事情变得更容易或更好。

答案 5 :(得分:1)

使用 aforge colorfiltering

为c#提供了很多过滤方法,主要是我更喜欢aforge过滤器,为此他们只有很少的过滤器,它们是

* ColorFiltering
* ChannelFiltering
* HSLFiltering
* YCbCrFiltering
* EuclideanColorFiltering

See here

答案 6 :(得分:1)

看看: https://github.com/dajuric/accord-net-extensions

库“加入”免费的AForge.NET和Accord.NET库,并添加了图像处理和对象跟踪算法。 样品包括:)

答案 7 :(得分:0)

您可以先尝试找到粗线交叉点,然后将它们用作注册标记。

这将是一个良好的开端,因为:

  • 他们的形状非常均匀
  • 你知道有多少
  • 你知道他们应该在哪里(大致)彼此相关
  • 可以容忍比例变化

所以:

  1. 应用边缘过滤器
  2. 在图像上扫描理想 + 的面具*,记录所有匹配的内容
  3. 根据相对于彼此的位置选择最符合您期望的集合
  4. 您现在也知道数字的位置,以便您轻松提取它们。
  5. *更复杂的解决方案是使用神经网络代替遮罩来识别交叉点。这可能是值得的,因为你可能会使用一个用于数字的OCR。

答案 8 :(得分:0)

在不拒绝任何其他想法的情况下,步骤1确实应该是检测图像旋转。您可以通过确定每个点的局部渐变并创建其直方图来完成此操作。这将有90度偏移的4个主要组件。理想情况下,这些将是0,90,180和270但如果它们不是你应该旋转你的图像。例如。在样本图像中,您应该以大约8度CW的旋转开始。

答案 9 :(得分:0)

您应该谷歌 CamShift Blob跟踪粒子过滤器。它们对您的问题都很有用。其中大部分都附带OpenCV,它是C#包装器AForge.NET。你会在Youtube上找到一些很好的演示,展示它们是如何工作的。

祝你好运