您的位置:首页 > 其它

适宜用与非均匀光照条件的边缘检测方法

2016-04-20 09:28 309 查看
一直在做车牌识别算法的研究实现和实现,我是真的很想给做车牌识别算法研究的人正个名。在图像识别相关研究如火如荼之时,一提到车牌识别,往往都是被鄙视的。车牌识别近四十年的发展,技术确实很成熟,但是车牌识别应用环境自由度那么大,目前市面上商用系统能搞得定几种场景?个人觉得,对于任何一个研究课题,即便是技术都烂透了的东西,在没有深入去了解它之前,就应该保持一个谨慎的态度,认真对待!
稍微发下牢骚,发泄一下在车牌识别研究的时候被鄙视的郁闷心情!开始正题,在CSDN记录一下,车牌识别研究中接触到的图像处理方法的实现。
本篇介绍一种边缘检测算子——类拉普拉斯算子。论文参考“A new and robust method of character segmentation and recognition in license plate images”本篇提供基于opencv的实现!


/************************************************************************/
/* A method to binarize image
1. blur image using gaussian
2. filter image with laplacian_like kernel, size of which is 10 *10
3. RGB converts to gray and binarizes image with otsu
parameters:
input: rgb image;
output: binary image
return: int, 0 means failed, or 1;
*/
/************************************************************************/
int speBinarizeMethod(const Mat src, Mat &dest)
{
if (src.empty()||src.channels()!=3)
{
return 0;
}
float laplcian_like_kernel[81] = {0, 0, 0, 0, -1, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0,
-1,-1,-1,-1,16,-1,-1,-1,-1,
0, 0, 0, 0, -1, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0};
float med_blur_kernel[10] = {1,1,1,1,1,1,1,1,1,1};
Mat laplcianLkernel = Mat(9, 9, CV_32FC1, laplcian_like_kernel);
Mat medblurKernel = Mat(5, 2, CV_32FC1, med_blur_kernel);
Mat srcClone = src.clone();
Mat grayImg, lSrcClone;
Mat gaussKernel = getGaussianKernel(5, 2);
GaussianBlur(srcClone, srcClone, Size(5,5),0,2);
filter2D(srcClone, lSrcClone, srcClone.depth(), laplcianLkernel);
cvtColor(lSrcClone, grayImg, CV_RGB2GRAY);
medianBlur(grayImg, grayImg, 3);
threshold(grayImg, dest, 0, 255, CV_THRESH_BINARY+CV_THRESH_OTSU);
return 1;
}


其处理效果:

第二列是利用该算子检测的二值图像,第三列是sobel算子的结果。从图可以看出,该算子对处理光照不均的情况较好!(http://img.blog.csdn.net/20160420092414843)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: