车牌图像边缘检测预处理步骤的建议

问题描述 投票:0回答:1

我目前正在开展一个大学项目,我想探索不同的计算机视觉技术。我的目标是对中国车牌进行自动车牌识别(ALPR)。到目前为止,我已经训练了一个检测模型(YOLOv5)来定位车牌。模型的边界框不会考虑图像中的任何倾斜,因此我选择暂时裁剪它们。这就是图像现在的样子:Example license plate crop

我想使用 OpenCV 对车牌进行边缘检测,并用它进行进一步的裁剪和透视变换。我希望图像仅包含车牌,以便稍后可以使用尽可能好的输入图像进行字符分割。

不幸的是,我对计算机视觉非常陌生,无法找到适用于大多数图像并使 OpenCV 能够可靠地检测矩形车牌的预处理方法。对我来说,针对不同光照条件和车辆颜色进行预处理确实很困难。 我希望得到一些关于如何解决这个问题的建议(或者我是否应该采取不同的方法)

这就是我迄今为止使用 OpenCV 实现边缘检测所做的事情:

  1. 这些是我的预处理步骤:
  • 转换为灰度
  • 高斯模糊去除一些噪音(我应该如何选择内核大小?)
  • 直方图均衡化以增加对比度
  1. Canny 边缘检测
  2. 进一步预处理:
  • 扩张以缩小差距(我应该如何选择内核大小?)
  • 再次腐蚀缩小边缘
  1. 寻找轮廓
  2. 寻找最接近矩形且面积最大的轮廓

如果不每次都调整精明边缘检测的阈值,这种方法甚至无法找到车牌的矩形轮廓。这是调整后的结果:Example result 从上到下的描述:

  1. 原图
  2. 预处理后
  3. 精明边缘检测后
  4. 进一步预处理后
  5. 有轮廓
  6. 拥有最佳轮廓
  7. 轮廓拉伸以填充图像

我不只是将代码转储在这里,因为我认为最大的问题是图像的预处理。

opencv computer-vision edge-detection image-preprocessing automatic-license-plate-recognition
1个回答
0
投票

答案取决于您使用的数据集。例如,在收费公路上,交通摄像头可以直接指向车牌,从而简化了问题。与汽车行车记录仪相比,两车都在移动,问题就复杂了。同样,距离也是一个因素——收费站很近,而俯瞰州际公路的固定交通摄像头甚至可能看不到车牌。

由于这是一个学术项目,您可能专注于可以手动改进的更高质量的数据集,例如通过裁剪。尽管如此,根据我的经验,PyImageSearch 往往有很好的教程。 这是 ANPR 的此类教程

流程如下:

rectKern = cv2.getStructuringElement(cv2.MORPH_RECT, (13, 5))
blackhat = cv2.morphologyEx(gray, cv2.MORPH_BLACKHAT, rectKern)

渐变:

gradX = cv2.Sobel(blackhat, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=-1)

高斯模糊:

gradX = cv2.GaussianBlur(gradX, (5, 5), 0)
gradX = cv2.morphologyEx(gradX, cv2.MORPH_CLOSE, rectKern)
thresh = cv2.threshold(gradX, 0, 255,
cv2.THRESH_BINARY | cv2.THRESH_OTSU)

等等。我建议您先阅读本教程,看看在执行 OCR 之前是否能获得改进的轮廓结果。

© www.soinside.com 2019 - 2024. All rights reserved.