车牌识别之二:字符分割

车牌识别LPR(六)-- 字符分割 第六篇:字符分割   在知道了车牌字符的规律之后,可以根据车牌的特点对字符进行分割。一般最容易想到的方法就是根据车牌投影、像素统计特征对车牌图像进行字符分割的方法。是一种最常用的、最基本的、最简单的车牌字符分割方法。它的精髓是对车牌图像进行逐列扫描,统计车牌字符的每列像素点个数,并得到投影图,根据车牌字符像素统计特点(投影图中的波峰或者波谷),把车牌分割成单个独立的字符。   图像的... 阅读详情

车牌识别大概步骤可分为:车牌定位,字符分割,字符识别三个步骤。

细分点可以有以下几个步骤:

(1)将图片灰度化与二值化

(2)去噪,然后切割成一个一个的字符

(3)提取每一个字符的特征,生成特征矢量或特征矩阵

(4)分类与学习。将特征矢量或特征矩阵与样本库进行比对,挑选出相似的那类样本,将这类样本的值作为输出结果。

 

车牌定位可以参考这里,网上也有很多关于这个问题的讨论,理论上觉得可行,但实际上没有操作过,等有空再去搞搞。
http://blog.youkuaiyun.com/sing_sing/archive/2010/10/13/5937725.aspx

这几天研究了一下车牌字符分割的问题,前提是已经进行了车牌定位,角度校正等预处理。

用到的主要知识有:二值化,形态学操作,轮廓查找等。

字符分割网上资料比较少,本人接触opencv一段时间,自己瞎搞了一下,以此抛砖引玉,希望与各位交流一下。

以下为全部源代码:


//==============================================

//write by sing

//2010-10-10

//==============================================


#include "stdafx.h"

//找出含车牌文字的最左端
void findX(IplImage* img, int* min, int* max)
{
    int found = 0;
    CvScalar maxVal = cvRealScalar(img->width * 255);
    CvScalar val = cvRealScalar(0);
    CvMat data;
    int minCount = img->width * 255 / 5;
    int count = 0;

    for (int i = 0; i < img->width; i++) {
        cvGetCol(img, &data, i);
        val = cvSum(&data);
        if (val.val[0] < maxVal.val[0]) {
            count = val.val[0];
            if (count > minCount && count < img->width * 255) {
                *max = i;
                if (found == 0) {
                    *min = i;
                    found = 1;
                }
            }
        }
    }

}

//找出含车牌文字的最上端,排除两颗螺丝的位置
void findY(IplImage* img, int* min, int* max)
{
    int found = 0;
    CvScalar maxVal = cvRealScalar(img->height * 255);
    CvScalar val = cvRealScalar(0);
    CvMat data;
    int minCount = img->width * 255 / 5;
    int count = 0;

    for (int i = 0; i < img->height; i++) {
        cvGetRow(img, &data, i);
        val = cvSum(&data);
        if (val.val[0] < maxVal.val[0]) {
            count = val.val[0];
            if (count > minCount && count < img->height * 255) {
                *max = i;
                if (found == 0) {
                    *min = i;
                    found = 1;
                }
            }
        }
    }
}

//车牌字符的最小区域
CvRect findArea(IplImage* img)
{
    int minX, maxX;
    int minY, maxY;
  
    findX(img, &minX, &maxX);
    findY(img, &minY, &maxY);

    CvRect rc = cvRect(minX, minY, maxX - minX, maxY - minY);

    return rc;
}

int main(int argc, char* argv[])
{
    IplImage* imgSrc = cvLoadImage("cp.jpg", CV_LOAD_IMAGE_COLOR);
    IplImage* img_gray = cvCreateImage(cvGetSize(imgSrc), IPL_DEPTH_8U, 1);
  
    cvCvtColor(imgSrc, img_gray, CV_BGR2GRAY);
    cvThreshold(img_gray, img_gray, 100, 255, CV_THRESH_BINARY);

    //寻找最小区域,并截取
    CvRect rc = findArea(img_gray);
    cvSetImageROI(img_gray, rc);
    IplImage* img_gray2 = cvCreateImage(cvSize(rc.width, rc.height), IPL_DEPTH_8U, 1);
    cvCopyImage(img_gray, img_gray2);
    cvResetImageROI(img_gray);

    IplImage* imgSrc2 = cvCreateImage(cvSize(rc.width, rc.height), IPL_DEPTH_8U, 3);
    cvSetImageROI(imgSrc, rc);
    cvCopyImage(imgSrc, imgSrc2);
    cvResetImageROI(imgSrc);

    //形态学
    cvMorphologyEx(img_gray2, img_gray2, NULL, NULL, CV_MOP_CLOSE);

    CvSeq* contours = NULL;
    CvMemStorage* storage = cvCreateMemStorage(0);
    int count = cvFindContours(img_gray2, storage, &contours,
        sizeof(CvContour), CV_RETR_EXTERNAL);

    int idx = 0;
    char szName[56] = {0};

    for (CvSeq* c = contours; c != NULL; c = c->h_next) {

        //cvDrawContours(imgSrc2, c, CV_RGB(255, 0, 0), CV_RGB(255, 255, 0), 100);
        CvRect rc = cvBoundingRect(c);
        cvDrawRect(imgSrc2, cvPoint(rc.x, rc.y), cvPoint(rc.x + rc.width, rc.y + rc.height), CV_RGB(255, 0, 0));

        if (rc.width < imgSrc2->width / 10 && rc.height < imgSrc2->height / 5) {
            continue;
        }


        IplImage* imgNo = cvCreateImage(cvSize(rc.width, rc.height), IPL_DEPTH_8U, 3);
        cvSetImageROI(imgSrc2, rc);
        cvCopyImage(imgSrc2, imgNo);
        cvResetImageROI(imgSrc2);
      
        sprintf(szName, "wnd_%d", idx++);
        cvNamedWindow(szName);
        cvShowImage(szName, imgNo);
        cvReleaseImage(&imgNo);
    }
  
    cvNamedWindow("src");
    cvShowImage("src", imgSrc2);

    cvWaitKey(0);

    cvReleaseMemStorage(&storage);
    cvReleaseImage(&imgSrc);
    cvReleaseImage(&imgSrc2);
    cvReleaseImage(&img_gray);
    cvReleaseImage(&img_gray2);

    cvDestroyAllWindows();

    return 0;
}

 

输入图像:



运行结果截图如下:

 

 

OpenCV(项目)车牌识别2 -- 车牌字符分割(直方图) 一、车牌字符提取 需要把字符揉成一团,这样才能提取轮廓。 0、试错 一开始采取的是膨胀提取车牌字符,发现很多情况无法兼顾。 0-1、没有膨胀/膨胀过小:无法连接上单个字符。 可以看到,一些没有连接上的汉字,轮廓提取就把它们当成了多个字符。 0-2、膨胀过大:错误连接相邻字符。 给予膨胀之后,膨胀又太大了,虽然同一个字符的不同笔画连接成功,但是又错误地把两个字符连接在了一起。 上面的算法感觉很难行得通了,除非借助其他分割算法。下面是优化... 阅读详情

相关推荐

车牌识别之字符切割1

字符切割 车牌识别由三大步组成:车牌定位,字符分割,字符识别。 新手入门,把字符分割作为第一次的尝试,后面会继续更加深度的学习。 首先采用的是一个定位好的车牌图片,对它进行灰度化,二值化,垂直投影,然后进行切割 #include&lt;opencv2/core/core.hpp&gt; #include&lt;opencv2/opencv.hpp&gt; using namespace...

lxx_123456的博客 3764

OpenCV实现车牌定位和字符分割

本案例的车牌图像来源于互联网,如有侵权请尽快联系我,立删。 文章目录一、概述二、车牌图像分析三、车牌定位1. 基本处理2. 图像降噪3. 灰度拉伸4. 图像差分5. 二值化6. 边缘检测7. 形态学处理8. 定位车牌四、字符分割1. 去除上下边缘2. 分割并保存字符五、测试其它图片 一、概述 在智能交通系统中,汽车牌照识别发挥了巨大的作用。其实现是将图像处理技术与计算机软件技术相连接在一起,以准确...

weixin_43397593的博客 1万+

车牌识别技术实战:透视变换矫正与字符分割算法详解

本文详细解析了车牌识别技术中的两大核心预处理步骤:透视变换矫正与字符分割。针对车牌倾斜问题,深入讲解了利用透视变换进行车牌矫正的原理与代码实现;随后介绍了基于跳变次数法去除边框干扰,以及使用垂直投影法进行字符分割的实战算法,为构建高精度车牌识别系统提供了关键技术路径。

weixin_29091105的博客 637

车牌识别中的字符切割

部分内容如下: 4.3本文的改进方法        通过上述两种方法的介绍可以看出,水平投影法对于只有连通字符并且不存在干扰的车牌具有良好的分割效果,而且算法复杂度也相对简单,但对于含有不连通或者粘连字符的情况则有一定难度;相反,模板匹配法根据车牌自身特点首先建立一个匹配的模板,很好地解决了字符粘连和不连通问题,但不足是由于需要事先建立模板,算法复杂度相对较高。针对两种方法各自的缺陷,本文提出

jia_zhengshen的专栏 2万+

YOLOv5车牌识别教程:字符分割与识别

车牌识别是计算机视觉领域中的一个重要任务,可以应用于交通管理、车辆追踪和智能停车系统等应用场景。本教程将介绍如何使用YOLOv5模型进行车牌识别,并重点关注字符分割和识别的过程。我们将使用Python编程语言和相应的库来实现这个任务。通过以上步骤,我们可以使用YOLOv5模型实现车牌识别,并利用字符分割和识别的方法对车牌进行更详细的分析。这个教程提供了一个基本的框架,你可以根据需求进行进一步的优化和改进,例如使用更复杂的模型或调整参数来提高识别准确度。希望本教程对你理解和实现YOLOv5车牌识别有所帮助!

IiProlog的博客 498

MATLAB车牌字符识别全流程:定位、校正、分割与识别实战

图像处理与模式识别中,字符识别是经典问题,其核心在于从复杂背景中提取目标并分类。车牌识别作为典型应用,涉及颜色空间转换、形态学操作、投影分割及模板匹配或轻量CNN等技术。通过MATLAB图像处理工具箱,可实现从车牌定位到字符识别的完整链路,其中预处理与字符分割直接决定识别率上限。该方案适用于课程设计、算法验证及嵌入式视觉原型,平衡了开发效率与识别精度。

weixin_32075843的博客 214

Matlab基于阈值分割的车牌定位识别。 车牌识别主要包括以下三个主要步骤:车牌区域定位、车牌字符分割、车牌字符识别

通过对采集的车牌图像进行灰度变换、边缘检测、腐蚀及平滑等过程来进行车牌图像预处理,并由此得到一种基于车牌颜色纹理特征的车牌定位方法,最终实现了车牌区域定位。采用了模板匹配的方法,对输出的字符图像和模板库里的模板进行匹配以得到对应于车牌字符的具体信息。车牌识别主要包括以下三个主要步骤:车牌区域定位、车牌字符分割、车牌字符识别。车牌字符分割是为了方便后续对车牌字符进行匹配,从而对车牌进行识别。Matlab基于阈值分割的车牌定位识别。

m0_73683584的博客 1603

OpenCV与Python车牌识别实战:定位、分割与字符识别全解析

计算机视觉技术在智能交通领域的应用日趋普及,车牌识别作为其中的典型场景,常被用作图像处理入门项目。传统识别流程通常包含三个关键环节:基于颜色特征的车牌定位、字符分割与字符识别。利用HSV颜色空间对光照变化不敏感的特性,可先从复杂背景中提取车牌区域;再通过轮廓分析与投影法将字符逐一分割;最后借助模板匹配或轻量KNN分类器完成字符识别。整个方案基于OpenCV和Python,无需深度学习框架即可离线运行,适合停车场、门禁等本地化部署。实践中的常见问题,如光照反光导致定位失败、汉字断裂、相似字符混淆等,均可通过调

weixin_29048775的博客 294

Baumer相机车牌字符分割与识别:优化车牌识别准确率的 7 种方法,附 OpenCV+Halcon 实战代码!

Baumer相机车牌字符分割与识别:优化车牌识别准确率的 7 种方法,附 OpenCV+Halcon 实战代码!

xianzuzhicai的博客 875

MATLAB车牌识别全流程:从预处理到字符分割与SVM识别

车牌识别是计算机视觉中典型的工业级OCR任务,其核心并非调用现成OCR接口,而是围绕图像质量退化建模的系统工程。原理上需解决光照不均、倾斜畸变、字符粘连等物理成像缺陷;技术价值体现在无需深度学习依赖、低算力可部署、参数可控易调试;典型应用场景包括停车场出入口、交警卡口、园区门禁等嵌入式边缘识别系统。本文聚焦MATLAB平台,覆盖同态滤波、Hough校正、垂直投影切分、模板匹配与SVM二次分类等关键环节,特别适配R2018a–R2023b版本,支持C代码生成与海康/大华SDK集成。

weixin_29171087的博客 251

基于YOLO的车牌识别:检测+字符分割两步走实战指南

目标检测是计算机视觉中的核心技术,其任务是在图像中定位并分类目标。YOLO作为单阶段检测器的代表,凭借实时性与精度平衡,广泛应用于车牌识别等具体场景。车牌识别并非单一任务,而是可拆解为“车牌区域检测”与“字符分割识别”两个子任务:先通过YOLO精确框出车牌位置,再对裁剪区域做字符级分类。这种两段式架构降低了端到端模型的复杂性,使每一阶段都能针对小目标、长宽比极端等工程难点单独优化。在实操中,锚框重聚类、自适应阈值分割和轮廓过滤等技巧直接影响检测与识别精度。无论是毕业设计、课程项目还是工业部署,掌握基于YOL

weixin_29050513的博客 201

OpenCV车牌识别实战:如何用直方图精准分割字符(附完整代码)

本文详细介绍了基于OpenCV和直方图投影的车牌字符分割实战方法。通过分析二值图像的行列像素分布,精准定位字符边界,有效解决传统方法中的粘连与断裂问题。文章提供了完整的代码实现,涵盖图像预处理、投影计算、分割算法及鲁棒性调优技巧,为构建高精度车牌识别系统提供了核心解决方案。

grpc6streamer的博客 615

BCM-BCP-DRP-运维管理之故障管理——故障的分类与处理流程

ITSM Business Continuity Manage(BCM) BusinessContinuityPlan(BCP) 偏业务 DisasterRecoveryPlan(DRP) 偏IT 天塌了,考虑在天塌了的状态下做什么,怎么开展业务就是BCP; 天塌了,考虑怎么把天撑回去,就是DRP。 DRP+BCP+供应链管理+危机管理等就是BCM (业务连续性管...

mmgithub123的博客 2720

用Halcon做车牌识别:从HSV阈值分割到OCR字符识别的完整流程

车牌识别作为机器视觉领域经典的入门综合项目,将图像采集、预处理、定位分割、特征提取与模式识别融为一体。传统视觉方案中,利用颜色空间转换与形态学操作定位车牌区域,再通过字符分割与OCR分类器完成识别,是兼顾效率与可解释性的常见技术路径。Halcon凭借高效的区域处理能力和形态学算子,能显著简化这一流水线的搭建过程。HSV色彩空间可降低光照干扰,阈值分割与几何筛选用于锁定候选区域,仿射变换矫正透视畸变,最后借助OCR与模板匹配联合实现字符识别与校验。该类技术适用于固定场景下的智能交通、停车场管理等应用。本文基于

weixin_29095049的博客 203

NPP/VIIRS夜间灯光数据:从下载到应用的完整指南

本文提供了NPP/VIIRS夜间灯光数据从下载、处理到应用的完整实战指南。详细介绍了如何从官方源获取数据、解读文件结构、进行坐标校正与数据清洗,并深入探讨了其在城市扩张监测、社会经济指标估算、重大事件影响评估等领域的核心应用。文章旨在帮助研究者与从业者快速掌握这一强大的空间数据,将其转化为研究中的实用工具。

gpu4optimizer的博客 861

vue3 web项目引入高拍仪

高拍仪的引入步骤就两步,安装SDK,然后根据官网的api进行开发。根据自己需要的功能,请求对应的接口。

qq_42480170的博客 4115

python:超简单的字符分割算法(车牌识别、仪表识别等)

文章目录背景图像预处理确定字符区域分割单个字符完整源码结语 背景 在诸如车牌识别,数字仪表识别等问题中,最关键的就是将单个的字符分割开来再分别进行识别,如下图。最近刚好用到,就自己写了一个简单地算法进行字符分割,来记录一下。 图像预处理 彩图二值化以减小参数量,再进行腐蚀膨胀去除噪点。 image = cv2.imread('F://demo.jpg', 0) # 读取为灰度图 _, image = cv2.threshold(image, 50, 255, cv2.THRESH_BINARY) #

书山有路,学海无涯! 6297

告别过热焦虑:用Ansys Icepak给你的电子设备做个“水冷体检”(附冷板案例全流程)

本文详细介绍了如何利用Ansys Icepak进行电子设备水冷系统的热仿真分析,帮助工程师解决设备过热问题。通过冷板案例全流程演示,展示了从几何处理、材料设定到求解器设置和后处理的关键步骤,提升散热设计效率与准确性。

weixin_29299807的博客 439

车牌识别字符分割优化:OpenCV与Halcon的7种方法实战

字符分割是车牌识别系统中的关键环节,其准确率直接决定整牌识别的上限。在实际工程场景中,光照不均、车牌倾斜、边框干扰等问题常导致二值化失效,而固定阈值与简单投影算法难以应对。通过引入自适应阈值、形态学处理、垂直投影自适应切分、连通域校验等图像处理手段,可有效改善字符区域切分的鲁棒性。结合OpenCV的灵活调试与Halcon成熟的OCR分类器,能够在工业相机采集场景下实现更稳定的识别结果。这类优化思路不仅适用于车牌识别,还可迁移至集装箱号、喷码字符等固定版式文本识别任务。

weixin_28221501的博客 269

BUCK电路三种工作模式全解析:CCM、BCM、DCM到底怎么选?

本文深入解析BUCK电路的CCM、DCM和BCM三种工作模式,通过对比其电流波形、效率、纹波及环路特性,提供基于计算公式的量化判断方法。文章结合电池供电、高精度模拟等具体应用场景,给出明确的模式选型策略与实战设计指南,帮助工程师根据核心需求做出最优决策。

ee345的博客 482

INMP441麦克风避坑指南:为什么你的I2S录音总有杂音?(附示波器调试技巧)

本文针对INMP441麦克风与ESP32等MCU通过I2S接口连接时常见的录音杂音问题,提供了一套系统的硬件调试指南。文章深入剖析了电源纹波、信号完整性、接地环路及时钟抖动四大噪声根源,并详细讲解了如何使用示波器进行逐层排查,给出了增加LC滤波、串联阻尼电阻、优化布局布线等切实可行的解决方案,帮助开发者从根本上提升音频质量。

k0l1m2n3o的博客 1021

车牌识别优化:字符分割与OpenCV/Halcon七方法

车牌识别是机器视觉与OCR技术中极具代表性的落地场景,其核心链路涉及图像采集、预处理、定位、倾斜校正、字符分割与识别后处理。在工业相机与普通监控摄像头混用的现场环境中,图像质量虽能通过全局快门与可控曝光提升,但真正决定系统上限的往往是字符分割与识别环节的配合精度。从工程实践出发,基于OpenCV与Halcon两套工具链,系统梳理了提升车牌识别准确率的7种优化策略:采集端运动模糊抑制、CLAHE局部自适应预处理、颜色与边缘双通道定位、倾斜校正、投影与连通域结合的三层分割、识别阶段的双模投票,以及引入业务约束的

weixin_29054399的博客 252

Claude Code 分布式并行开发最佳实践:1中枢+10Worker跨多Git仓库全流程落地

本文介绍了一套基于Claude Code和Git Worktree的分布式并行开发方案,解决多仓库、微服务开发中的核心痛点。方案采用"1个决策中枢+10个并行Worker"架构,中枢负责任务拆解和调度,每个Worker绑定独立仓库实现完全隔离开发。关键优势包括:任务并行效率提升10倍、跨仓库依赖自动编排、版本统一管理、零第三方依赖。文章详细提供了环境准备、架构设计、中枢搭建和初始化脚本等全流程落地指南,特别适合多仓库协同的全栈开发场景。

AI天才研究院 243

车牌字符分割MATLAB代码:智能车牌识别的利器

车牌字符分割MATLAB代码:智能车牌识别的利器 去发现同类优质开源项目:https://gitcode.com/ 在智能交通系统领域,车牌识别技术是至关重要的一环。今天,我们为您推荐一个功能强大的开源项目——车牌字符分割MATLAB代码。以下是该项目的详细介绍,助您了解其核心功能、技术优势及应用场景。 项目介绍 车牌字符分割MATLAB代码是一个基于MATLAB环境的车牌识别项目,适用于MATL...

gitblog_06737的博客 442

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 车牌识别之一:车牌定位
下一篇: 车牌识别及验证码识别的一般思路
sing_sing
博客等级 码龄20年 209粉丝 66原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值