精华内容
下载资源
问答
  • 基于模板匹配的字符识别

    千次下载 热门讨论 2014-06-24 15:28:08
    本文主要要实现字符识别,识别方法是用模板匹配。内容包含模板,待识别字符,完整程序。希望大家能够帮助大家。
  • 文章地址: 基于边界的模板匹配的原理及算法实现 http://blog.csdn.net/huixingshao/article/details/45560643
  • 图像匹配的方法主要分为基于灰度值相关和基于特征提取。 基于像素匹配: 基于灰度值相关的方法直接对原图和模板图像进行操作,通过区域属性(灰度信息或频域分析等)的比较来反映他们之间的相似性。基于灰度的...

    图像匹配的方法主要分为基于灰度值相关和基于特征提取。

    基于像素匹配:  

    基于灰度值相关的方法直接对原图和模板图像进行操作,通过区域属性(灰度信息或频域分析等)的比较来反映他们之间的相似性。基于灰度的图像匹配具有速度、定位精度、误差估计等数据的输出。但是这种方式普遍存在的缺陷是时间复杂度高、对比图像尺寸敏感等。

    原理:
    NCC是一基于灰度相关的算法,具有不受比例因子误差影响和抗白噪干扰能力等优点。其原理是将模板图叠放在搜索图像上面平移,通过比较参考图像和输入图像在各个位置的相关系数,相关值最大的点就是最佳匹配位置。

    如图所示,模板从原点坐标开始平移,每平移一个位置进行一轮基于像素差的相似度计算。

    相关算子:
    create_ncc_model(Template::NumLevels,AngleStart,AngleExtent,AngleStep,Metric:ModelID)
    功能:使用图像创建NCC匹配模板
    Template:模板图像
    NumLevels:最高金字塔层数
    AngleStart:开始角度
    AngleExtent:角度范围
    AngleStep:旋转角度步长
    Metric:物体极性选择
    ModelID:生成模板ID。

    find_ncc_model(Image::ModelID,AngleStart,AngleExtent,MinScore,NumMatches,MaxOverlap,SubPixel,NumLevels:Row,Column,Angle,Score)
    功能:搜索NCC最佳匹配模板
    Image:要搜索的图像
    ModelID:模板ID
    AngleStart:起始角度
    AngleExtent:角度范围
    MinScore:最小匹配分数
    NumMatches:匹配目标个数
    MaxOverlap:最大重叠比值
    SubPixel:是否亚像素级别
    NumLevels:金字塔层数
    Row:匹配目标的中心点行
    Column:匹配目标的中心点列坐标
    Angle:角度
    Score:匹配的得分值

    *清除模板ID
    clear_ncc_model(ModelID)

    测试:
    测试图像:

    halcon代码:

    *基于灰度匹配
    read_image (Image, 'D:/Halcon-WorkSpaces/Test/Image/test9.png')
    *创建模板*********************
    draw_rectangle1 (3600, Row1, Column1, Row2, Column2)
    gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
    reduce_domain (Image, Rectangle, ImageReduced)
    rgb1_to_gray (ImageReduced, GrayImage1)
    threshold (GrayImage1, Regions, 0, 0)
    reduce_domain (Image, Regions, ImageReduced1)
    *创建ncc模板
    create_ncc_model (ImageReduced, 'auto', 0, 0, 'auto', 'use_polarity', ModelID)
    inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, 30)
    **模板匹配********************
    dev_close_window ()
    read_image (Image, 'D:/Halcon-WorkSpaces/Test/Image/test9.png')
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
    dev_display (Image)
    find_ncc_model (Image, ModelID, 0, 0, 0.5, 0, 0.5, 'true', 0, Row, Column, Angle, Score)
    for Index := 0 to |Row|-1 by 1
        disp_cross (WindowHandle, Row[Index], Column[Index], 100,0)
        disp_message(WindowHandle, '得分:'+Score[Index], 'image', Row[Index], Column[Index], 'red', 'false')
    endfor
    clear_ncc_model (ModelID)

    测试结果:

    显而易见,基于像素匹配与颜色无关

     

    基于特征匹配:

    特征匹配是指建立两幅图像中特征点之间对应关系的过程。

    基于像素的匹配的缺陷:
    基于灰度信息匹配的方式最大的缺点就是计算量相当大,其计算过程中有很多不必要的区域也进行了相关计算。其次,这种方式对图像灰度的变化比较敏感,对目标的变形、旋转以及遮挡也比较敏感。

    基于特征匹配的优势:
    由于图像中的图像特征点要比像素点要少很多,很大程度上减少了匹配过程的计算量。当然,图像过于复杂提取到的特征点多的话,也会明显感觉到匹配的时间。

    相关算子:
    inspect_shape_model(Image:ModelImages,ModelRegions:NumLevels,Contrast)
    作用:根据金字塔层数和对比度检查要生成的模板是否合适。
    Image:输入的图像
    ModelImages:获得金字塔图像
    ModelRegions:模板区域
    NumLevels:金字塔层数
    Contrast:对比度

    create_shape_model(Template::NumLevels,AngleStart,AngleExtent,AngleStep,Optimization,Metric,Contrast,MinContrast:ModelID)
    作用:使用图像创建形状匹配模板
    Template:模板图像
    NumLevels:最高金字塔层数
    AngleStart:开始角度
    AngleExtent:角度范围
    AngleStep:旋转角度步长
    Optimization:优化选项,是否减少模板点数(减少特征点数,优化匹配耗时同时可能造成误差)
    Metric:匹配量极性选择
    Contrast:阈值或滞后阈值来表示对比度
    MinContrast:最小对比度
    ModelID:生成模板ID

    get_shape_model_contours(:ModelContours:ModelID,Level:)
    功能:获取形状模板的轮廓
    ModelContours:得到的轮廓XLD
    ModelID:输入模板ID
    Level:对应金字塔层数

    find_shape_model(Image::ModelID,AngleStart,AngleExtent,MinScore,NumMatches,MaxOverlap,SubPixel,NumLevels,Greediness:Row,Column,Angle,Score)
    作用:寻找单个形状模板最佳匹配
    Image:要搜索的图像
    ModelID:模板ID
    AngleStart:开始角度
    AngleExtent:角度范围
    MinScore:最低分值
    NumMatches:匹配实例个数
    MaxOverlap:最大重叠
    SubPixel:是否亚像素精度
    NumLevels:金字塔层数
    Greediness:贪婪值(0到1,值越大越不靠谱相对的数度越快)
    Row:中心点坐标
    Column:中心点坐标
    Angle:缩放
    Score:得分

    测试:

    测试图像:

     

    halcon代码:

    *基于形状的匹配
    read_image (Image, 'C:/Users/斌/Desktop/test10.png')
    *创建模板*********************
    draw_rectangle1 (3600, Row1, Column1, Row2, Column2)
    gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
    reduce_domain (Image, Rectangle, ImageReduced)
    rgb1_to_gray (ImageReduced, GrayImage1)
    threshold (GrayImage1, Regions, 0, 0)
    reduce_domain (Image, Regions, ImageReduced1)
    *创建 模板
    create_shape_model (ImageReduced1, 'auto', 0, 0, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID1)
    **模板匹配********************
    dev_close_window ()
    read_image (Image, 'C:/Users/斌/Desktop/test10.png')
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
    dev_display (Image)
    find_shape_model (Image, ModelID1, 0, 0, 0.5, 0, 0.5, 'least_squares', 0, 0.5, Row, Column, Angle, Score)
    for Index := 0 to |Row|-1 by 1
        disp_cross (WindowHandle, Row[Index], Column[Index], 100,0)
        disp_message(WindowHandle, '得分:'+Score[Index], 'image', Row[Index], Column[Index], 'red', 'false')
    endfor
    get_shape_model_contours (ModelContours, ModelID1, 1)
    clear_shape_model (ModelID1)

    (以实心矩形为模板)

    特征模板:

     

    匹配结果:

    (以空心矩形为模板)

    模板特征:

    匹配结果:
     

    图中表示为,选取两组不同的模板,一组为实心矩形,另一组是空心矩形。我们可以看到选择以实心矩形为模板的其它6个图形(包括空心矩形)匹配得分都是0.9978;选择以空心矩形为模板,其中3个实心矩形匹配得分为0.910035,3个空心矩形匹配得分为0.999645.因此我们得到以下结论:

    1、基于特征的匹配只计算匹配图像中的感兴趣特征点,除此之外的特征忽略。

    2、特征匹配的得分也是通过计算相似特征的占比。

     

    基于像素匹配的同类测试:

    测试代码:

    *基于灰度匹配
    read_image (Image, 'C:/Users/斌/Desktop/test10.png')
    rgb1_to_gray (Image, GrayImage)
    *创建模板*********************
    draw_rectangle1 (3600, Row1, Column1, Row2, Column2)
    gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
    reduce_domain (GrayImage, Rectangle, ImageReduced)
    rgb1_to_gray (ImageReduced, GrayImage1)
    threshold (GrayImage1, Regions, 0, 0)
    reduce_domain (Image, Regions, ImageReduced1)
    *创建ncc模板
    create_ncc_model (ImageReduced, 'auto', 0, 0, 'auto', 'use_polarity', ModelID)
    inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, 30)
    **模板匹配********************
    dev_close_window ()
    read_image (Image, 'C:/Users/斌/Desktop/test10.png')
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
    dev_display (Image)
    find_ncc_model (GrayImage, ModelID, 0, 0, 0.5, 0, 0.5, 'true', 0, Row, Column, Angle, Score)
    for Index := 0 to |Row|-1 by 1
        disp_cross (WindowHandle, Row[Index], Column[Index], 100,0)
        disp_message(WindowHandle, '得分:'+Score[Index], 'image', Row[Index], Column[Index], 'red', 'false')
    endfor
    clear_ncc_model (ModelID)

    测试结果

    (以实心矩形为模板)

     

    (以空心矩形为模板)

     

    对比基于像素匹配和基于特征匹配的两组测试,它们之间的差异就显现出来了。

     

    展开全文
  • Opencv下利用SIFT、SURF、ORB三种特征点实现图像匹配
  • 所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子字符串与字典中的词进行匹配,如果匹配成功则进行下一轮匹配,直到所有字符串处理完毕,否则将子字符串从末尾去除一个字,再...

    正向(前向)最大匹配与逆向(后向)最大匹配。

            中文分词目前可以分为“规则分词”,“统计分词”,“混合分词(规则+统计)”这三个主要流派。这次介绍下基于规则的分词,其是一种机械的分词方法,主要通过维护词典,在切分语句时,将语句的每个字符串与词表中的词逐一进行匹配,找到则切分,否则不予切分。

            正向最大匹配算法:这里需要知道两点,一个是分词词典(也即是已经分词过的词典),另一个是需要被分词的文档。假定分词词典中的最长词有ii个汉子字符串,则用被处理文档的当前字符串中的前ii个字作为匹配字段,查找字典。若此时分词词典中存在这样一个字符串,则匹配成功,而此时被匹配的字段切分出来。如果匹配失败,将匹配字段中的最后一个字去掉,对此时剩下的字串重新与分词词典进行匹配,如此下去直到匹配成功。也即是切分出一个词或剩余字串的长度为零为止,这个时候才是匹配了一轮,接着进行下一个ii字字串的匹配,方法同上,直到文档被扫描完为止。

    示例说明

    示例1:

    对字符串:“研究生命的起源”进行分词。
    假定我们的字典中的相关内容如下:
    研究
    研究生
    生命


    起源


    假定最大匹配字数设定为5。


    正向最大匹配过程

    研究生命的
    研究生命
    研究生 #第一个词匹配成功
    命的起源
    命的起
    命的
    命 #第二个词匹配成功,一个单字
    的起源
    的起
    的 #第三个词匹配成功
    起源 #第四个词匹配成功
    那么正向最大匹配的结果就是
    研究生 命 的 起源


    逆向最大匹配的过程

    生命的起源
    命的起源
    的起源
    起源 #第一个词匹配成功
    研究生命的
    究生命的
    生命的
    命的
    的 #第二个词匹配成功
    研究生命
    究生命
    生命 #第三个词匹配成功
    研究 #第四个词匹配成功
    所以逆向最大匹配后的结果为
    研究 生命 的 起源
    两种分词过程总结
    【正向匹配:从左到右,逐步去掉右部(底部)的字进行新一轮匹配,逆向匹配:从右到左,逐步去掉左部(底部)的字进行新一轮匹配】
    因为中文比较复杂以及中文的特殊性,逆向最大匹配大多时候往往会比正向要准确。

    示例2:

    对“我们在野生动物园玩”进行分词。

    1、正向最大匹配法:

    正向即从前往后取词,从7->1,每次减一个字,直到词典命中或剩下1个单字。

    第1次:“我们在野生动物”,扫描7字词典,无

    第2次:“我们在野生动”,扫描6字词典,无

    。。。。

    第6次:“我们”,扫描2字词典,有

    扫描中止,输出第1个词为“我们”,去除第1个词后开始第2轮扫描,即:

    第2轮扫描:

    第1次:“在野生动物园玩”,扫描7字词典,无

    第2次:“在野生动物园”,扫描6字词典,无

    。。。。

    第6次:“在野”,扫描2字词典,有

    扫描中止,输出第2个词为“在野”,去除第2个词后开始第3轮扫描,即:

    第3轮扫描:

    第1次:“生动物园玩”,扫描5字词典,无

    第2次:“生动物园”,扫描4字词典,无

    第3次:“生动物”,扫描3字词典,无

    第4次:“生动”,扫描2字词典,有

    扫描中止,输出第3个词为“生动”,第4轮扫描,即:

    第4轮扫描:

    第1次:“物园玩”,扫描3字词典,无

    第2次:“物园”,扫描2字词典,无

    第3次:“物”,扫描1字词典,无

    扫描中止,输出第4个词为“物”,非字典词数加1,开始第5轮扫描,即:

    第5轮扫描:

    第1次:“园玩”,扫描2字词典,无

    第2次:“园”,扫描1字词典,有

    扫描中止,输出第5个词为“园”,单字字典词数加1,开始第6轮扫描,即:

    第6轮扫描:

    第1次:“玩”,扫描1字字典词,有

    扫描中止,输出第6个词为“玩”,单字字典词数加1,整体扫描结束。

    正向最大匹配法,最终切分结果为:“我们/在野/生动/物/园/玩”,其中,单字字典词为2,非词典词为1。

    2、逆向最大匹配法:

    逆向即从后往前取词,其他逻辑和正向相同。即:

    第1轮扫描:“在野生动物园玩”

    第1次:“在野生动物园玩”,扫描7字词典,无

    第2次:“野生动物园玩”,扫描6字词典,无

    。。。。

    第7次:“玩”,扫描1字词典,有

    扫描中止,输出“玩”,单字字典词加1,开始第2轮扫描

    第2轮扫描:“们在野生动物园”

    第1次:“们在野生动物园”,扫描7字词典,无

    第2次:“在野生动物园”,扫描6字词典,无

    第3次:“野生动物园”,扫描5字词典,有

    扫描中止,输出“野生动物园”,开始第3轮扫描

    第3轮扫描:“我们在”

    第1次:“我们在”,扫描3字词典,无

    第2次:“们在”,扫描2字词典,无

    第3次:“在”,扫描1字词典,有

    扫描中止,输出“在”,单字字典词加1,开始第4轮扫描

    第4轮扫描:“我们”

    第1次:“我们”,扫描2字词典,有

    扫描中止,输出“我们”,整体扫描结束。

    逆向最大匹配法,最终切分结果为:“我们/在/野生动物园/玩”,其中,单字字典词为2,非词典词为0。

    3、双向最大匹配法:

    正向最大匹配法和逆向最大匹配法,都有其局限性,我举得例子是正向最大匹配法局限性的例子,逆向也同样存在(如:长春药店,逆向切分为“长/春药店”),因此有人又提出了双向最大匹配法,双向最大匹配法。即,两种算法都切一遍,然后根据大颗粒度词越多越好,非词典词和单字词越少越好的原则,选取其中一种分词结果输出。

    如:“我们在野生动物园玩”

    正向最大匹配法,最终切分结果为:“我们/在野/生动/物/园/玩”,其中,两字词3个,单字字典词为2,非词典词为1。

    逆向最大匹配法,最终切分结果为:“我们/在/野生动物园/玩”,其中,五字词1个,两字词1个,单字字典词为2,非词典词为0。

    非字典词:正向(1)>逆向(0)(越少越好)

    单字字典词:正向(2)=逆向(2)(越少越好)

    总词数:正向(6)>逆向(4)(越少越好)

    因此最终输出为逆向结果。

     

    代码

    [中文分词之正向最大匹配算法]

    from: https://youzipi.blog.csdn.net/article/details/105525351

    ref:

     

    展开全文
  • Java switch匹配String

    千次阅读 2016-12-05 10:52:59
    Java switch匹配String

    在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,呼吁很久的String支持也终于被加上了。

    以下是个简单小示例:

    public class Test {
    	public static void main(String[] args) {
            String a = "aaa";
    		switch(a){
    		case "aaa":
    			System.out.println("匹配aaa");
    			break;
    		case "bbb":
    			System.out.println("匹配bbbb");
    			break;
    			default:{
    				System.out.println("default");
    				break;
    			}
    		}
    	}
    }

    输出:匹配aaa

    展开全文
  • 比较常用的几个正则表达式(匹配数字) 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符...
    匹配大写字母开头单词      r"\b[A-Z]+[a-z]*\b"      r"\b[A-Z]\w*\b"
    
    匹配数字     r"\s(-?\d+\.?/?\d*%?)"
    
    替换日期  2019-09-09   换成  2019.09.09               r"\d{4}-\d{1,2}-\d{1,2}"
    
    
    比较常用的几个正则表达式(匹配数字)
    
    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
    
    匹配双字节字符(包括汉字在内):[^\x00-\xff]
    评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
    
    匹配空白行的正则表达式:\n\s*\r
    评注:可以用来删除空白行
    
    匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
    评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
    
    匹配首尾空白字符的正则表达式:^\s*|\s*$
    评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
    
    匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    评注:表单验证时很实用
    
    匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
    评注:网上流传的版本功能很有限,上面这个基本可以满足需求
    
    匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    评注:表单验证时很实用
    
    匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
    评注:匹配形式如 0511-4405222 或 021-87888822
    
    匹配腾讯QQ号:[1-9][0-9]{4,}
    评注:腾讯QQ号从10000开始
    
    匹配中国邮政编码:[1-9]\d{5}(?!\d)
    评注:中国邮政编码为6位数字
    
    匹配身份证:\d{15}|\d{18}
    评注:中国的身份证为15位或18位
    
    匹配ip地址:\d+\.\d+\.\d+\.\d+
    评注:提取ip地址时有用
    
    匹配特定数字:
    ^[1-9]\d*$    //匹配正整数
    ^-[1-9]\d*$   //匹配负整数
    ^-?[1-9]\d*$   //匹配整数
    ^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
    ^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
    ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
    ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
    ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)
    
    /^(100|[1-9]?\d)%$/      // 0% 到 100% 不能有小数
    /^(100|[1-9]?\d(\.\d\d?)?)%$/    // 0% 到 100% 可有小数 (5.2%  55.55%)
    
    评注:处理大量数据时有用,具体应用时注意修正
    
    匹配特定字符串:
    ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
    ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
    ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
    ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
    ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
    

    **

    1. 校验数字的表达式

    **

    1 数字:^[0-9]*$
    
    2 n位的数字:^\d{n}$
    
    3 至少n位的数字:^\d{n,}$
    
    4 m-n位的数字:^\d{m,n}$
    
    5 零和非零开头的数字:^(0|[1-9][0-9]*)$
    
    6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
    
    7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$   
    
    8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
    
    9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
    
    10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
    
    11 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$    
    
    12 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
    
    13 非负整数:^\d+$ 或 ^[1-9]\d*|0$
    
    14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
    
    15 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
    
    16 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
    
    17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
    
    18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
    
    19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
    

    2. 校验字符的表达式

    1 汉字:^[\u4e00-\u9fa5]{0,}$
    
    2 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
    
    3 长度为3-20的所有字符:^.{3,20}$
    
    4 由26个英文字母组成的字符串:^[A-Za-z]+$
    
    5 由26个大写英文字母组成的字符串:^[A-Z]+$
    
    6 由26个小写英文字母组成的字符串:^[a-z]+$
    
    7 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
    
    8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
    
    9 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
    
    10 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
    
    11 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
    
    12 禁止输入含有~的字符:[^~\x22]+
    

    3. 特殊需求表达式加粗样式

    1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
    
    2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
    
    3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
    
    4 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
    
    5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
    
    6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
    
    7 身份证号(15位、18位数字):^\d{15}|\d{18}$
    
    8 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
    
    9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    
    10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
    
    11 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
    
    12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
    
    13 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
    
    14 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
    
    15 钱的输入格式:
    
    16 1.有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
    
    17 2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
    
    18 3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
    
    19 4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
    
    20 5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
    
    21 6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
    
    22 7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
    
    23 8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
    
    24 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
    
    25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
    
    26 中文字符的正则表达式:[\u4e00-\u9fa5]
    
    27 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
    
    28 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
    
    29 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
    
    30 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
    
    31 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
    
    32 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
    
    33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
    
    34 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
    

    在这里插入图片描述

    比较常用的几个正则表达式(匹配数字)

    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

    匹配双字节字符(包括汉字在内):[^\x00-\xff]
    评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

    匹配空白行的正则表达式:\n\s*\r
    评注:可以用来删除空白行

    匹配HTML标记的正则表达式:<(\S*?)[^>]>.?</\1>|<.*? />
    评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

    匹配首尾空白字符的正则表达式:^\s*|\s*$
    评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

    匹配Email地址的正则表达式:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
    评注:表单验证时很实用

    匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
    评注:网上流传的版本功能很有限,上面这个基本可以满足需求

    匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):1[a-zA-Z0-9_]{4,15}$
    评注:表单验证时很实用

    匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
    评注:匹配形式如 0511-4405222 或 021-87888822

    匹配腾讯QQ号:[1-9][0-9]{4,}
    评注:腾讯QQ号从10000开始

    匹配中国邮政编码:[1-9]\d{5}(?!\d)
    评注:中国邮政编码为6位数字

    匹配身份证:\d{15}|\d{18}
    评注:中国的身份证为15位或18位

    匹配ip地址:\d+.\d+.\d+.\d+
    评注:提取ip地址时有用

    匹配特定数字:
    2\d*KaTeX parse error: Expected 'EOF', got '\d' at position 20: …//匹配正整数 ^-[1-9]\̲d̲*   //匹配负整数
    ^-?[1-9]\d*KaTeX parse error: Expected 'EOF', got '\d' at position 17: …  //匹配整数 ^[1-9]\̲d̲*|0  //匹配非负整数(正整数 + 0)
    ^-[1-9]\d*|0KaTeX parse error: Expected 'EOF', got '\d' at position 28: …负整数 + 0) ^[1-9]\̲d̲*\.\d*|0\.\d*[1…   //匹配正浮点数
    ^-([1-9]\d*.\d*|0.\d*[1-9]\d*)KaTeX parse error: Expected 'EOF', got '\d' at position 21: …配负浮点数 ^-?([1-9]\̲d̲*\.\d*|0\.\d*[1…  //匹配浮点数
    3\d*.\d*|0.\d*[1-9]\d*|0?.0+|0KaTeX parse error: Expected 'EOF', got '\d' at position 33: … + 0) ^(-([1-9]\̲d̲*\.\d*|0\.\d*[1…  //匹配非正浮点数(负浮点数 + 0)
    评注:处理大量数据时有用,具体应用时注意修正

    匹配特定字符串:
    4+     / / 匹 配 由 26 个 英 文 字 母 组 成 的 字 符 串 [ A − Z ] +   //匹配由26个英文字母组成的字符串 ^[A-Z]+   //26[AZ]+  //匹配由26个英文字母的大写组成的字符串
    5+     / / 匹 配 由 26 个 英 文 字 母 的 小 写 组 成 的 字 符 串 [ A − Z a − z 0 − 9 ] +   //匹配由26个英文字母的小写组成的字符串 ^[A-Za-z0-9]+   //26[AZaz09]+  //匹配由数字和26个英文字母组成的字符串
    ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串


    1. a-zA-Z ↩︎

    2. 1-9 ↩︎

    3. 1-9 ↩︎

    4. A-Za-z ↩︎

    5. a-z ↩︎

    展开全文
  • opencv+python实现图像匹配----模板匹配、特征点匹配

    万次阅读 多人点赞 2019-02-12 16:30:46
    文章目录模板匹配与特征匹配python的版本及依赖的库的安装opencv+python模板匹配[^1]匹配材料Template Matchingopencv+python特征匹配[^2]匹配材料BFMatching描述特征点--运行结果不精确基于FLANN的匹配器(FLANN ...
  • 阻抗匹配是什么意思?阻抗匹配原理详解

    万次阅读 多人点赞 2019-06-12 20:00:53
    阻抗匹配是什么意思_阻抗匹配原理详解 -------本文轉載自<http://m.elecfans.com/article/671550.html>  本文主要详解什么是阻抗匹配,首先介绍了输入及输出阻抗是什么,其次介绍了阻抗匹配的原理,最后...
  • 模板匹配,特征点匹配-全

    千次阅读 2019-07-09 23:46:33
    模板匹配:模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,...
  • 图像匹配matlab程序设计:1. 概念解释,2.数字图像匹配算法设计:⑴基于灰度的归一化匹配算法⑵基于灰度的快速模板匹配算法。三.相应matlab程序设计:1.数字图像匹配相关函数 2.数字图像匹配函数:(1) 基于灰度的...
  • 最优匹配:最优匹配又称为带权最大匹配,是指在带有权值边的二分图中,求一个匹配使得匹配边上的权值和最大。一般X和Y集合顶点个数相同,最优匹配也是一个完备匹配,即每个顶点都被匹配。如果个数不相等,可以通过补...
  • NLP之文本匹配及语义匹配应用介绍

    万次阅读 多人点赞 2019-07-11 18:11:57
    2、文本匹配方法概述2-1 传统文本匹配方法2-2 主题模型2-3 深度语义匹配模型表示型交互型3、语义匹配应用介绍3-1 短文本-短文本语义匹配3-2 短文本-长文本语义匹配案例1-用户查询-广告页面相似度案例2:文档关键词...
  • 匹配滤波

    万次阅读 多人点赞 2020-09-23 20:45:27
    匹配滤波(matched filtering)是最佳滤波的一种。当输入信号具有某一特殊波形时,其输出达到最大。在形式上,一个匹配滤波器由以按时间反序排列的输入信号构成。且滤波器的振幅特性与信号的振幅谱一致。因此,对...
  • 通配符匹配之三种解法

    万次阅读 2020-04-25 19:10:44
    通配符匹配之三种解法题目描述题目分析递归解法python 代码动态规划解法python代码回溯法python代码   这是leetcode上一道很棒的题目,告诉我一个道理,抓不住问题的关键,再优化也只是徒劳。这个题目略微有点难,...
  • 匹配问题

    千次阅读 2018-09-22 15:17:49
    匹配问题匹配问题中的重要概念GS算法GS算法的几个特性 匹配问题中的重要概念 匹配,假设有男人的集合M和女人的集合W,每个男人向女人W求婚,并且两个人成功组成一对,就叫做匹配。 完美匹配,假设集合M和集合W的...
  • 文本匹配(语义相似度/行为相关性)技术综述

    万次阅读 多人点赞 2019-01-13 13:08:39
    NLP 中,文本匹配技术,不像 MT、MRC、QA 等属于 end-to-end 型任务,通常以文本相似度计算、文本相关性计算的形式,在某应用系统中起核心支撑作用,比如搜索引擎、智能问答、知识检索、信息流推荐等。本篇将纵览...
  • 图像匹配几种常见算法与实践

    万次阅读 2020-08-07 19:05:18
    奇技 · 指南本文主要内容1.模版匹配2.特征匹配3.深度学习去找目标图像匹配的应用及背景图像匹配是指通过一定的匹配算法在两幅或多幅图像之间识别同名点。应用:遥感(制图更新),计算机视觉...
  • 角点检测与匹配

    热门讨论 2014-04-01 12:20:47
    本程序只是一个简单的demo,里面包含了Opencv对HARRIS,SHI_TOMASI,FAST,SURF,SIFT算法的实现,初学着可以看看。
  • Python+Opencv2(三)图像特征匹配

    千次阅读 多人点赞 2020-04-09 10:47:29
    文章目录一、检测特征点1.sift检测特征点2.surf检测...暴力匹配法2.KNN匹配法3.FLANN匹配法4.总结 环境:python3.7 + opencv3.4.2 后文运用SIFT和SURF,需安装opencv-contrib-python pip uninstall opencv-python...
  • 双目立体匹配原理及流程简介

    千次阅读 2019-07-27 01:22:41
    2.从各具特色的双目立体匹配算法框架来看,算法有效性主要依赖3 个因素,选择准确的匹配基元(决策变量)、寻找相应的匹配准则(目标函数和约束条件)、构建能够准确匹配所选基元的稳定算法(求解过程)。 3.构建一...
  • KMP模式匹配算法详解

    万次阅读 多人点赞 2020-02-23 15:48:40
    KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)...
  • 稀疏匹配和稠密匹配

    千次阅读 2020-04-20 16:19:12
    学习双目视觉总是对一些概念模糊不清,例如稀疏匹配和稠密匹配,今天来总结一下。 稀疏匹配 基于特征(点、线)的匹配称作稀疏匹配。 在立体图像对中识别兴趣点而后在两幅图像中匹配相对应的点。 识别兴趣点 在图像...
  • 点云匹配介绍与ICP算法

    万次阅读 2019-04-22 20:30:59
    点云匹配  图像配准目的在于比较或融合。针对同一对象在不同条件下获取的图像,因为激光扫描光束受物体遮挡的原因,不可能通过一次扫描完成对整个物体的三维点云的获取。因此需要从不同的位置和角度对物体进行扫描...
  • 二分图匹配——匈牙利算法

    千次阅读 多人点赞 2019-05-31 16:57:03
    匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。 基本原则就是在原有匹配(最开始的按优先顺序匹配)基础上...
  • 游戏对战匹配逻辑小结

    千次阅读 2019-06-15 18:45:43
    近期接触了到了游戏后台的匹配逻辑,写此文作记录,也给后来者一些参考。 场景与需求 玩家去匹配战斗力与自己类似的其他玩家。如果在一定区间找不到对手,那就扩展区间。 连续匹配两次,不能匹配到相同的玩家。 ...
  • Java 使用正则表达式匹配淘口令

    千次阅读 2019-07-17 10:16:27
    项目中被正则表达式的反斜线问题坑了几次了,今天恰好用到正则表达式的匹配,又遇到饭斜线的处理,记录一下。先对比其他语言和 Java 语言中反斜线,最后再给出淘口令匹配的案例。
  • 匈牙利匹配算法原理

    千次阅读 2019-05-27 22:21:12
    文章目录图论中的基本概念匈牙利算法中的基本概念匈牙利匹配算法匈牙利匹配算法举例匈牙利匹配算法Python代码实现 图论中的基本概念 二分图: 一个图中的所有顶点可划分为两个不相交的集合 U 和 V ,使得每一条边都...
  • 倾向匹配得分PSM学习笔记

    万次阅读 多人点赞 2020-07-15 11:47:49
    一直在想写倾向匹配得分PSM学习笔记,好好总结一下。但一直拖着,对倾向匹配得分法虽然思想比较理解,但没有系统地学习,所以这篇博客总结一下老师们的一些文章,在总结中学习,哈哈~ 1 产生背景 参考学习文章:...
  • 若该文为原创文章,未经允许不得转载 原博主博客地址:...本文章博客地址: 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 目录 前言 ...图像匹配 Part1:局部不变...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,608,422
精华内容 1,043,368
关键字:

匹配