车牌识别初笔:车牌定位之精确定位与block精简

2024-04-08 14:32

本文主要是介绍车牌识别初笔:车牌定位之精确定位与block精简,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

花了挺长时间在定位上,精确定位与block精简貌似是无法战胜的鸿沟,横在我眼前。调测百遍千遍,虽无硕果累累,却也心有所得。

一、精确定位

        车牌上下边界一般都比较准确,稍作修改一般无需大幅度调整。有一种情况-----倾斜,倒是需花点时间分析研究改动。基本上难点是在左右边界,就那两条短短的竖线,要费去尔等多少心思心血奋斗

        方法:灰度(边缘、跳变、波形、投影),颜色(YUV 、 RGB、  HSV),二值化(局部、全局),角点,haar。

        极难有一种方法适用所有情况,只能权衡一个最佳组合。到精确定位的环节,只能逐步细分,例如颜色一个枝节,大框一个枝节,小框一个枝节等等。小车牌,颜色丢失或光线不足的暗车牌这两种情况问题较多。

        YUV色差C=(255 + U - V)的区分度不错,蓝色最高,C一般255以上,一些非车牌block一般在260以下。当然很多蓝色不明显的暗车牌block、白底车牌、黑底车牌的C值也会在260以下。蓝色U值一般取150以上且V值130以下,需根据图像实际效果定

       灰度投影波形分析及竖直边缘密度统计是一个常用方法。水平逐行、逐列灰度跳变,灰度跳变又分为两个范围,一个是Y值60到90,一个是大于90,阈值需根据图像实际效果定。灰度投影波形波峰波谷判断极具分析判断空间,从原始图像来说,灰度是一个未经破坏原汁原味的表征车牌的一个重要特征,得灰度精髓者得精确度。

       二值化方法效果取决于二值化效果。不是原汁原味的特征故受影响因素多。局部(水平每25像素作为步长)与全局二值化同或,再利用简单角点处理,对于二值化效果好的图像基本能求得正确左右边界。阈值判断以每列灰度均值,升序排序后来确定。局部二值化以80%到95%左右的值作为条件的来判断选取哪一个值为阈值,而全局二值化用50%左右的值作为条件来判断选取哪一个值作为阈值。

       简单角点方法其实是n * n邻域内和中心点的差值满足一定条件,则保留,本质上利用的是车牌竖直边缘特征。用在二值图像上则差值是255,当然选取255还是0为中心点具有不一样的效果,有些情况可用if让两种都用上。得到处理后的图像就要得到左右边界就比较简单了。

二、block精简

         关乎效率,略微影响识别率。

         方法:色差,水平灰度投影波峰波谷,haar,局部与全局二值化加简单角点、二值化后统计跳变特征

         色差较粗糙,水平灰度投影波峰波谷数量判断是常用方法,经验阈值在15以上,40以下。

         好的haar模型,定位有较高的准确率,因为对象为block,不会花销很大时间,做好了完全能满足效率。

         局部与全局二值化加简单角点和上面精确定位说到的一样,得到处理后的图像,遍历每行,计算出255到0的跳变的次数,算出最大值,正常车牌一般大于10。小车牌需另设置。

         二值化统计跳变特征,是对二值化图像做每列统计白点像素,得到投影图后,分析实际情况得到经验阈值,然后判断最高波峰与相邻最低波谷差值是否大于此阈值,是则计数加1,正常车牌block的最终值会在10左右,之前设置了范围6~15。



       目前为止,运用二值化加简单角点来排除block效果较好,误排率较低,而haar如果模板训练得好,效果好于前者。精确定位上还没有发现哪种方法凌驾与其他方法之上,具有很显著的效果,待进一步研究。

       以上数据均本人经验值,理论均本人心得,欢迎同行交流指正

        

这篇关于车牌识别初笔:车牌定位之精确定位与block精简的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885851

相关文章

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

js定位navigator.geolocation

一、简介   html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。   window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置int watchCurrentPosition(

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示: 此时只需要右击项目,或者你的源代码目录,将这个项目或者源码目录标记为项目源和头文件即可。 英文如下:

[Linux Kernel Block Layer第一篇] block layer架构设计

目录 1. single queue架构 2. multi-queue架构(blk-mq)  3. 问题 随着SSD快速存储设备的发展,内核社区越发发现,存储的性能瓶颈从硬件存储设备转移到了内核block layer,主要因为当时的内核block layer是single hw queue的架构,导致cpu锁竞争问题严重,本文先提纲挈领的介绍内核block layer的架构演进,然

一次生产环境大量CLOSE_WAIT导致服务无法访问的定位过程

1.症状 生产环境的一个服务突然无法访问,服务的交互过程如下所示: 所有的请求都是通过网关进入,之后分发到后端服务。 现在的情况是用户服务无法访问商旅服务,网关有大量java.net.SocketTimeoutException: Read timed out报错日志,商旅服务也不断有日志打印,大多是回调和定时任务日志,所以故障点在网关和商旅服务,大概率是商旅服务无法访问导致网关超时。 后

定位cpu占用过高的线程和对应的方法

如何定位cpu占用过高的线程和对应的方法? 主要是通过线程id找到对应的方法。 1 查询某个用户cpu占用最高的进程号 top -u 用户名 2 查询这个进程中占用cpu最高的线程号 top –p 进程号-H    3 查询到进程id后把进程相关的代码打印到jstack文件 jstack -l pid > jstack.txt 4 在jstack文件中通过16进制的线程id搜索到