【问题标题】:What are good algorithms for vehicle license plate detection? [closed]车牌检测有哪些好的算法? [关闭]
【发布时间】:2011-06-10 02:33:24
【问题描述】:

背景

对于我在大学的最后一个项目,我正在开发一个车牌检测应用程序。我认为自己是一名中级程序员,但是我的数学知识缺乏中学以上的任何知识,这使得生成正确的公式比应该做的更难。

我花了很多时间查找学术论文,例如:

说到数学,我迷路了。由于这个测试,各种图形图像被证明是有效的,例如:

但是,这种方法仅适用于该特定图像,并且如果将这些技术应用于不同的图像,我敢肯定会发生较差的转换。我读过一个名为“底帽形态变换”的公式,它执行以下操作:

基本上,变换保留了图片的所有暗部细节,并消除了其他一切(包括更大的暗区和亮区)。

我找不到太多这方面的信息,但是报告末尾附近的文档中的图片显示了它的有效性。

其他限制

  • 用 C# 开发
  • 将项目仅限于英国车牌
  • 我可以选择要转换的图像作为演示

问题

我需要关于我应该专注于开发哪些转换技术以及哪些算法可以帮助我的建议。

编辑:Continued - Vehicle License Plate Detection 上的新信息

【问题讨论】:

标签: c# image computer-vision ocr object-detection


【解决方案1】:

您可以采取多种方法,但首先想到的策略是:

  • 发现/研究:确定您可能需要识别的一组颜色和字体。如果您的示例图片代表了大多数英国车牌,那么您的工作就会变得更容易。例如。简单、单一的字体和白色背景上的黑色字体
  • 代码:尝试识别图像的矩形区域,其中颜色主要是白色和黑色。这不是一个非常繁重的数学问题,它应该让您专注于车牌区域。
  • 代码:对您的子区域进行一些清理,例如将其转换为纯黑白(单色),并可能缩放/转换为漂亮、紧凑的矩形。
  • 使用 API:接下来在您的子选择图像区域上使用现有的 OCR(光学字符识别)算法,看看您是否可以阅读文本。

就像我说的那样,这是许多策略中的一种,但它被认为是一种需要最少大量数学运算的策略……也就是说,如果您能找到适合您的 OCR 实现。

【讨论】:

  • 感谢您的分析,我想我会专注于与您的描述类似的事情,检测类似于包含某种颜色像素或颜色括号的矩形的形状。
  • @Paul sasik “尝试识别图像的矩形区域,其中颜色主要是白色和黑色” - 你能建议一些好的方法吗?我正在尝试本地化车牌图像...
【解决方案2】:

几年前我在 Java 中做了一个类似的项目,首先我应用了Sobel operator,然后用一个盘子的图像掩盖了所有的图像(也应用了 Sobel 运算符)。最大重合区域是板块所在的位置。然后将 OCR 应用于所选区域以获取数字。

【讨论】:

  • 感谢您的回复,我实际上在丢失的一篇论文中看到了一些关于 Sobel 算子的内容。我会调查的:)
  • 其实你的想法很棒!只是我突然想到了呵呵。关于描述 Sobel 运算符的可用伪代码的任何想法?
【解决方案3】:

以下是我建议您执行此任务的方法。阅读我的详细回答here

  1. 转换为灰度。
  2. 使用 3x3 或 5x5 滤镜进行高斯模糊。
  3. 应用 Sobel 过滤器来查找垂直边缘。

    Sobel(gray, dst, -1, 1, 0)

  4. 对结果图像设置阈值以获得二值图像。
  5. 使用合适的结构元素应用形态关闭操作。
  6. 查找结果图像的轮廓。
  7. 找到每个轮廓的minAreaRect。根据纵横比以及最小和最大面积选择矩形。
  8. 对于每个选定的轮廓,找出边缘密度。设置边缘密度阈值并选择超出该阈值的矩形作为可能的板块区域。
  9. 此后将保留几个矩形。您可以根据方向或您认为合适的任何标准过滤它们。
  10. 在原始(灰度)图像的adaptiveThreshold 之后从图像中剪切这些检测到的矩形部分并应用 OCR。

【讨论】:

    【解决方案4】:

    英国已经有一个系统可以做到这一点。我记得看过一个电视节目,他们展示了他们可以在 10 分钟内在伦敦找到一辆车(假设他们知道号码并且汽车正在四处行驶) 只需阅读 Wikipedia 即可为您提供开始思考该问题所需的指导: http://en.wikipedia.org/wiki/Automatic_number_plate_recognition

    【讨论】:

    • 描述不同效果的图片真的很有帮助。 Gaussian Blur > Grayscale > Constrast + 60 在所有图像上效果都很好,只需要在检测算法上工作:)
    【解决方案5】:

    它准确地告诉你如何计算底帽变换(对我来说有点像倒置的渐变阈值变换)。

    首先要做的是实现两个形态函数膨胀和腐蚀。

    为此,您需要 f 和 b,然后在图像的一小块区域上计算函数,该点保持找到的最大值。

    (f ⊕ b)(s, t) = max{f (s − x, t − y) + b(x, y)
    |(s − x), (t − y) ∈ Df ; (x, y)∈Db}
    

    这就是说,在域区域中的所有点上取表达式的最大值(例如以您的点 (s,t) 为中心的小矩形。

    简单的伪代码是

    max = -infinity // for the point (s,t) on the image, must compute this for all points
    for(x = -5 to 5)
    for(y = -5 to 5)
    max = Max(max, f(s - x, t - y) + b(x,y))
    

    实际上,我们现在有了最大值的新图像。

    实际上很简单,所以不要让它变得更难(我们只是将 b(x,y) 加到区域中的每个点上,然后找出哪一个给出最大值)。

    你对侵蚀做同样的事情(非常类似于上面)

    现在开合是两者的合成

    您可以首先将其视为执行扩张,然后执行侵蚀以形成开口。

    它说最后从原始图像中减去关闭,你应该有你的变换。

    【讨论】:

    • 感谢伪代码,绝对让事情更清楚。
    【解决方案6】:

    如果您对检测车牌存在的问题(而不是识别它)感兴趣,您可能应该查看图像中的文本检测,因为它与您正在做的事情有关。

    这个问题和你有关:Algorithm to detect presence of text on image

    【讨论】:

      【解决方案7】:

      你也可以参考 Automatic License Plate Recognition library & this query。这也将使您对如何处理事情以及现有解决方案有所了解。

      但正如保罗所回答的,您应该首先尝试从完整图像中找到矩形车牌,然后对其进行二值化,然后使用可用的 OCR 库(推荐使用 Tesseract)

      您可以参考这个link,它将帮助您找到矩形板。您需要使用 openCV 库,因此您不需要大量的数学知识,但是对幕后发生的事情有基本的了解可以帮助您以更好的方式解决问题。

      【讨论】:

        【解决方案8】:

        我建议为此使用服务或第三方。 Open ALPR,为这项服务提供了一个非常准确的开源包。

        打开 ALPR - https://www.openalpr.com/

        视频 Open ALPR 演示

        https://www.youtube.com/watch?v=E-U_H9EbW60

        或者您可以使用 API -

        Macgyver 计算机视觉 API

        https://askmacgyver.com/explore/program/license-plate-recognition/3X5D3d2k

        在此 API 中,您只需向 -

        发出发布请求

        https://macgyver.services

        负载示例

        {
        id: "3X5D3d2k",
        key: "free",
        data: {
            "image_url": "https://storage.googleapis.com/marketing-files/program-markdown-assets/license-detection/license-plate.jpg",
            "country": "us",
            "numberCandidates": 2
          }
        }
        

        上图将返回以下内容 -

        "plate": "284FH8"
        "confidence": 90.601013
        

        【讨论】:

        • 你好,这里的“信心”是怎么计算的?
        猜你喜欢
        • 2012-07-29
        • 2018-06-10
        • 1970-01-01
        • 2012-03-30
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 2020-11-23
        • 1970-01-01
        相关资源
        最近更新 更多