




免费预览已结束,剩余39页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 图像分割及测量本章要点: 图像阈值分割 目标物体的轮廓提取 模板匹配 图像的测量71概述数字图像处理的目的之一是图像识别,图像分割与测量是图像识别工作的基础。图像分割将图像分为一些有意义的区域,然后可以对这些区域进行描述,相当于提取出某些目标区域图像的特征,判断图像中是否有感兴趣的目标。图像分割的基础是像素间的相似性和跳变性。所谓“相似性”是指在某个区域内像素具有某种相似的特性,如灰度一样,纹理相同;所谓“跳变性”是指特性不连续,如灰度值突变等。从总体上说,图像分割就是把图像分成若干有意义的区域的处理技术。这些区域互不交迭,每一个区域内部的某种特性或特征相同或接近,而不同区域间的图像特征则有明显差别,即同一区域内部特性变化平缓,相对一致,而区域边界处则特性变化比较剧烈。区域内是一个所有像素都有相邻或相接触像素的集合,是像素的连通集。在一个连通集中任意两个像素之间,都存在一条完全由这个集合的元素构成的连通路径。连通路径是一条可在相邻像素间移动的路径。所以,在一个连通集中,你可以跟踪在任意两个像素间的连通路径而不离开这个集合。图像分割的度量准则不是唯一的,它与应用场景图像及应用目的有关,用于图像分割的场景图像特征信息有亮度、色彩、纹理、结构、温度、频谱、运动、形状、位置、梯度和模型等。由于图像的多义性和复杂性,许多分割的工作无法依靠计算机自动完成,而手工分割又存在工作量大,定位不准确的难题,因此,人们提出了一些人工交互和计算机自动定位相结合的方法,利用各自的优势,实现目标轮廓的快速定位。图像分割的方法有多种,依据工作对像来分,可分为点相关分割和区域相关分割;按算法分类,可分为阀值法,界限检测法,匹配法,跟踪法等。近年来出现了一些新的算法和设想。如先使用经典的边缘检测算子对图像做初步的边缘检测,然后再利用边缘之间空间结构关系来协调,增强初始检测结果。经典的边缘检测方法是构造对像素灰度级阶跃变化敏感的微分算子,一些能有效抑制噪声的边缘提取算法通过首先对原图像进行平滑,再进行边缘检测能较成功的检测出真正的边缘。在第六章介绍了各种边缘检测的方法,边缘检测器的输出一般都为灰度图像,称边缘图像,该图像包含有边缘幅值信息。如果边缘检测器输出值较大,则对应于局部边缘;如果输出值较小,则对应于无边缘的区域。在边缘检测之后,找出目标物体的轮廓,进行目标物体的分析、识别、测量等。这些内容在数字图像处理应用中,如跟踪、制导等方面扮演重要角色,有着广泛的用途。本章介绍了图像分割的基本方法、轮廓提取的方法、目标区的标识、面积测量和周长测量。72 图像阈值分割阈值处理是一种区域分割技术,将灰度根据主观愿望分成两个或多个等间隔或不等间隔灰度区间,它主要是利用图像中要提取的目标物体和背景在灰度上的差异,选择一个合适的阈值,通过判断图像中的每一个像素点的特征属性是否满足阈值的要求来确定图像中该像素点属于目标区还是应该属于背景区域,从而产生二值图像,它对物体与背景有较强对比景物的分割特别有用。它计算简单,而且总能用封闭而且连通的边界定义不交叠的区域。在使用阈值法进行分割技术时,阈值的选取成为能否正确分割的关键,若将所有灰度值大于或等于某阈值的像素都被判属于物体,则将所有灰度值小于该阈值的像素被排除在物体之外,如果阈值选取的过高,则过多的目标区域将被划分为背景,相反如果阈值选取的过低,则过多的背景将被划分到目标区。因此,边界就由这样一些内部点的集合组成,这些点都至少有一个邻点不属于该物体。由于物体和背景以及不同物体之间的灰度级有明显的差别,因此,在图像的灰度级直方图中会呈现明显的峰值。当图像灰度直方图峰型分布明显时,常以谷底作为门限候选值。所以只要适当地选择阈值,即可对图像进行分割,因而成为一种简单而广泛应用的方法。本节介绍选择合适的阈值方法有:直方图门限选择半阈值选择图像分割迭代阈值图像分割7.2.1直方图门限选择1理论基础阈值T可通过分析边缘检测输出的直方图来确定。假设,一幅图像只有物体和背景两部分组成,其灰度级直方图成明显的双峰值,如图7-1。在此情况下,选取双峰间的谷底处的灰度值T作为阈值,即可将物体和背景很好地分割开。阈值分割法可用数学表达式来描述。设图像为f(i,j),其灰度级范围为z1,z2,设T为阈值,是z1和z2内任一值,可得一幅二值图像,其数学表达式为 f(i,j) 0 T 255 图7-1 双峰灰度级直方图 255 如果f(i,j)T (7-1)f(i,j)=0 如果f(i,j)T或者,也可以 0 如果f(i,j)T (7-2)f(i,j)=255如果f(i,j)GetWidth ();height=this-GetHeight ();int width= (wide*24) + 31) / 32 * 4) ;BYTE* p_temp1=new BYTEwide*height+1024; /新图像缓冲区/拷贝原图像到缓存图像memcpy(p_temp1,m_pData,wide*height );/ 对各像素进行灰度统计for (i = 0; i height; i +)for (j = 0; j wide; j +)unsigned char temp = p_temp1wide* i + j ;/ 灰度统计计数huidutemp+;/ 计算灰度分布密度for(i=0;i256;i+)tongjii = huidui / (height * wide *1.0f);/* *函数名称:Yuzhifenge(int Yuzhi) *函数类型:void*参数说明:Yuzhi -阈值选取 *功能:对图像进行阈值分割。 */void BingXingBianJieDib:Yuzhifenge(int Yuzhi)/ 指向源图像的指针LPBYTE p_data;LPBYTElpSrc;/ 指向缓存图像的指针LPBYTElpDst;/ 指向缓存DIB图像的指针LPBYTEtemp;/循环变量long i;long j;/图像的高和宽p_data=GetData();long wide=GetWidth();long height=GetHeight();temp=new BYTEwide*height;memset(temp,255,wide*height);for (j=0;jheight;j+)for(i=0;iwide;i+) lpSrc=p_data+wide*j+i;lpDst=temp+wide*j+i;if(abs(*lpSrc-Yuzhi)30)*lpDst=Yuzhi;memcpy(p_data,temp,wide*height);delete temp;4 效果对比图 (a)根据直方图选择阈值 (b)原图 (c)二值化效果图 图7-3直方图门限选择图像分割7.2.2 半阈值选择分割1理论基础上述方法,不论图像的直方图具有双峰还是多峰值,经过阈值化后均将原始灰度级多值图像变成二值图像,假如希望阈值后的图像只把图像的背景表示成二值图像(即背景不是最白(用1表示)就是最黑(用0表示)而图像中的物体仍为多值图像。此时,可采用半阈值技术,把物体从背景中分离出来。半阈值化后的图像可用数学表达式表示为: f(i,j) 如果f(i,j)T (7-6)f(i,j)=0或者255 如果f(i,j)T或者 f(i,j) 如果f(i,j)T (7-7)f(i,j)=0或者255 其它2实现步骤(1)获得原图像的首地址,及图像的宽和高。(2)开辟一块内存空间,并初始化为255。(3)进行图像灰度统计,显示灰度直方图。请看Zhifangtu(float *tongji)函数。(4)选取一个峰谷作为阈值。(5)像素灰度值与阈值之差小于30,将像素置为0,否则保持灰度值不变。(6)将结果复制到原图像数据区。3.编程代码/* *函数名称:BanYuZhi(int Yuzhi) *函数类型:void*参数说明:Yuzhi -根据直方图选取阈值 *功能:对图像进行半阈值分割。 */void BingXingBianJieDib:BanYuZhi(int Yuzhi)/ 指向源图像的指针LPBYTE p_data;LPBYTElpSrc;/ 指向缓存图像的指针LPBYTElpDst;/ 指向缓存DIB图像的指针LPBYTEtemp;/循环变量long i;long j;/图像的高和宽p_data=GetData();long wide=GetWidth();long height=GetHeight();temp=new BYTEwide*height;memset(temp,255,wide*height);for (j=0;jheight;j+)for(i=0;iwide;i+) lpSrc=p_data+wide*j+i;lpDst=temp+wide*j+i;if(*lpSrc-Yuzhi)GetWidth();/ DIB的高度LONG height = this-GetHeight();/ 迭代阀值int T1, T2;T1 = 127;T2 = 0;/ 临时变量int Temp0, Temp1, Temp2, Temp3;Temp0 = Temp1 = Temp2 = Temp3 = 0;while (true)/ 计算下一个迭代阀值for (i = 0; i T1 + 1; i+)Temp0 += tongjii * i;Temp1 += tongjii;for (i = T1 + 1; i 256; i+)Temp2 += tongjii * i;Temp3 += tongjii;T2 = (Temp0 / Temp1 + Temp2 / Temp3) / 2;/ 看迭代结果是否已收敛if (T1 = T2)break;elseT1 = T2;/ 对各像素进行灰度转换for (j = 0; j height; j +)for (i = 0; i wide; i +)/ 读取像素unsigned char temp = *(unsigned char *)p_data + wide * j + i);/ 判断像素灰度值是否超出范围if (temp GetData();p_data=lpSrc; wide=this-GetWidth (); height=this-GetHeight ();for(j=0;jheight;j+) /对图像进行二值化预处理for( i=0;i128) *p_data=255;else *p_data=0; p_data+; p_data=lpSrc; LPBYTE temp=new BYTEwide*height; /新图像缓冲区/初始化新分配的内存为255memset( temp,255,sizeof( temp);for(j=1;jheight-1 ;j+)for(i=1;iwide-1 ;i+)if(p_dataj*wide+i=0) tempj*wide+i=0; n1= p_data(j+1)*wide+i-1; n2= p_data(j+1)*wide+i; n3= p_data(j+1)*wide+i+1; n4= p_dataj*wide+i-1; n5= p_dataj*wide+i+1; n6= p_data(j-1)*wide+i-1; n7= p_data(j-1)*wide+i; n8= p_data(j-1)*wide+i+1; /如果相邻的八个点都是黑点 if(n1+n2+n3+n4+n5+n6+n7+n8=0) tempj*wide+i=255; memcpy(lpSrc, temp,wide*height); /复制处理后的图像delete temp; 4效果对比图 (a)原图 (b)轮廓提取效果图图7-6轮廓提取7.3.2边界跟踪法1理论基础一般如果图像是非二值化图像,可以先转化为二值化图像。边界跟踪效果的好坏主要取决于两个因素,第一个因素是跟踪的起始点的选取,起始点的选取直接影响到跟踪的精确度,同时如果起始点选的不好,还给算法的设计增加难度。第二个因素是跟踪准则的选取,准则既要便于理解和分析,又要便于程序的设计。边界跟踪的基本方法是:先根据某些严格的“探测准则”找出目标物体轮廓上的像素,再根据这些像素的某些特征用一定的“跟踪准则”找出目标物体上的其他像素。一般的跟踪准则是:边缘跟踪从图像左上角开始逐像点扫描,当遇到边缘点时则开始顺序跟踪,直至跟踪的后续点回到起始点(对于闭合线)或其后续点再没有新的后续点(对于非闭合线)为止。如果为非闭合线,则跟踪一侧后需从起始点开始朝相反的方向跟踪到另一尾点。如果不止一个后续点,则按上述连接准则选择加权平均最大的点为后续点,另一次要的后续点作为新的边缘跟踪起点另行跟踪。一条线跟踪完后,接着扫描下一个未跟踪点,直至图像内的所有边缘都跟踪完毕。这种边界跟踪在处理图像的时候,执行先后是有次序的,每一个像素的处理都是顺序执行的,也就是后面的处理要用到前面的处理结果,前面的处理没有进行完,后面的处理就不能进行。因此该算法的处理速度比轮廓提取算法慢,但同时也是因为这个原因,使得该分割对于边界点的判断更为精确,而且整个边界连续无中断。对于边界跟踪来说,跟踪后产生的轮廓边缘宽度只有一个像素。 (-1,-1) (0,-1) (1,-1) 0 1 2 (-1,0) 3 (1,0) 7 6 5 4 (-1,1) (0,1) (1,1)(a) 中心像素跟踪的8个方向编号及偏移量(b)边界跟踪示意图图7-7 边界跟踪示意图从图7-7(a)中可以看出,中心像素可以跟踪的方向有8个,对每个方向制定了方向编号及偏移量,由于图像文件的读取是从左向右、从下向上的顺序,因此选取图像的最左下方的像素点作为起始点(即顺序读取像素时的第一个黑点)。当找到起始点,把该点记录下来,定义初始的跟踪方向是左上方0方向,判断该点是否为目标点,是则把该目标点为跟踪的起始开始点,逆时针旋转90度作为新的跟踪方向,继续检测该新的跟踪方向上的点;若不是是目标点则沿顺时针旋转45度,一直到找到目标点。找到目标点后,在当前跟踪方向的基础上,逆时针旋转90度作为新的跟踪方向,用同样的方法跟踪下一个边界点,直到回到起始点为止。 图7-7(b)示意的是边界跟踪的过程,图中黑点表示边界点,白点为图像的内部点。跟踪的初始点是最左下方的黑点(即最下一行的最左的黑点),跟踪的初始方向设定为左上方45度。跟踪开始后,初始点沿初始跟踪方向检测是否该方向有黑点(检测距离为一个像素点),因为该方向有边界点,保存初始点,将检测到的点作为新的初始点,在原来检测方向基础上,逆时针旋转90度作为新的跟踪方向, 不是目标点则沿顺时针旋转45度,沿新跟踪方向继续检测,直到找到黑像素目标点,然后将跟踪方向逆时钟旋转90度作为新的跟踪方向。重复上面的方法,不断改变跟踪方向,直到找到新的边界点。找到新边界点后,将旧边界点保存,将新检测到的点作为新的初始点,这样不断重复上述过程,直到检测点回到最开始的检测点为止。2实现步骤(1)获得原图像的首地址,及图像的高和宽。(2)开辟一块内存缓冲区,初始化为255。(3)将图像进行二值化处理。(4)跟踪边界点,找到1个边界点,就将内存缓冲区中该点相应位置置0。(5)按照跟踪准则,重复执行(4),直到回到初始点。(6)将内存缓冲区的内容复制到原图像中。 3. 编程代码/* *函数名称:Lunkuogenzong() *函数类型:void *功能:对图像进行轮廓跟踪。 */ void BingXingBianJieDib:Lunkuogenzong() / 指向源图像的指针LPBYTElpSrc;LPBYTE p_data ;/ 指向缓存图像的指针LPBYTElpDst;/ 指向缓存DIB图像的指针LPBYTEtemp;long wide;long height; /循环变量long i;long j;/像素值 long pixel;/是否找到起始点及回到起始点bool FindStartPoint;/是否扫描到一个边界点bool Findpoint;/起始边界点与当前边界点Point StartPoint,CurrentPoint;/八个方向和起始扫描方向int Goto82= -1,-1,0,-1,1,-1,1,0,1,1,0,1,-1,1,-1,0;int startDirect; p_data=GetData();wide=GetWidth();height=GetHeight();for (j=0;jheight;j+)for(i=0;i127)*lpSrc=255;else*lpSrc=0;/ 暂时分配内存,以保存新图像temp = new BYTEwide*height;/ 初始化新分配的内存,设定初始值为255lpDst = temp;memset(lpDst, (BYTE)255, wide * height);/先找到最左上方的边界点FindStartPoint = false;for (j = 0;j height & !FindStartPoint;j+)for(i = 0;i wide & !FindStartPoint;i+)/ 指向源图像倒数第j行,第i个象素的指针lpSrc = (LPBYTE)(p_data + wide * j + i);/取得当前指针处的像素值,注意要转换为unsigned char型pixel = *lpSrc;if(pixel = 0)FindStartPoint = true;StartPoint.Height = j;StartPoint.Width = i;/ 指向目标图像倒数第j行,第i个象素的指针lpDst = (LPBYTE)(temp + wide * j + i);*lpDst = 0;/由于起始点是在左下方,故起始扫描沿左上方向startDirect = 0;/跟踪边界FindStartPoint = false;/从初始点开始扫描CurrentPoint.Height = StartPoint.Height;CurrentPoint.Width = StartPoint.Width;while(!FindStartPoint)Findpoint = false;while(!Findpoint)/沿扫描方向查看一个像素lpSrc = (LPBYTE)(p_data + wide * ( CurrentPoint.Height + GotostartDirect1) + (CurrentPoint.Width + GotostartDirect0);pixel = *lpSrc;if(pixel = 0)Findpoint = true; CurrentPoint.Height = CurrentPoint.Height + GotostartDirect1; CurrentPoint.Width = CurrentPoint.Width + GotostartDirect0;if(CurrentPoint.Height=StartPoint.Height&CurrentPoint.Width=StartPoint.Width)FindStartPoint = true; lpDst = (LPBYTE)(temp + wide * CurrentPoint.Height + CurrentPoint.Width);*lpDst = 0;/扫描的方向逆时针旋转两格startDirect-;if(startDirect = -1)startDirect = 7;startDirect-;if(startDirect = -1)startDirect = 7;else/扫描方向顺时针旋转一格startDirect+;if(startDirect = 8)startDirect = 0;memcpy(p_data, temp, wide * height); delete temp; 4. 效果对比图 (a)原图 (b ) 外边界跟踪效果图图7-8外边界跟踪7.3.3 区域增长法1理论基础区域增长法是一种已受到人工智能领域中的计算机视觉界十分关注的图像分割方法。它是以区域为处理对像的,它考虑到区域内部和区域之间的同异性,尽量保持区域中像素的临近性和一致性的统一。这样就可以更好地分辨图像真正的边界。基于区域的分割方法的关键在于定义一个一致性准则,用来判断两个临接的区域是否可以合并,一致则将两区域合并,直到不能合并为止。区域增长的方法是在图像上选定一个种子点,记录下该点的灰度值,作为一致性判断的标准阈值,此外还需要定义一个标准差。算法的主要过程是,依次用图像的每一个像素的灰度值和标准阈值相减,判断结果是否小于标准差,是则将该点和种子点合并,不是则保持像素点的灰度值不变。这样处理后的图像就是用区域分割法处理后的边缘分割图像。下面我们通过一个图例来详细解释一下。 (a) (b) (c) 图7-9 区域增长法示意图图7-9的三幅图示意的是区域增长的过程,图中的方格表示图像的像素点,方格中的数值表示像素点的灰度值,(a)中表示开始选取的生长点,在生长过程中,每个生长点都将本身上、下、左、右四个像素点和初始选取的生长点比较灰度值,如果灰度值的差的绝对值在设定阈值内,则认为这些点是属于相同区域将其合并,否则将灰度差大于设定阈值的点删除,重复检查区域内的像素点,直到没有像素点可以合并为止。图7-9设定的阈值是2,(b)中四个点和初始点的灰度差都不大于2,所以合并,(c)中只有部分满足条件,所以只合并满足条件的像素点,并且(c)区域周围邻域中没有点再满足条件,因此生长结束。2. 实现步骤(1)获取原图像的像素的首地址,以及图像的高和宽。(2)依次用图像的每一个像素的灰度值减去标准阈值,判断结果的绝对值是否小于标准差,标准差为10。如果小于则将标准阈值赋给该像素点,否则灰度值保持不变。(3)调用刷新函数显示效果图。3. 编程代码/* *函数名称:Qiyuzengzhang(CPoint point) *函数类型:void*参数说明:point -获得生长点 *功能:对图像进行区域生长。 */void BingXingBianJieDib:Qiyuzengzhang(CPoint point)/ 循环变量LONG i;LONG j;/ 指向DIB像素指针LPBYTE p_data;/ 找到DIB图像像素起始位置 p_data=GetData();/ DIB的宽度LONG wide = GetWidth();/ DIB的高度LONG height =GetHeight();/ 计算种子点一的灰度值unsigned char zhongzi=*(p_data+point.y*wide+point.x);/ 对各像素进行灰度转换for (j = 0; j height; j +)for (i = 0; i wide; i +)/获取各颜色分量unsigned char temp = *(unsigned char *)p_data + wide * j +i);if (abs(temp - zhongzi) 10) /当前点同种子一灰度值比较接近/将种子一的颜色赋给当前像素*(unsigned char *)p_data + wide * j + i ) = temp;else *(unsigned char *)p_data + wide * j + i ) =255;4.效果对比图 (a)选择生长点 (b)按右键点击黑处效果图图7-10区域增长法7.3.4 区域分裂合并法区域分裂合并方法利用了图像数据的金字塔或四叉树数据结构的层次概念,将图像划分成一组任意不相交的初始区域,即可以从图像的这种金字塔或四叉树数据结构的任一中间层开始,根据给定的均匀性检测准则进行分裂和合并这些区域,逐步改善区域划分的性能,直至最后将图像分成数量最少的均匀区域为止。区域分裂合并方法算法步骤是:(1) 确定均匀性测试准则T,将原始图像构造成四叉树数据结构。(2) 将图像四叉树结构中的某一中间层作为初始的区域划分。如果对任何区域R,有T(R)=false,则把区域分裂成4个子区,若任一1/4子区Ri有,T(Ri)=false,则再将该子区一分为四四个区域。如果对任一恰当的四个子区有T(R1R2R3R4)=true,则再把四个子区合并成一个区。重复上述操作,直到不可再分或再合为止。(3) 若有不同大小的两个相邻区域Ri和Rj,满足T(RiRj)=true,则合并这两个区域。下面举一个例子说明一下: (a)对原图进行第一次操作 (b)第二次操作 (c)最终结果 图7-11 区域分裂合并法示意图 为了方便说明,假设图像中的物体和背景各自的灰度是均匀的,因此只有当子区域Ri中所有像素同为物体或背景时,T(R)才为true。对于初始图像来说,显然T(R)=false,因此将其分成四个子区域,此时没有子区域满足 T(R)=true,需要再分,第二次操作后,所有的子区域全部满足T(R)=true,相邻的背景均匀度是相同的,将它们合并成一个区域,同时物体也满足相邻且均匀度相同,因此物体也合并成了一个区域,处理结果如图所示。 区域的分开合并处理能够较好的保持原图像的特性,这点优于区域增长法处理,同时这也是发明这种算法的目的。 7. 4 图像的测量在边缘检测之后,就可以跟踪目标物体的轮廓,进行目标物体的分析、识别、测量等工作。这些内容在数字图像处理应用中,如跟踪、制导等方面扮演着重要角色,有着广泛的用途。对目标物体进行测量,首先必须确定物体是否是独立的目标物体、图像中有几个物体,这就需要对不同物体进行标识。下面介绍几个基本概念:(1)邻域与像素(x,y)对应的点集合(x+p,y+q);(p,q)是一对有意义的整数)称之为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 简单水电安装合同范本
- 厂房雨棚维修合同范本
- 2025年浙江乐清市事业单位(国有企业)招聘(43人)备考练习试题及答案解析
- 2025年甘肃省定西市渭源县麻家集镇选聘村干部备考练习试题及答案解析
- 钢筋材料采购合同范本
- 树苗采购运输合同范本
- 广州装修公司合同范本
- 装修吊顶合同范本
- 2025舟山市艺术剧院招聘事业单位工作人员1人备考练习试题及答案解析
- 2025四川广安市前锋区人民检察院招聘综合性岗位书记员1人备考练习试题及答案解析
- GB/T 33339-2025全钒液流电池系统测试方法
- 护理标识管理制度
- 探讨跨界融合创新在智能数字服装设计中的应用和发展前景
- 面料培训资料
- 失血性贫血的护理
- 相控阵超声波检测技术培训
- 职业培训学校管理制度
- 《党政机关厉行节约反对浪费条例》培训课件
- 工商业光伏施工总承包合同
- 参考儿科急危重症抢救预案及流程
- 中信集团管理制度
评论
0/150
提交评论