You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
6.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Features类
这个类主要是特征回调函数。什么是回调函数?回调函数是当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数。回调函数就相当于一个中断处理函数,由系统在符合你设定的条件时自动调用。
回调函数有以下几点作用:
1.回调函数就是客户自己做主的函数。比如OnTime定时器的回调函数时间到了需要做什么交给客户自己处理想添加什么功能都行。
2.回调函数很有可能是输出的一种方式。对于DLL来说函数的输入参数【in】输出参数【out】回调函数的指针作为其中的参数可以起到输入的作用也可以起到输出的作用。
3.回调函数还可以包括回调函数。
在整个系统中Features类主要是特征的回调作用。当满足设定的条件时调用该类的函数可以输出需要的特征。以下为该类中的主要函数
getHisteFeatures函数是生成直方图均衡特征的回调函数。
getHistogramFeatures是获取垂直和水平的直方图图值。
getSIFTFeatures是获取SITF特征子的回调函数。
getHOGFeatures是获取HOG特征子的回调函数。
CoreFunc类
这个类主要是共有的一些函数,并且这些函数的作用基本上都是对截取到的汽车牌照图进行处理的一些函数。比如,判断一个车牌的颜色、判断车牌的类型、显示图像等,都是对输入的图片进行处理的函数。
colorMatch函数是根据一副图像与颜色模板获取对应的二值图输出灰度图只有0和255两个值255代表匹配0代表不匹配
plateColorJudge函数是判断图片中的车牌是什么颜色返回值为bool类型。如果为true则最小值取决于H值按比例衰减如果为false则不再自适应使用固定的最小值minabs_sv。
getPlateType函数是判断图片中的车牌为什么类型的车牌。
projectHistogram函数是获取垂直或水平方向直方图。
features函数是获取样本特征水平、垂直直方图和低分辨率图像所组成的矢量。
showImage函数的作用是显示图像。
PlateLocate 类:
这个类主要是用于实现车牌定位的功能,还兼顾一些对车牌图片进行处理的功能。如生活模式与工业模式切换,定位车牌图像,车牌图像旋转微调等。
setLifemode(boolean islifemode)函数用于切换生活模式与工业模式只有一个布尔型的参数islifemodesetLifemode函数没有返回值根据参数islifemode的值来调整图片处理时的参数如果为真则设置各项参数为定位生活场景照片如百度图片的参数否则恢复默认值。
plateLocate(Mat src)函数用于定位车牌图像仅有一个Mat类型的参数src函数返回值是Vector<Mat>Mat 类型的一个数组。vector 是一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。vector存入Mat的矩阵是按列存储Mat的类型将隐式转化为vector的类型。函数对读取的图片进行一系列的处理对多个车牌图片处理的结果仅会保留最后一个车牌图片的临时图片。图片处理流程高斯模糊 -> 图像进行灰度化 -> 对图像进行Sobel 运算,得到图像的一阶水平方向导数 -> 对图像进行二值化 -> 使用闭操作,对图像进行闭操作以后,车牌区域被连接成一个矩形装的区域 -> 调用findContours求出图中所有的轮廓 -> 对轮廓求最小外接矩形,然后验证,不满足条件的淘汰 -> 旋转,将某些倾斜的车牌调整正 -> 如果抓取的方块旋转超过m_angle角度则不是车牌放弃处理 -> 最后返回处理好的车牌图片。
verifySizes(RotatedRect mr)函数用纵横比对minAreaRect获得的图片进行判断是不是最小外接矩形函数是布尔类型的返回true或者false。
showResultMat函数对图片进行旋转处理并显示最终生成的车牌图像用于判断是否成功进行了旋转最后返回处理后的图片。
PlateJudge 类:
该类用于车牌判断用SVM方法识别车牌。
loadSVM(String path)函数用于加载模型文件xml字符串参数传入文件路径。
PlateJudge()函数调用loadSVM函数进行加载模型文件xml的操作。
plateJudge(final Mat inMat)函数用于对单幅图像进行SVM判断。调用getFeatures回调函数, 用于从车牌的image生成svm的训练特征features然后和样本库对比正样本返回0负样本返回1。plateJudge(Vector<Mat> inVec, Vector<Mat> resultVec)函数用于对多幅图像进行SVM判断。
PlateDetect类
该类用于车牌检测识别,分两个步骤:
1、车牌定位 2、车牌判断整合PlateLocate类和PlateJudge类两个类进行识别操作。
plateDetect(final Mat src, Vector<Mat> resultVec)函数通过调用PlateLocate 类和PlateJudge 类的函数进行车牌检测识别,先车牌定位然后进行车牌判断,根据操作的结果返回不同的数值。
CharsIdentify类
此类主要用于字符的鉴别通过this.ann.clear();函数加载二值化后的ann配置文件图像转文字的训练库文件对图像进行定位于预测。CharsRecognise类此类主要是通过字符的分割对字符进行识别。首先利用Vector<Mat> matVec = new Vector<Mat>();函数将车牌字符方块集合String plateIdentify = "";输出车牌的识别结果并通过调用charsSegment.setDebug(isDebug);return charsSegment.getDebug();PlateColor result = CoreFunc.getPlateType(input, true); return result.desc;charsSegment.setLiuDingSize(param);charsSegment.setColorThreshold(param); charsSegment.setBluePercent(param);return charsSegment.getBluePercent();charsSegment.setWhitePercent(param);return charsSegment.getWhitePercent();等函数来对车牌进行识别处理;其函数的作用分别是是否开启调式模式、获取调试模式状态、获得车牌颜色、设置柳丁大小变量、设置颜色阈值、设置蓝色百分比、得到蓝色百分比、设置白色百分比和得到白色百分比。通过一系列的函数对车牌进行进一步的识别与处理(处理过程中默认默认首个字符块是中文字符 第二个字符块是字母),转化为机器可识别的图像。
图片识别训练车牌识别训练由src/main/java/com.yuxue.train路径下的SVMTrain.java实现。其中最重要的是train方法实现了通过大量源图像文件和标记的比对建立起xml模型文件doPridect方法借助模型文件和opencv库中的方法实现了对图片的识别判断。图片文字识别训练由src/main/java/com.yuxue.train路径下的ANNTrain.java和CnANNTrain.java实现。其中ANNTrain.java用于数字的识别训练CnANNTrain.java用于文字识别训练两者内容所差无几。两者之中的train方法都是调用指定路径文件夹内的图片通过opencv库内给定的函数进行识别和标记比对建立模型predict方法通过借助模型遍历测试样本下的所有文件进行计算预测准确率。该功能主要用于为后续车牌判断CharsIdentify、字符分割CharsSegment和字符识别CharsRecognise提供模型数据提高算法的准确性。
字符分割由src/main/resources/easype-java路径下的CharsSegment实现。其中函数verifySizes是字符尺寸验证用于去掉尺寸不符合的图块。函数preprocessChar是字符预处理用于统一每个字符的大小。函数clearLiuDing用于计算每行元素的阶跃数如果小于X认为是柳丁将此行全部填0涂黑 X可根据实际调整。函数GetChineseRect根据特殊车牌来构造猜测中文字符的位置和大小。函数GetSpecificRect用于找出指示城市的字符的Rect之所以选择城市的字符位置是因为该位置不管什么字母占用的宽度跟高度的差不多能大大提高位置的准确性。函数RebuildRect有两个功能一是把特殊字符Rect左边的全部Rect去掉后面再重建中文字符的位置二是从特殊字符Rect开始依次选择6个Rect多余的舍去。函数SortRect用于将Rect按位置从左到右进行排序。