扑克纸牌识别_第1页
扑克纸牌识别_第2页
扑克纸牌识别_第3页
扑克纸牌识别_第4页
扑克纸牌识别_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、扑克纸牌识别作者: 日期:课程设计课程名称 题目名称 学生学院 专业班级 学号 学生姓名 指导教师年月日摘要?随着图像处理、人工智能、计算机技术的不断发展,计算机识别技术也日趋成熟 ,逐渐转为使用阶段 ,目前计算机识别方法主要有两种 :1) 标记识别技术;2) 基于图像处理的识别技术。第一种方法是先在识别目标上预先安设一个标记,标记可以是 C 条形码等 ,再将目标 的信息存储在标记中 ,则从标记中可以识别出目标及其它相关的内容。这种方法的优点是识 别准确度高、速度快和可靠,但由于这种方法对硬件的要求 ,使得它存在了许多的局限性, 若应用到扑克纸牌识别当中,需要为纸牌装有一个微型的IC ,这样的

2、设备价格十分昂贵,同时也摒弃了纸牌的实际用途 ,普及实用性不强。?基于图像处理的识别技术相比较第一种方法的优势在于不需要给识别目标添加任何辅助设 备就可以对其进行识别。 应用到扑克纸牌识别当中, 对目标信息的采集是非接触性的, 可以 实时识别 ,非人工操作 ,工作效率高。 这种方法是基于计算机视觉和图像处理技术,作为一个软件系统,更方便维护和升级,通用性更强。存在着这几方面的优势,基于图像处理的识别技术具有很大的发展空间。基于图像处理的纸牌识别主要包括纸牌图像预处理(倾斜校正与定位) 、特征提取、特征匹配、纸牌识别等方面的技术。系统构成如上图所示,当系统发现监视图像发生变化时 触发图像采集 ,

3、通过 CCD 摄像头摄取的纸牌图像 ,然后识别系统对纸牌图像进行一系列处理 从而识别出纸牌 ,输出识别结果。纸牌图像预处理 传感器触发摄像头进行图像采集后可以得到一张图像 , 图像中包括背景和待识的 目标纸牌, 但目标纸牌在图像中并不一定是正放的, 许多的时候纸牌与图像的边缘形成一定 的倾斜角度 , 如下图所示:纸牌物理与图因此 ,纸牌识别之前,必须先对目标纸牌进行倾斜校正和定位。 对于整个纸牌识别系统来说, 纸牌识别精确度的高低很大程度下取决于纸牌的倾斜校正 与定位精确度高低,这是十分重要的一步。纸牌形状为一矩形,纸牌是否倾斜可以以纸牌的物理边缘是否与图像边缘倾斜为准则,若纸牌的物理边缘与图

4、像边缘呈 0 或 90 度 (平放或正放),则纸牌没有发生倾斜,反之,则存在倾斜。根据以上分析的特点, 可以利用 ug变换和边缘检测结合的方法实现纸牌的倾斜校 正与定位。H h 变换是利用极坐标变换的方法 线与图像边缘所成倾斜的角度。如下左图所示 通过和参数的变化可以累加出对应的值,在图像中进行像素的累加, 从而估算出最长直 ,首先在原图像中引入、和 L 三个参数, ( 直线长度):、利用 Houg变换 , 可以很容易地得出在图像中最长直线的长度和该直线与图像边缘对 应所成的角度。 对于大多数的纸牌来说, 我们可以直接把检测出来最大的 L 所对应的倾斜角 视为纸牌的倾斜, 这是因为, 纸牌本身

5、拥有的一条较长边缘, 而任何角度上的直线像素累 加都不能与之相比。纸牌本但对于一些内部图案很复杂的纸牌,如J、Q、K和 JK ,由于图案边缘复杂性的原因,H ug变换后就会产生一些非纸牌物理边缘而长度超过物理边缘的线条,此时 ,该线条对应的倾斜角就不是纸牌与图像所成的真实倾斜角度。纸牌内部出大量的?这些复杂线条信息的存在 , 会对纸牌物理边缘的确认产生十分大的影响,因此,在Ho gh变换之前 ,必须采取一些操作, 最大程度地去除这些复杂的边缘信息的同时 , 保留纸牌的物理 边缘信息。可以在经过边缘检测的前提下, 通过形态学闭操作把纸牌内部的复杂线条模糊化 , 然后再对模糊化后的图像进行边缘检测

6、, 具体效果如下图 :采用圆形结构的形第二次的边缘?经过以上的步骤后,再对图像进行Hugh 变换,就可以准确地确认出纸牌的物理边缘, 然后对纸牌进行倾斜校正与定位, Ma lab 程序实现如下:fun tion poker=rectify(rgbi ag)%扑克目标校正且定位函数grey rgb2 ray ( rgbimag ); ? %灰度化图像e1e ge(gr y,'so el','bo h);? %灰度化图象边缘化bw1=mclo e( d1,s rel('dis , 0); ? %?形态学闭操作圆形结构体 %以上形态学操作为了模糊纸牌内部的线条结构%从

7、而减小 J, ,K,JOK 纸牌等内部复杂边缘对定位的影响 e2=edge(bw1,' oel' ,'bot '); ? ? ?对纸牌的物理边缘进行检测 bw =bwmorph(ed2,'d ate ); ? ? ? 结构性膨胀加强边缘效果 o h=radon(bw2,-9 :90); ? ?%-到 90 度的 hough 变换m,n= ize(h gh );rot t =0;?%倾斜角值sline=0;? ?%最长直线长度fo i=1:mfor j=:n o h(i,j) e;rotate= -1; li e= ou (, );end dended3=

8、bw oph(ed2, n', 0);b3= mr ate( d,-rotate);?m, =fin(3);?rgb m ota e( gbi ge,-rotate,'bi%预校正?%预测校正后的目标位置in ar' );?倾斜校正 oke =rgb( n(m):ma (m),min(n): ax(n),:);%定位m, = ze( ok r ) if >mpoker=imr t (poke ,90 , 'bilinear ); en纸牌特征提取 纸牌具有很多的特征,如字符特征,花形特征,图案特征,颜色特征等,不同的纸牌具 有不同的特征。根据特征的组合 ,

9、 可以产生出 5纸不同的纸牌。纸牌识别的第一步,必须 在待识别的纸牌中提取它所具备的特征。由于纸牌内部的图案较复杂 , 对其操作运算量较大 , 不以其作为识别的特征。 而字符和花 形特征结构较为简单, 易于操作, 所以应该在纸牌中提取字符与花形的特征, 并以这两个特 征识别出纸牌。在纸牌倾斜校正与定位后 , 根据纸牌的固有属性,可以大概地定位出纸牌上字符与花形 的位置,然后把字符与花形粗略提取出来。提取出字符与花形的大概位置后 , 必须对提取出的图像进行二值化,进一步提取特征。 二值化是指整幅图像像素仅有黑、白二值的图像。由于 “非黑即白”的特性,二值图 像在数字图像处理中占有非常重要的地位。

10、 二值化的关键是要找到合适的阈值来区分对象和 背景。阈值选取有许多的方法 ,常用的阈值选取方法有 : 直方图双峰法、自适应局部阈值法、 最佳阈值法等。?Ostu 算法是最佳阈值算法的一种。 s算法是利用最大类间方差法, 判决分析最小二乘 法的原理基础上推导得出的。它的计算步骤是先计算图像的灰度直方图概率函数, 然后以阈值为基准将灰度级划分为两类 , u算法求二值化最佳阈值的 Matla 程序实现如下: fu ct on ee ostu( MAGE) 最大类间方差 ostu 算法 , 求最佳阈值 m,n,s size( MAE);i 1 ma =IM GE; ed if = image= GB2

11、gray( I GE); nd);e a k =256; cuts= mh st(imag , anks ) ; p=counts um(c unts);o ega=cumsum( ); mu=cum m(p.*(0 : ra ks- )') ; mu_ ( si m2=0;? ? ? %otsu 类间方差T 0;? ? ? %原始阈值h=0;图像二Hax=0; 0=0; w1 0 ; =0; 1=0; HStore=zeros( , 56); for =1: anks f (o ega(i)= )|( -omega( )= 0) co t ue;ed; 0 omeg( i);w1=1

12、 w ;u0=mu(i) w0; 1 ( u_ -m (i) ) / 1; si m 2=w0*(u -mu_t).2+w *(u1 _ h= i ;HStore(i)= ;end m x max( HSto );isf ni maxval isfinit (H );i sfi t _maxva x mea( find(HStore= ax) )l v l = (idx- 1) / (ran s - 1);els leve = 0.0 ; nd在字符和花形粗略定位并且二值化之后 , 有时会残留一些很长边缘信息。这些边缘信息 多数来自于纸牌本身的图案边缘或背景残留。由于这些线条多数与字符和花形的

13、颜色相近, 因此在图像二值化之后仍然会保留下来。 这些多余的边缘信息给特征的正确提取带来了很大 的影响,所以在字符分割之前去除这些干扰是必要的。这些边缘信息都具有连续不跳变的特性 , 因此可以利用这个特性对二值化图像进行扫描粗略定位并二当出现超过一定长度不跳变的线条,把它视为干扰信息,并且把它去除。从左至右进 行扫描,当 列方向上出?清除干扰线条的 l b 实现程序如下:funct n st = edce(bwstr);%去除干扰边缘信息m,n=size(bws r);tem = s( ,n);n m=1; o j=1: ount=0;f r i :mi wr(i , )= ; ?%?线?条不

14、连续 ount=0;co ti e;lse unt= o nt+ ; ? 连续不跳变点数增加 if ount>=m/3 ; ? ? 连续不跳变长度超过 13 边长break;e dende di c un >=m/3l ne( u) j;清除干扰nu = um+1; ? ? ?%记录扫描到线条位置 end ndo 1:nu - ? ? 清除干扰边缘 for j=1 : m emp(,line( )=0;e d d str=log cal(d uble(bws r).*t mp);?这个算法对断裂较多的线条没有作用, 但能够在一定程度下消除了线条对目标信息的干扰, 为纸牌识别的准确度

15、提供一个保障。纸牌识别?在识别技术中,被广泛采用的有两类特征: 结构特征和统计特征。常用的结构特征主要有 :笔道密度函数、 空洞和缺口、字符的特殊节点数。 而常用的统计特征主要有复杂指数、 粗网 格特征、垂直和水平投影。?纸牌中有字符和花形两种字符 , 字符包括 A、 3、 6、7、8、1、 Q、K、 OKER十四种;而花形包括:黑桃、红桃、梅花和方片四种。不论采用结构特征还是统计 特征的匹配方法方法,均需要与一个系统预知道的标准符号模板库进行匹配。?结构特征匹配的识别准确率较高 , 但是运算量十分大,用于符号结构较复杂的识别;统计特 征匹配识别准确率相对较低 , 但运算量少,适用于结构简单的

16、符号识别。纸牌只有 4 个字 符和 4 个花形符号 ,而且结构较简单 , 这里选用统计特征匹配。对于不同的符号,其投影均不相同。因此,可以利用待识别符号投影与模板中各符号的投影求均方差, 选择均方差最小(即与待识别符号投影偏离最小 ) 所对应的模板符号作为识别结果。在符号中, JOKER信息像素所占数目较多,可以先对其确认。在匹配前先对符号进行一 定的结构性膨胀, 由于 JOKE具有多个字符 , 在膨胀后非零像素增加的数量定会大大的大于 其它纸牌。 这里设置一个临界值, 当某待识别纸牌特征像素数量大于此临界值时把这张纸牌 识别为 KER,小于临界值再与其他模板进行匹配 , 这样就可以不需要额外

17、加入 JOK R模 板,同时也一定程度下提高了系统的识别效率。Matab - GU 程序实现? 新建一个空的 GUI 任务 :设置菜单栏 :添CexitrecitifyCbinarygetsymstrrecognitioabout_Cgray Ca菜单栏选择项映射 Cal back 函数new Cal?各菜单选择项映射函数具体定义:打开( )打开一幅图像 , 并且显示到窗口上。fu ctio new_Ca lback( Objec , event at , andes) gol AG;g al POKE ;l b GRAY; g ob BW;global BWSTR; ( *.bmp'

18、 ;'*.jpg' ?%?没有打开图像;'* ,t f' ,' 打开图像 ') ;name=0;n e,path uig tfil nam =0; ?re u ;endIMAG=imread( tr a(pth,n e); ? 成功打开图像 POKER=0;GRAY=0;BW=0;BWTR=0;? %其他图像复位 su plo (1,1,1),ims ow( IMAGE),ti e( 扑克纸牌图像 ' );倾斜矫正与定位 () 对纸牌图像进行倾斜校正和纸牌定位,计算定位耗时并显示。fu t on r cti y_Cl back ( O j

19、e t, v d ta, handl s) gl bal IM E;goal PO R;if IMAGE=0 ;%未打开图像msgb x(' 请先打开一幅扑克图像 ' ,' 错误 ','err r);els tic ; ? ? 计算校正与定位用时POKR=rectif (MAG);? ?%自定义函数 ect f ()if toc>5 ? ? ? 设置超时时间为 3 秒ms box(' 图像校正定位超时 ,' 错误 ','er r' );re u n;end ime=num2str(toc ); s r=str

20、c t( 校正与定位耗时 ',time,' 秒');su lot ( , , ),i show( OKER), i le(' 扑克纸牌 ' ) msgbox ( tr,' 消息 ' ) ;en图像二值化( B)对纸牌图像进行二值化 ,阈值用最佳阈值 ou 算法计算得出。 fun tion bin ry_Ca back(h bjt, eve data, han les ) g oa IM GE; ? ?%全局变量glo al POKER; l bal GRA ;global W;f I AGE=0? ? 未打开图像ms( ' 请先打

21、开一幅扑克图像 ',' 错误 ','error );els PO ER=0? ?%?未进行图像校正msgbox (请先对图像进行校正定位 ', 错误 ','erro ');e if GRAY= ? ?%未进行图像灰度化m gbox(' 请先对图像进行灰度化 ' , ' 错误 ' , ' ror');elsebw=im2bw(GRA ,ostuGRA ); ? ? ?%自定义函数 otu()u pl t ( 1,1,1), endBW=lo ic l ( abs(d ub( w)-1

22、) );mshow( B), i (' 图像二值化 ' )纸牌字符提取( P) 提取纸牌的特征字符。fntio et y tr_Callba k(hbjet, eve tdata, ha ls) obal M GE;gobal PO R; oba GRAY;globa BW; lo BWSTR;i IMAG=0? ? ? %未打开图像msg o(请先打开一幅扑克图像 ',' 错误 ' , r? 未进行图像校正 ,错误 ','erro ?%未进行图像灰度化or');e seif P KR=0?msgbox( 请先对图像进行校正定位

23、else R Y= ?msg x(' 请先对图像进行灰度化 ',' elseif W =0? ?ms ox (请先对图像进行二值化 lse );错误 , ero ');未进行图像二值化 ,' 错误 , erro ') ;m,n =sze( GAY) ;pker tr=G Y(2:m/2,n/2 :n/5.5) ;?%字符粗略定位bw im2 w(pok str,ostu(pokers r); ?%自定义函数 os u() =b orph(bw,'cl a'); ? %清除孤立点bw =log ca(a(do b e(bw)-1);

24、?%二值图像反色w =redu e(bw2);? ?%自定义函数 reduc ()m,n size ( b 3);temp=sum(b 3);sh ow(2:n+1)=emp;shd()=;sha ow(n+2) =;f i=2: +if had w(i)=0&s ad (i- ) =0&shadow( i )=0%出现孤立线条 or j=1: bw3( j,i-1 ) ; ? 删除孤立线条列 endend m,n=find(bw3 );BWSTR=b 3(min(m ): m x( ) ,m n( ) :m (n ) );s b t(1 , 1,1) ,imshow( WSR

25、),ti e(' 纸牌特征字符 ') ; en扑克识别 (R)对字符特征进行匹配识别 , 并且输出识别结果。function reco nt on_C l ac (hObj ct , ev ntdta, hnl s) g al MAGE; l bal POKER;lo a RA;g obal BW;gl al WSTR纸牌字符模板, 34* 2 投影st 1 6 6 6 6 8 8 10 10 10 8 8 8 10 10 8,.8 8 8 2 12 16 6 12 1 8 8 8 1 16 16 ;?%str2= 10 10 1 16 1 12 2 2 1 1 6 6 4 8

26、,. 8 6 6 6 6 6 6 6 10 1 22 22 ;? %2st3=2 22 14 14 8 8 8 8 8 12 1 4 1 6,. . 4 4 4 4 4 4 8 8 8 12 12 8 18 12 12 ; 3%? str =2 2 44 6 6 8 8 10 10 12 12 10 10 10 10 8 8,.1 10 12 12 20 2 22 22 6 6 6 6 6 8 8;?%?4str 8 18 6 16 4 4 4 4 4 166 16 6 6 4 4 4 4,. .4 4 4 4 4 10 12 2 16 16 12 12 2; ? ? %5str6=9 9 1

27、5 1 77 5 53 3 41 18 1822 9,.9 9 9 11 1 11 7 7 1 1 11 11;?str7= 15 1522 14 1 9 5 555 5 54 4 4 6 6,.4 4 6 44 4 4 44 4; ?%? 7st = 0 0 6 16 0 10 68 6 6 1 124 4144,.10 10 8 8 8 88 8 814 4 181810 10;?%8str9= 14 1416 1 8 8 8 12 1210 10 2 2 12 1,818 1616 4 4 4 4 6 62 12 14 14 8 8;?%9sr010 10 1 614 14 1 12 1

28、2 121212 12 12 12, .2 12 12 12 12 1212 2 121 12 1161 1 160 10;?10str11 13131 11 5 5 55 5 5 5 55 5 , .5 55 9 99 14 1413 34 4 ;?%str12= 1111 101 1 6 6 6 6 6 66 6 6 66 1 0,. 14 1 112 12 100 110 10 18 8 1212 ;? %Qstr13=20 20 2021 1 0 100 10 1 10 1 12,. 12 2 1210 10 10 10 8 0 18 1 200;?%?KSTR=st 1;str ;s

29、tr ;str4;str5;st;str7;s r ;str9;st 1;r 1;s ;st 13;%纸牌花形模板 ,240 投影st l 1=4 4 68 8 1211611 16, .20 0 20 20 20 20 14146 6;?%黑桃st le2=12 2020 2000018 16 16, .14 1 2 1 8 8 6 4 2 2; ?%红桃 styl =4 4 8 10 1 10 10 8 8 6 16, .0 20 20 2 20 20 12 12 4 4 4 4; ? ? ? ?%梅花stle=2 2 4 6 1212 16 20 20 0 20,16 6 12 2 6

30、6 6 6 22;? ? ? 方片 T LE= tyle1; yl 2;sy3; yl 4; IMAGE= 0?%?未打开图像m g ox(' 请先打开一幅扑克图像 ,' 错误' , error');shadow1=(su ( YM1,2)'s a ow2=( sum( 2,2)'sgb(' 请先对图像进行校正定位 ',' 错误 ', error' )elseif RAY=? ?%未进行图像灰度化msgb x(' 请先对图像进行灰度化 ' ,错误 ','err r')

31、;elsei BW= ? ?%未进行图像二值化m gbox(' 请先对图像进行二值化 ',' 错误', er r' );elseif ST = ?%未提取特征m ox(' 请先提取图像字符 ','错误 ','error');esesym=i lose(BWSTR, s re (d sk,3);?粗略估算特征面积大小shado =su (sym);ifmax(sh dow)>=40? ?%像素过多识别为为 JOK Rr ult=strcat ( ' 识别结果 :', JOKE'

32、);msgb x(res t,' 消息,' ar ' ) ;elsesm=wmrph ( BWSTR,'cle n);?清除孤立点saw=(sm(s ,2) ; ? ? 侧面投影 en ength(shadow); i= :l n- ? ?%搜索数字符号与花形符号的分界点ifhad w() =0&shadow( +1) = 0 检测到靠近数字一边的边界bo de 1=+1;i nd 1;c ntin e; ndif shadow( )<=1 sh dow(i+1)>1%检测到靠近花形一边的边界bonder2=i ; eak;endedbo d

33、er=(b nder b ndr2) ;? ?%取两个边界的中间作为符号 分界线SY 1 sym(1:b n er,:); ? ? ?数字符号 ,n i d(S M1);SYM M (min(m) : ( ), i (n):max(n) ) ;SYM1=imr z( Y1,34 22); ?%模板归一化SY 2=sm(oder: e , :);?%花形符号 ,= in (SY2);S M=SY (min( ) :max(m),min(n) :max(n ) );SY 2 imresize(SYM2,24,20 ); ? %模板归一化%字符匹配ro m a =50;sn1=0; i=1:13 ?

34、 %搜索最佳匹配的模板t mp=S R( , :); r or=a (shad w1 tmp);err r=mean(error, ); ?%求绝对均差if rr err rmea ;sn1=i;erro ean=r o;en ndif ror n>=; ?%误差过大sn ; nd%花形匹配er o mean 5; n2=0;f r =1: ? ? %搜索最佳匹配的模板 tem =STYL (i ,: );er or= bs(sha o - e );erro =ea (e r ,2) ;?%求绝对均差if e ror< rror ea ;sn2 i ;er ormea = ro ;

35、endendif er or ea >=3;? ? %误差过大 n2 0;end特征映射switch sn1 ase 0r ult ='- 不能识别出字符ca 1 esult1='A'case10 ult1 ' 0' ase 11reul 1'J' ;c se 2 result =' 'c se 13res t1= K' ;ot erw eresult1 num2s r(sn1); ?%对应数字转成字符型 endsw tch 2case 1 e ult2=' 黑桃 ' ; se result2

36、= 红桃 ' ;c e 3resul 2=' 梅花 ;case 4resul = 方片 'otherwis res lt2=' 不能识别出花形 'end e ul =str at ( '识别结果: ' , res lt2 , esul 1); ms box(re t,' 消息 ','war );e ed心得体会? 程序能够较准确地实现纸牌识别功能 , 但此识别系统对图像中纸牌的要求较为严格,摄像 时不能出现纸牌扭曲, 或者摄像头与纸牌存在较大的倾斜角。 在研究过程中, 感觉到还有许 多可以进一步提高对纸牌识别的能力的方法值得继续研究。 对于此纸牌识别系统来说, 最需 要改进的地方我觉得有如下几个方面:(1)符号的定位方面。只根据符号在纸牌上的大概位置从而对符号的位置进行大致的确定显得有些武断, 若纸牌在摄像时出现一定程度的扭曲 , 又或者摄像并非正对纸牌的 时候 ,这种粗略定位的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论