【问题标题】:Detect an object in a camera image in C# [closed]在 C# 中检测相机图像中的对象 [关闭]
【发布时间】:2010-11-15 18:06:09
【问题描述】:

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

具体来说,该图像将是一个游戏板,假设出于这个问题的目的,它是一个数独游戏板。

我最初的方法是寻找对比区域并从那里解决,但我似乎最终得到了很多潜在的边缘(很多错误),并且对于如何确定哪些是边缘没有真正的线索我真的想要!

是否有任何算法、库、代码示例,甚至只是一些聪明的想法,我将如何去寻找和提取图像的相关部分?

【问题讨论】:

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


    【解决方案1】:

    您需要对图像进行过滤操作和遮罩。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      2. 现在您有了所有行(xStart、yStart 和 xEnd、yEnd)的集合(数组)。您可以根据坐标轻松计算所有线长。

      3. 现在,考虑到您总是可以(!)在图像中期望“一个最大的正方形/矩形”,因此很容易找到并计算所需的数独矩形区域并将其从图像中裁剪为做一些进一步的处理。

      编辑:解决/编程这类问题总是具有挑战性,但同时又非常有趣:)。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 有人给你锤子并不意味着你可以盖房子。拥有工具很有帮助,但您必须知道您将使用该工具做什么。
        【解决方案4】:

        您可以先尝试找到粗线交叉点并将其用作注册标记。

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

        • 它们的形状非常均匀
        • 你知道有多少
        • 您知道(大致)它们应该在哪里相互关联
        • 可以容忍尺度变化

        所以:

        1. 应用边缘过滤器
        2. 扫描一张蒙版*,了解理想的 + 在图像上应该是什么样子,记录下所有匹配的内容
        3. 根据彼此之间的相对位置,选择最符合您期望的一组
        4. 您现在还知道数字应该在哪里,因此您可以轻松提取它们。

        * 更复杂的解决方案是使用神经网络而不是掩码来识别交叉点。这可能是值得的,因为您可能会使用一个来进行数字的 OCR。

        【讨论】:

        • +1 表示想法,-1 表示建议 NN
        • 图像有噪声,神经网络可以很好地处理噪声数据。这就是它们用于 OCR 的原因。也就是说,我更喜欢你的哈里斯检测器建议......也许作为神经网络的输入? ;-)
        【解决方案5】:

        您可以尝试使用Hough Transform

        【讨论】:

          【解决方案6】:

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

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

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

          准备做一些阅读:)

          如果游戏板的图像已经接近矩形,你当然可以跳过校正部分,直接使用角点找到你的正方形进行 OCR。

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

          【讨论】:

          • +1 表示“准备好阅读:)”
          【解决方案7】:

          在不拒绝任何其他想法的情况下,第一步确实应该是检测图像旋转。您可以通过确定每个点的局部梯度并创建其直方图来做到这一点。这将具有 90 度偏移的 4 个主要组件。理想情况下,这些值为 0、90、180 和 270,但如果不是,您应该旋转图像。例如。在示例图像中,您应该从顺时针旋转约 8 度开始。

          【讨论】:

            【解决方案8】:

            使用 aforge colorfiltering

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

            * ColorFiltering
            * ChannelFiltering
            * HSLFiltering
            * YCbCrFiltering
            * EuclideanColorFiltering
            

            See here

            【讨论】:

              【解决方案9】:

              您应该在 Google 上搜索 CamShiftBlob tracking粒子过滤器。它们都对您的问题有用。它们中的大多数都随 OpenCV 一起提供,它是 C# 包装器 AForge.NET。你会在 Youtube 上找到一些很好的演示,展示它们是如何工作的。

              祝你好运

              【讨论】:

                【解决方案10】:

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

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

                【讨论】:

                  猜你喜欢
                  • 2019-06-22
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-07-28
                  • 2012-06-05
                  • 2019-07-13
                  相关资源
                  最近更新 更多