背景
对于我在大学的最后一个项目,我正在开发一个车辆牌照检测中的应用。 我认为自己是一个中级程序员,但是我的数学知识缺乏上述中学,这使得生产权公式难度比它大概应该是什么。
我已经花大量的时间量好查找学术文章,如:
- 检测车牌的图片
- 使用图像显着坚固的车牌检测
- 汽车图像的局部增强的车牌检测
当涉及到数学,我迷路了。 由于此测试的各种图形图像证明生产性,例如:
至
但是这种方法只工作到特定的图像,如果技术被应用到不同的图像,我肯定会出现较差的转换。 我读过关于一个叫做“底部帽子形态变换”公式,执行以下操作:
基本上,反式形成保持图片的所有暗部细节,并消除一切(包括更大的暗区和亮区)。
我找不到这么多的信息,但是附近的报告结束时,文档中的图片显示其有效性。
其他制约因素
- 在C#开发
- 围项目只有英国牌照
- 我可以选择图像作为示范转换
题
我需要我应重点发展哪些变换技术,什么算法可以帮助我的意见。
编辑:目前新的信息(续) -车牌检测
有许多方法可以采取而是跃入脑海是第一种策略:
- 发现/研究:确定了一套,你可能需要识别的色彩和字体。 如果你的样品图片是最能代表英国的板块,然后你的工作变得更加容易。 例如简单的,奇异的字体和黑色字体在白色背景上
- 代码:尝试以标识的颜色主要是白色和黑色的图像的矩形区域。 这不是一个可怕的数学重的问题,它应该给你的车牌区域集中。
- 代码:做一些清理你的分区,例如转换为纯黑色和白色(单色),也许缩放/移位到一个不错的,紧密的矩形。
- 使用API:接下来使用您的子选择的图像区域现有的OCR(光学字符识别)算法,看看你是否可以阅读的文本。
就像我说的,这是很多人的一种策略,但想到为一个需要大量的数学运算量最少的...那是,如果你能找到一个OCR实现,它会为你工作。
我在Java中做了一个类似的项目在几年前,我第一次应用了Sobel算子 ,然后屏蔽所有的图像与板的图像(Sobel算子应用于太)。 最大重合的区域是其中板是。 然后申请一个OCR到所选择的区域,以获得数。
以下是我建议你应该做这个任务。 阅读我详细的解答在这里 。
- 转换为灰度。
- 高斯模糊的3x3或5x5的过滤器。
应用索贝尔过滤器来查找垂直边缘。
Sobel(gray, dst, -1, 1, 0)
- 阈值产生的图像得到二值图像。
- 应用使用合适的结构元件的形态关闭操作。
- 查找所得图像的轮廓。
- 查找
minAreaRect
每个轮廓。 选择基于纵横比以及最小和最大面积的矩形。 - 对于每个选择的轮廓,找到边缘密度。 设置边缘密度的阈值,并选择矩形违反该阈值尽可能板区域。
- 很少有矩形将保持在此之后。 您可以根据方向,或者你认为合适的任何条件进行筛选。
- 从之后的图像剪辑这些检测到的矩形部分
adaptiveThreshold
原始(灰度)图像的并应用OCR。
英国已经有一个系统,该系统做到这一点。 我记得曾经看过一个电视节目中,他们证明了他们能找到10分钟(假设他们知道电话号码和汽车驾驶着)只是阅读维基百科给你你需要开始思考这一问题的指针内内伦敦一辆车: HTTP ://en.wikipedia.org/wiki/Automatic_number_plate_recognition
它会告诉你到底如何计算底帽变换(看起来有点像一个倒置的毕业门槛变换给我)。
首先要做的是实现这两个形态功能扩张和侵蚀。
要做到这一点,你需要您的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),以每个点的区域,找出哪一个给出了最大值)。
你的侵蚀做同样的(非常类似于上面)
现在的打开和关闭是两者的组合物
你可以先认为它是进行扩张,然后开口的侵蚀。
它说,最后减去原始图像收盘,你应该有你的变换。
如果你有兴趣在检测车牌的存在(而不是将其识别)问题,你应该看看,因为它关系到你在做什么图像文本检测。
这个问题是有关您: 算法来检测图像文本的存在
您也可以参考车牌自动识别库与此查询 。 这也会给你一些想法如何做事,如何现有的解决方案。
但是,保罗回答,你应该首先尝试从完整的图像发现矩形号牌,然后二值化,然后使用可用的OCR库(正方体将被推荐)
您可以参考这个链接 ,这将有助于你找到矩形板。 您需要使用OpenCV的库,所以你不需要数学的很多,但肯定发生了什么幕后的一个基本的了解可以帮助你更好的办法解决这个问题。
我会建议使用此服务或第三方。 打开ALPR,提供一个开放源码包,这项服务非常准确。
打开ALPR - https://www.openalpr.com/
视频打开ALPR的演示
https://www.youtube.com/watch?v=E-U_H9EbW60
或者你可以使用一个API -
麦吉弗计算机视觉API
https://askmacgyver.com/explore/program/license-plate-recognition/3X5D3d2k
在这个API,你只会给POST请求 -
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