




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计课程名称题目名称学生学院专业班级学 号学生姓名指导教师摘要随着图像处理、人工智能、计算机技术的不断发展,计算机识别技术也日趋成熟,逐渐转为使用阶段,目前计算机识别方法主要有两种:1)标记识别技术;2)基于图像处理的识别技术。第一种方法是先在识别目标上预先安设一个标记,标记可以是IC条形码等,再将目标的信息存储在标记中,则从标记中可以识别出目标及其它相关的内容。这种方法的优点是识别准确度高、速度快和可靠,但由于这种方法对硬件的要求,使得它存在了许多的局限性, 若应用到扑克纸牌识别当中,需要为纸牌装有一个微型的IC,这样的设备价格十分昂贵,同时也摒弃了纸牌的实际用途,普及实用性不强。基于图
2、像处理的识别技术相比较第一种方法的优势在于不需要给识别目标添加任何辅 助设备就可以对其进行识别。应用到扑克纸牌识别当中,对目标信息的采集是非接触性的, 可以实时识别,非人工操作,工作效率高。这种方法是基于计算机视觉和图像处理技术,作 为一个软件系统,更方便维护和升级,通用性更强。存在着这几方面的优势,基于图像处理 的识别技术具有很大的发展空间。基于图像处理的纸牌识别主要包括纸牌图像预处理(倾斜校正与定位)、特征提取、特征匹配、纸牌识别等方面的技术。系统构成如上图所示,当系统发现监视图像发生变化时, 触发图像采集,通过 CCD摄像头摄取的纸牌图像,然后识别系统对纸牌图像进行一系列处 理从而识别出
3、纸牌,输出识别结果。纸牌图像预处理传感器触发CCD摄像头进行图像采集后可以得到一张图像,图像中包括背景和待识的目标纸牌,但目标纸牌在图像中并不一定是正放的,许多的时候纸牌与图像的边缘形成一定的倾斜角度,如下图所示:因此,纸牌识别之前,必须先对目标纸牌进行倾斜校正和定位。对于整个纸牌识别系统来说,纸牌识别精确度的高低很大程度下取决于纸牌的倾斜校正 与定位精确度高低, 这是十分重要的一步。 纸牌形状为一矩形, 纸牌是否倾斜可以以纸牌的 物理边缘是否与图像边缘倾斜为准则,若纸牌的物理边缘与图像边缘呈0或90度(平放或正放),则纸牌没有发生倾斜,反之,则存在倾斜。根据以上分析的特点,可以利用Hough
4、变换和边缘检测结合的方法实现纸牌的倾斜校正与定位。Hough变换是利用极坐标变换的方法, 在图像中进行像素的累加, 从而估算出最长直线 与图像边缘所成倾斜的角度。如下左图所示, 首先在原图像中引入p、 B和L三个参数,通 过P和B参数的变化可以累加出对应 L的值(直线长度):n.图像中直践的表示方袪利用Hough变换,可以很容易地得出在图像中最长直线的长度和该直线与图像边缘对应 所成的角度。对于大多数的纸牌来说, 我们可以直接把检测出来最大的L所对应的倾斜角B视为纸牌的倾斜,这是因为,纸牌本身拥有的一条较长边缘,而任何角度上的直线像素累加都不能与之相比。但对于一些内部图案很复杂的纸牌,如J、Q
5、 K和JOKER由于图案边缘复杂性的原因,Hough变换后就会产生一些非纸牌物理边缘而长度超过物理边缘的线条,此时,该线条对应 的倾斜角B就不是纸牌与图像所成的真实倾斜角度。这些复杂线条信息的存在,会对纸牌物理边缘的确认产生十分大的影响,因此,在Hough变换之前,必须采取一些操作, 最大程度地去除这些复杂的边缘信息的同时,保留纸牌的物理边缘信息。可以在经过边缘检测的前提下,通过形态学闭操作把纸牌内部的复杂线条模糊化,然后再对模糊化后的图像进行边缘检测,具体效果如下图:扑克牌内部存 在边缘信息。b第一次边塚检测采用圆形结构的形 态学闭操作模糊了 内部的边缘信息。第二次的边缘检 测只保留了纸牌
6、的物理边缘。形态学闭操作乩第二次边缘检测经过以上的步骤后,再对图像进行Hough变换,就可以准确地确认出纸牌的物理边缘,然后对纸牌进行倾斜校正与定位,Matlab程序实现如下:function poker=rectify(rgbimage)呀卜克目标校正且定位函数grey=rgb2gray(rgbimage);%灰度化图像ed 仁 edge(grey,sobel,both);%灰度化图象边缘化bw仁imclose(ed1,strel(disk,20);%形态学闭操作圆形结构体9以上形态学操作为了模糊纸牌内部的线条结构%从而减小J,Q,K,JOKER纸牌等内部复杂边缘对定位的影响ed2=edge
7、(bw1,sobel,both);%对纸牌的物理边缘进行检测bw2=bwmorph(ed2,dilate);%结构性膨胀加强边缘效果hough=radon(bw2,-90:90);%-90 到 90 度的 hough 变换%倾斜角值%最长直线长度m,n=size(hough); rotate=0;sli ne=0;for i=1:mfor j=1: nif hough(i,j)sli ne;rotate=j-1;sli ne=hough(i,j);endendend%预校正%预测校正后的目标位置%倾斜校正%定位ed3=bwmorph(ed2,clea n,10); bw3=imrotate(e
8、d3,-rotate);m, n=fin d(bw3); rgb=imrotate(rgbimage,-rotate,bili near); poker=rgb(mi n( m):max(m),mi n(n ):max( n),:);m, n=size(poker);if nmpoker=imrotate(poker,90,bili near);end纸牌特征提取纸牌具有很多的特征,如字符特征,花形特征,图案特征,颜色特征等,不同的纸牌具 有不同的特征。根据特征的组合,可以产生出54纸不同的纸牌。纸牌识别的第一步,必须在待识别的纸牌中提取它所具备的特征。由于纸牌内部的图案较复杂, 对其操作运算
9、量较大, 不以其作为识别的特征。 而字符和 花形特征结构较为简单, 易于操作,所以应该在纸牌中提取字符与花形的特征, 并以这两个 特征识别出纸牌。在纸牌倾斜校正与定位后, 根据纸牌的固有属性, 可以大概地定位出纸牌上字符与花形 的位置,然后把字符与花形粗略提取出来。斗nn 对=_%提取出字符与花形的大概位置后,必须对提取出的图像进行二值化,进一步提取特征。 二值化是指整幅图像像素仅有黑、白二值的图像。由于“非黑即白”的特性,二值图像在数字图像处理中占有非常重要的地位。二值化的关键是要找到合适的阈值来区分对象和背景。阈值选取有许多的方法,常用的阈值选取方法有: 直方图双峰法、自适应局部阈值法、最
10、佳阈值法等。Ostu算法是最佳阈值算法的一种。Ostu算法是利用最大类间方差法,判决分析最小二乘法的原理基础上推导得出的。它的计算步骤是先计算图像的灰度直方图概率函数,然后以阈值为基准将灰度级划分为两类,Ostu算法求二值化最佳阈值的Matlab程序实现如下:function level=ostu(IMAGE)%最大类间方差ostu算法,求最佳阈值m, n,s=size(IMAGE);if s=1image=IMAGE;endif s=3image=RGB2gray(IMAGE);endran ks=256;coun ts=imhist(image,ra nks);p=co un ts/sum
11、(co un ts);omega=cumsum(p); mu=cumsum(p.*(O:ra nks-1);mu_t = mu(e nd); sigma2=0;T=0;h=0;Hmax=0;w0=0;w 仁0;u0=0;u1=0;HStore=zeros(1,256);for i=1:ra nksif (omega(i)=0)|(1-omega(i)=0)con ti nue;en d;w0=omega(i);w1=1-w0; u0=mu(i)/w0;u1=(mu_t-mu(i)/w1;sigma2=w0*(u0-mu_t).A2+w1*(u1-mu_t).A2; h=sigma2;HStor
12、e(i)=h;endHmax = max(HStore);isfi nite_maxval = isfi nite(Hmax);if isfi nite_maxvalidx = mean(fin d(HStore = Hmax);level = (idx - 1) / (ra nks - 1);elselevel = 0.0;end%otsu类间方差%原始阈值图像二值化前 后效果对比。在字符和花形粗略定位并且二值化之后,有时会残留一些很长边缘信息。这些边缘信息多数来自于纸牌本身的图案边缘或背景残留。由于这些线条多数与字符和花形的颜色相近, 因此在图像二值化之后仍然会保留下来。这些多余的边缘信息
13、给特征的正确提取带来了很大的影响,所以在字符分割之前去除这些干扰是必要的。这些边缘信息都具有连续不跳变的特性,因此可以利用这个特性对二值化图像进行扫描,当出现超过一定长度不跳变的线条,把它视为干扰信息,并且把它去除。粗略定位并二 值化后,出现 了干扰线条。清除干扰线条的Matlab实现程序如下: function str=reduce(bwstr);%去除干扰边缘信息m, n=size(bwstr);temp=on es( m,n);num=1;for j=1: ncoun t=0;for i=1:mif bwstr(i,j)=0;coun t=0;c ontinue;elsecoun t=c
14、o un t+1;if coun t=m/3;break;endendendif coun t=m/3line(num)=j;num=nu m+1;endendfor i=1: nu m-1for j=1:mtemp(j,li ne(i)=0;endend str=logical(double(bwstr).*temp);从左至右进行扫描,当 列方向上出现超过 1/3 边长长度不跳变的线 条,把它视为干扰线 条,并把它去除。%线条不连续%连续不跳变点数增加%连续不跳变长度超过1/3边长%己录扫描到线条位置% 青除干扰边缘清除干扰线条前 后效果比较。清除干扰 线条后分 割出字符 与花形。这个算法
15、对断裂较多的线条没有作用, 扰,为纸牌识别的准确度提供一个保障。但能够在一定程度下消除了线条对目标信息的干纸牌识别在识别技术中,被广泛采用的有两类特征:结构特征和统计特征。 常用的结构特征主要有:笔道密度函数、空洞和缺口、字符的特殊节点数。而常用的统计特征主要有复杂指数、 粗网格特征、垂直和水平投影。纸牌中有字符和花形两种字符,字符包括A 2、3、4、5、6、7、8、9、10、J、QK、JOKER十四种;而花形包括:黑桃、红桃、梅花和方片四种。不论采用结构特征还是统计特 征的匹配方法方法,均需要与一个系统预知道的标准符号模板库进行匹配。结构特征匹配的识别准确率较高, 但是运算量十分大,用于符号
16、结构较复杂的识别; 统 计特征匹配识别准确率相对较低,但运算量少,适用于结构简单的符号识别。纸牌只有14个字符和4个花形符号,而且结构较简单,这里选用统计特征匹配。对于不同的符号,其投影均不相同。因此,可以利用待识别符号投影与模板中各符号的投影求均方差,选择均方差最小(即与待识别符号投影偏离最小)所对应的模板符号作为识别结果。在符号中,JOKER言息像素所占数目较多,可以先对其确认。在匹配前先对符号进行一定的结构性膨胀,由于JOKERS有多个字符,在膨胀后非零像素增加的数量定会大大的大于 其它纸牌。这里设置一个临界值,当某待识别纸牌特征像素数量大于此临界值时把这张纸牌 识别为JOKER小于临界
17、值再与其他模板进行匹配,这样就可以不需要额外加入 JOKER莫板,同时也一定程度下提高了系统的识别效率。Matlab - GUI 程序实现新建一个空的GUI任务:设置菜单栏:添加菜单选项菜单栏选择项映射 Callback函数:exit_Callback()new_Callback()E工具c曰倾斜枚正与走馈茹二! 團像取度他& 二 像二值业偎砖纸牌字苻据一rrecitify_Callback()bin ary_Callback()gray_Callback()recog niti on _Callback()崗关于getsymstr_Callback()about_Callback()扑克识别
18、谨R)Menu Bar Context Menus打开图像);%没有打开图像%成功打开图像%其他图像复位扑克纸牌图像);各菜单选择项映射函数具体定义: 打开(O)打开一幅图像,并且显示到窗口上。function n ew_Callback(hObject, even tdata, han dies) global IMAGE;global POKER;global GRAY;global BW;global BWSTR;n ame=0;n ame,path=uigetfile(*.bmp;*.jpg;*,tif, if n ame=0;return;endIMAGE=imread(strcat
19、(path, name);POKER=0;GRAY=0;BW=0;BWSTR=0;subplot(1,1,1),imshow(IMAGE),title(pjpokerer喧退出(E)文件(巳工具扑克紙牌图像查找范圉扑弼氐牌识别二扑克符号頑板3 團片 OOOLbmp3 圉片 0Cl.bmpQ 图片 0O2.Lrrp2S 图片 0C3.bmp3 图片 004.bmpi 图片 005.bmp 圈片 006,brrv 007 .bmp ILOOB.bmp 009.bmp3图片 OlO.brrp=图片 Olhbmp3 圈片 012.bmp3 圉片 oi.bp*S 閔片 CiH.bmpI耳上一圾打开文件名
20、密: 丈件类型电):fTbmp倾斜矫正与定位(Y)对纸牌图像进行倾斜校正和纸牌定位,计算定位耗时并显示。 function rectify_Callback(hObject, even tdata, han dles)global IMAGE;global POKER;if IMAGE=0;%未打开图像msgbox(请先打开一幅扑克图像,错误,error);elsetic;POKER=rectify(IMAGE);if toc5% 十算校正与定位用时%自定义函数rectify()%设置超时时间为3秒msgbox( return;end图像校正定位超时,错误,error);time=nu m2s
21、tr(toc);str=strcat(校正与定位耗时,time, 秒);subplot(1,1,1),imshow(POKER),title(扑克纸牌);msgbox(str,消息);end图像二值化(B)对纸牌图像进行二值化,阈值用最佳阈值ostu算法计算得出。function bin ary_Callback(hObject, even tdata, han dles)%全局变量global IMAGE;global POKER;global GRAY;global BW;if IMAGE=0msgbox(请先打开一幅扑克图像elseif POKER=0msgbox(请先对图像进行校正定位
22、elseif GRAY=0msgbox(请先对图像进行灰度化%未打开图像错误,error);%未进行图像校正错误,error);%未进行图像灰度化错误,error);elsebw=im2bw(GRAY,ostu(GRAY);BW=logical(abs(double(bw)-1); subplot(1,1,1),imshow(BW),title( end%自定义函数ostu()图像二值化);纸牌字符提取(P)提取纸牌的特征字符。function getsymstr_Callback(hObject, even tdata, han dles) global IMAGE;global POKER
23、;global GRAY;global BW;global BWSTR;if IMAGE=0msgbox(请先打开一幅扑克图像elseif POKER=0msgbox(请先对图像进行校正定位elseif GRAY=0msgbox(请先对图像进行灰度化elseif BW=0msgbox(请先对图像进行二值化elsem, n=size(GRAY); pokerstr=GRAY(2:m/2, n/20: n/5.5); bw=im2bw(pokerstr,ostu(pokerstr);bw1=bwmorph(bw,clea n);%未打开图像错误,error);%未进行图像校正错误,error);%
24、未进行图像灰度化错误,error);%未进行图像二值化错误,error);%字符粗略定位%自定义函数ostu()%清除孤立点bw2=logical(abs(double(bw)-1);%二值图像反色bw3=reduce(bw2);%自定义函数 reduce()m,n=size(bw3);temp=sum(bw3);shadow(2:n +1)=temp;shadow(1)=0;shadow (n+2)=0;for i=2: n+1if shadow(i)=0&shadow(i-1)=0 &shadow(i+1)=0%出现孤立线条for j=1:m%删除孤立线条列bw3(j,i-1)=0;end
25、endendm, n=fin d(bw3);BWSTR=bw3(mi n(m):max(m),mi n(n ):max( n);subplot(1,1,1),imshow(BWSTR),title( end纸牌特征字符);扑克识别(R)对字符特征进行匹配识别,并且输出识别结果。 function recog niti on _Callback(hObject, even tdata, han dles) global IMAGE;global POKER;global GRAY;global BW;global BWSTR%氏牌字符模板,34*22投影str仁6 6 6 6 8 8 10 10
26、 10 10 8 8 8 8 10 10 8,8 8 8 12 12 16 16 12 12 8 8 8 8 16 16 16 16;%Astr2=10 10 16 16 12 12 12 12 12 12 6 6 4 4 8 8,.8 8 6 6 6 6 6 6 6 6 8 8 10 10 22 22 22 22;%2str3=22 22 14 14 10 10 8 8 8 8 8 12 12 14 14 6,.6 4 4 4 4 4 4 4 4 8 8 8 12 12 18 18 12 12;%3str4=2 2 4 4 6 6 8 8 10 10 12 12 10 10 10 10 8
27、8,.10 10 12 12 20 20 22 22 6 6 6 6 6 6 8 8;%4str5=18 18 16 16 4 4 4 4 4 16 16 16 16 6 6 4 4 4 4,.4 4 4 4 4 4 10 12 12 16 16 12 12 2 2;%5str6=9 9 15 15 7 7 5 5 3 3 5 5 14 14 18 18 12 12 9,.9 9 9 11 11 11 11 7 7 10 10 14 14 11 11;%6str7=15 15 22 22 14 14 9 9 5 5 5 5 5 5 4 4 4 4 6 6,.4 4 4 4 6 6 4 4 4
28、4 4 4 4 4;%7str8=10 10 16 16 10 10 6 6 8 8 6 6 12 12 14 14 14 14,.10 10 8 8 8 8 8 8 8 8 14 14 18 18 10 10;%8str9=14 14 16 16 8 8 8 8 12 12 12 10 10 12 12 12 12,.18 18 16 16 4 4 4 4 6 6 6 12 12 14 14 8 8;%9str10=10 10 16 16 14 14 12 12 12 12 12 12 12 12 12 12,.12 12 12 12 12 12 12 12 12 12 12 12 16 1
29、6 16 16 10 10;%10str11=13 13 11 11 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5,.5 5 5 9 9 9 9 14 14 13 13 4 4;%Jstr12=11 11 10 10 10 10 6 6 6 6 6 6 6 6 6 6 6 10 10,.14 14 16 16 12 12 10 10 10 10 10 18 18 12 12;%Qstr13=20 20 20 20 12 12 10 10 10 10 10 10 8 8 12 12,.12 12 12 12 10 10 10 10 10 10 8 8 10 10 18 18
30、 20 20;%KSTR=str1;str2;str3;str4;str5;str6;str7;str8;str9;str10;str11;str12;str13;%纸牌花形模板 ,24*20 投影 style1=4 4 6 6 8 8 12 12 16 16 16 16,.%黑桃%红桃%梅花%方片20 20 20 20 20 20 14 14 6 6 6 6; style2=12 12 20 20 20 20 20 20 18 18 16 16,.14 14 12 12 8 8 6 6 4 4 2 2; style3=4 4 8 8 10 10 10 10 8 8 16 16,.20 20
31、20 20 20 20 12 12 4 4 4 4;style4=2 2 4 4 6 6 12 12 16 16 20 20 20 20,.16 16 12 12 6 6 6 6 2 2;STYLE=style1;style2;style3;style4;if IMAGE=0msgbox( 请先打开一幅扑克图像elseif POKER=0msgbox( 请先对图像进行校正定位elseif GRAY=0msgbox( 请先对图像进行灰度化%未打开图像错误 ,error);%未进行图像校正 错误 ,error);%未进行图像灰度化错误 ,error);elseif BW=0%未进行图像二值化msg
32、box( 请先对图像进行二值化 , 错误 ,error);elseif BWSTR=0msgbox( 请先提取图像字符 , 错误 ,error); elsesym=imclose(BWSTR,strel(disk,3); shadow=sum(sym);if max(shadow)=40result=strcat(识别结果 :,JOKER);msgbox(result,消息 ,warn);else sym=bwmorph(BWSTR,clean); shadow=(sum(sym,2); len=length(shadow); for i=2:len-1if shadow(i)=0&shado
33、w(i+1)=0 bonder1=i+1; i=bonder1; continue;endif shadow(i)1 bonder2=i; break;endend bonder=(bonder1+bonder2)/2; SYM1=sym(1:bonder,:);m,n=find(SYM1); SYM1=SYM1(min(m):max(m),min(n):max(n); SYM1=imresize(SYM1,34 22);SYM2=sym(bonder:len,:); m,n=find(SYM2);SYM2=SYM2(min(m):max(m),min(n):max(n); SYM2=imre
34、size(SYM2,24,20);%未提取特征%粗略估算特征面积大小%像素过多识别为为 JOKER%清除孤立点%侧面投影%搜索数字符号与花形符号的分界点%检测到靠近数字一边的边界%检测到靠近花形一边的边界%取两个边界的中间作为符号分界线%数字符号%模板归一化%花形符号%模板归一化shadow1=(sum(SYM1,2);shadow2=(sum(SYM2,2);%字符匹配 errormean=50;sn1=0; for i=1:13temp=STR(i,:); error=abs(shadow1-temp); error=mean(error,2);%搜索最佳匹配的模板%求绝对均差if err
35、or=3;sn1=0;end% 花形匹配errormean=50;sn2=0;for i=1:4temp=STYLE(i,:);error=abs(shadow2-temp);error=mean(error,2);if error=3;sn2=0;end% 特征映射switch sn1case 0result1= 不能识别出字符case 1result1=A;case 10result1=10;case 11 result1=J;case 12 result1=Q;case 13result1=K;otherwiseresult1=num2str(sn1);endswitch sn2case
36、 1result2=黑桃 ;case 2result2=红桃 ;%误差过大%搜索最佳匹配的模板%求绝对均差%误差过大%对应数字转成字符型case 3result2= case 4 result2= otherwise result2= end result=strcat( msgbox(result, end梅花;方片;不能识别出花形;识别结果:,result2,result1); 消息,warn);end心得体会程序能够较准确地实现纸牌识别功能, 但此识别系统对图像中纸牌的要求较为严格, 摄 像时不能出现纸牌扭曲, 或者摄像头与纸牌存在较大的倾斜角。 在研究过程中,感觉到还有 许多可以进一步提高对纸牌识别的能力的方法值得继续研究。对于此纸牌识别系统来说,最需要改进的地方我觉得有如下几个方面:(1)符号的定位方面。只根据符号在纸牌上的大概位置从而对符号的位置进行大致的确 定显得有些武断,若纸牌在摄像时出现一定程度的扭曲,又或者摄像并非正对纸牌 的时候,这种粗略定位的方法就成为整个系统的致命伤,因此有必要改进符号的定 位,又或者
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 诺奖巨磁电阻效应与SXQ理论
- 玫瑰人生温暖世心 中英互译
- 河北省徐水县2025年上半年公开招聘城市协管员试题含答案分析
- 河北省滦平县2025年上半年公开招聘村务工作者试题含答案分析
- 河北省宽城满族自治县2025年上半年事业单位公开遴选试题含答案分析
- 2025版旅游设施融资租赁担保合同范本解析
- 2025年度机关单位炊事员职业培训合同
- 2025版金融资产管理公司并购保密协议模板下载
- 2025年度高端定制化钢结构安装服务合同范本
- 2025年度塑钢窗安装与建筑节能评估服务合同
- (2024年)知识产权全套课件(完整)
- 体育室内课-足球课件
- 阀门试压方案样本
- 专家委员会组建方案
- 急诊科急诊超声检查在腹部外伤中的应用培训
- 速效救心丸培训课件
- 2022年上海市浦东新区6月线下高考二模英语试题(含答案和听力音频与听力稿)
- 妇产科学课件:妊娠合并病毒性肝炎
- 人脸识别系统软件使用手册
- 路基分层-表格-
- 干部年休假审批表
评论
0/150
提交评论