利用MSER算法提取图像区域(车牌区域)的OpenCV代码~
2016-07-28 11:08
537 查看
本文参考了《OpenCV图像处理编程实例》
我的博客中前面已经写了两种方法来实现车牌区域的提取了,大家可以参看下面这篇博文:
利用颜色和形态学两种方法进行车牌区域提取的OpenCV代码
MSER的全称是maximally stable extremal region,翻译过来为“最稳定极值区域”,extremal 意思的极值的意思。
下面说下这种方法的大致思路,如果要学习具体的原理,可以参考论文J.Matas. “Robust Wide Baseline Stereo from Maximally Stable Extremal Regions”,BMVC2002。
MSER提取过程
1.使用一系列灰度阈值对图像进行二值化处理
2.对于每个阈值得到的二值图像,得到相应的黑色区域与白色区域
3.在比较宽的灰度阈值范围内保持形状稳定的区域就是MSER,判断标准为dA/dt
David Nister等人于2008年在论文“Linera Time Maximally Stable Extermal Regions”对J.Matas提出的MSER算法进行了改进,使其在时间复杂度方面比原算法要小得多,OpenCV中提供的MSER模块算法就是利用该算法实现的。David Nister等人提出的算法思路如下(下面所列的每一步具体是怎么回事,请参看原论文):
①像素点排序→②极值区域生成→③稳定区域判定→④区域拟合→⑤区域归一化
下面分享利用MSER算法提取车牌区域的OpenCV代码~希望对大家有帮助,代码先使用MSER算法提取出图像的区域,然后对这些区域进行形态学闭操作,使其成较为完整的区域,再对这些区域求外接矩形,根据外接矩形的参数去判断是否是车牌区域。
代码如下(代码中用到的图像下载链接分别为 http://pan.baidu.com/s/1c2cBnFE href="http://pan.baidu.com/s/1eRSxLbs" target=_blank>http://pan.baidu.com/s/1eRSxLbs):
注意:OpenCV版本我从3.0.0换到了2.4.13,原因是因为最近我在实现SIFT算法时,发现3.0.0中没有nonfree模块!而SIFT和SURT都是包含在nonfree模块中的!
运行结果如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/42b41b1c48f301db40684817009109c7)
值得注意的是,在进行形态学闭操作时,一定要根据具体的图像来调整矩形窗的大小,比如下面这幅图,就需要把窗的大小由(1,20)调整到(1,30)才能检测出结果,相关运行截图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/2292177656dfc7bbae553c0d87a83a8a)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/9500331fe3ab0a7a5a65f173cd6191dd)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/749e7ab1e3e1887c2b8e5788432d219b)
-------------------------------------------
欢迎大家加入图像识别技术交流群:271891601,另外,特别欢迎成都从事图像识别工作的朋友交流,我的QQ号2487872782
我的博客中前面已经写了两种方法来实现车牌区域的提取了,大家可以参看下面这篇博文:
利用颜色和形态学两种方法进行车牌区域提取的OpenCV代码
MSER的全称是maximally stable extremal region,翻译过来为“最稳定极值区域”,extremal 意思的极值的意思。
下面说下这种方法的大致思路,如果要学习具体的原理,可以参考论文J.Matas. “Robust Wide Baseline Stereo from Maximally Stable Extremal Regions”,BMVC2002。
MSER提取过程
1.使用一系列灰度阈值对图像进行二值化处理
2.对于每个阈值得到的二值图像,得到相应的黑色区域与白色区域
3.在比较宽的灰度阈值范围内保持形状稳定的区域就是MSER,判断标准为dA/dt
David Nister等人于2008年在论文“Linera Time Maximally Stable Extermal Regions”对J.Matas提出的MSER算法进行了改进,使其在时间复杂度方面比原算法要小得多,OpenCV中提供的MSER模块算法就是利用该算法实现的。David Nister等人提出的算法思路如下(下面所列的每一步具体是怎么回事,请参看原论文):
①像素点排序→②极值区域生成→③稳定区域判定→④区域拟合→⑤区域归一化
下面分享利用MSER算法提取车牌区域的OpenCV代码~希望对大家有帮助,代码先使用MSER算法提取出图像的区域,然后对这些区域进行形态学闭操作,使其成较为完整的区域,再对这些区域求外接矩形,根据外接矩形的参数去判断是否是车牌区域。
代码如下(代码中用到的图像下载链接分别为 http://pan.baidu.com/s/1c2cBnFE href="http://pan.baidu.com/s/1eRSxLbs" target=_blank>http://pan.baidu.com/s/1eRSxLbs):
注意:OpenCV版本我从3.0.0换到了2.4.13,原因是因为最近我在实现SIFT算法时,发现3.0.0中没有nonfree模块!而SIFT和SURT都是包含在nonfree模块中的!
//OpenCV版本opencv2.4.13 //交流QQ2487872782 2016-8-4注:很报歉,此代码目前不能公开发表在博客上,已经删除,希望大家能理解!
运行结果如下图所示:
值得注意的是,在进行形态学闭操作时,一定要根据具体的图像来调整矩形窗的大小,比如下面这幅图,就需要把窗的大小由(1,20)调整到(1,30)才能检测出结果,相关运行截图如下:
-------------------------------------------
欢迎大家加入图像识别技术交流群:271891601,另外,特别欢迎成都从事图像识别工作的朋友交流,我的QQ号2487872782
相关文章推荐
- c语言描述的链队列的基本操作
- QtInternal 之 高效使用QString
- 开源 java CMS - FreeCMS2.5 标签 infoSearch
- RxJava的使用
- 24条货真价实的PHP代码优化技巧
- php Xdebug的安装与使用详解
- php上传图片文件常用的几个方法
- Python学习笔记--2016.07.28
- Java递归
- 在eclipse中生成签名文件
- vsftpd配置文件详解
- POJ3622 挑剔的美食家(重庆一中高2018级信息学竞赛测验5) 解题报告
- Java基础——基本类型和包装类、基本类型和字符串之间的转换
- ContextLoaderListener和Spring MVC中的DispatcherServlet加载内容的区别
- spring boot 入门 (2)
- spring quartz hibernate no session 的问题
- python小栗子
- java工程JUnit运行错误和编译错误
- php的cookie和session
- SpringMVC中的web.xml