第一篇:图像识别技术报告(xiexiebang推荐)
图像识别技术
课程教师:桑爱军老师
报告组成员:
五里雾
一、图像识别简介
图像识别是指图形刺激作用于感觉器官,人们辨认出它是经验过的某一图形的过程,也叫图像再认。在图像识别中,既要有当时进入感官的信息,也要有记忆中存储的信息。只有通过存储的信息与当前的信息进行比较的加工过程,才能实现对图像的再认。
人的图像识别能力是很强的。图像距离的改变或图像在感觉器官上作用位置的改变,都会造成图像在视网膜上的大小和形状的改变。即使在这种情况下,人们仍然可以认出他们过去知觉过的图像。甚至图像识别可以不受感觉通道的限制。例如,人可以用眼看字,当别人在他背上写字时,他也可认出这个字来。
图像识别技术可能是以图像的主要特征为基础的。每个图像都有它的特征,如字母A有个尖,P有个圈、而Y的中心有个锐角等。对图像识别时眼动的研究表明,视线总是集中在图像的主要特征上,也就是集中在图像轮廓曲度最大或轮廓方向突然改变的地方,这些地方的信息量最大。而且眼睛的扫描路线也总是依次从一个特征转到另一个特征上。由此可见,在图像识别过程中,知觉机制必须排除输入的多余信息,抽出关键的信息。同时,在大脑里必定有一个负责整合信息的机制,它能把分阶段获得的信息整理成一个完整的知觉映象。在人类图像识别系统中,对复杂图像的识别往往要通过不同层次的信息加工才能实现。对于熟悉的图形,由于掌握了它的主要特征,就会把它当作一个单元来识别,而不再注意它的细节了。这种由孤立的单元材料组成的整体单位叫做组块,每一个组块是同时被感知的。在文字材料的识别中,人们不仅可以把一个汉字的笔划或偏旁等单元组成一个组块,而且能把经常在一起出现的字或词组成组块单位来加以识别。
图像识别技术是人工智能的一个重要领域。为了编制模拟人类图像识别活动的计算机程序,人们提出了不同的图像识别模型。例如模板匹配模型。这种模型认为,识别某个图像,必须在过去的经验中有这个图像的记忆模式,又叫模板。当前的刺激如果能与大脑中的模板相匹配,这个图像也就被识别了。例如有一个字母A,如果在脑中有个A模板,字母A的大小、方位、形状都与这个A模板完全一致,字母A就被识别了。这个模型简单明了,也容易得到实际应用。但这种模型强调图像必须与脑中的模板完全符合才能加以识别,而事实上人不仅能识别与脑中的模板完全一致的图像,也能识别与模板不完全一致的图像。例如,人们不仅能识别某一个具体的字母A,也能识别印刷体的、手写体的、方向不正、大小不同的各种字母A。同时,人能识别的图像是大量的,如果所识别的每一个图像在脑中都有一个相应的模板,也是不可能的。
为了解决模板匹配模型存在的问题,格式塔心理学家又提出了一个原型匹配模型。这种模型认为,在长时记忆中存储的并不是所要识别的无数个模板,而是图像的某些“相似性”。从图像中抽象出来的“相似性”就可作为原型,拿它来检验所要识别的图像。如果能找到一个相似的原型,这个图像也就被识别了。这种模型从神经上和记忆探寻的过程上来看,都比模板匹配模型更适宜,而且还能说明对一些不规则的,但某些方面与原型相似的图像的识别。但是,这种模型没有说明人是怎样对相似的刺激进行辨别和加工的,它也难以在计算机程序中得到实现。因此又有人提出了一个更复杂的模型,即“泛魔”识别模型。
二、具体应用实例
基于方向梯度极值的手形轮廓跟踪算法
摘要
针对受自然光照影响的手形图像难以准确提取手形轮廓的问题,本文基于手形边界像素在垂直于边界方向上存在灰度突变的特性,提出了一种基于方向梯度极值的手形轮廓跟踪算法。该算法首先找到手形轮廓的起始点,然后按照一定的搜索方向和规则,在局部区域内计算候选点集中梯度极大值所在的点,并逐点跟踪极大值点,得到手形轮廓。将该方法在实验室自采图库及香港科技大学(HKUST)的手形图像库两个数据库中进行轮廓跟踪实验,结果显示,自采图库的跟踪准确率为100%,香港科技大学手形图像库的跟踪准确率为85.8%,该库中符合本文算法限制条件的图像的跟踪准确率为99.4%。实验结果表明,该方法能在灰度图像上直接跟踪出准确、连续、完整的手形轮廓,尤其适合于受光照不均影响的手形图像的边缘提取。
引言
在生物特征识别领域,手形识别以其采集方便、处理速度快、对设备要求不高、易与其它特征组合成多生物特征识别等优点而备受关注和重视,已成为一种极具发展潜力的生物特征识别技术。手形识别是指对手部的外部轮廓所构成的几何图形进行识别,提取的特征为手的不同部位的尺寸或是手指边缘的轮廓点集。因此手形轮廓提取的准确程度对整个手形识别过程至关重要,直接决定了提取特征的准确性。
采用现有的手形提取方法获取完整准确的手形轮廓图形时,对采集设备的遮光和光线要求比较严格,采集的大多是前景和背景灰度差异十分明显的不受光照影响的手形图像,通过阈值二值化和图像滤波来获得较好的分割效果。但这些手形提取方法都局限于各自的图像条件,适用范围局限性大。
在实际应用中往往不便于在采集图像时加入过多的限制条件,一是限制条件过多会使用户觉得不友好,甚至产生抵触情绪;二是这大大减小了手形识别/认证的适用范围,制约其发展。考虑到友好性、实用性和价格等因素,手形识别应尽量选用普通低成本设备,并尽量减少手形采集时的限制条件,但这就使得实际应用环境中采集的图像会不同程度地受到光照环境和采集设备的影响。如偏光导致的高光和阴影以及随着照明光源的位置变化,极易在提取过程中造成手形轮廓的缺失和冗余,而设备噪声也会给手形轮廓的提取造成很大的误差。因此,在这些图像条件下,原有的手形提取方法不再适用,需要寻找与之相适应的新的手形提取方法,以确保提取的特征受外界环境的干扰尽可能小。
针对实际环境中自然光照条件下拍摄的图像易受光照影响,而原有方法难以准确提取轮廓的问题,本文提出了一种基于方向梯度极值的手形轮廓跟踪算法,在灰度图像上直接跟踪手形轮廓。该方法利用手形边界像素在垂直于边界方向上存在灰度突变的特性,从手形轮廓起始点开始,通过计算局部区域内的候选点中梯度极大值所在的点,并逐点跟踪极大值点得到手形轮廓。分别应用该算法对实验室自采的手形图像库和香港科技大学提供的手形图像库进行实验,结果表明了该算法的有效性。2 本文轮廓跟踪方法
在手形灰度图像中,位于手形边界轮廓处的像素,在垂直于边界方向上存在灰度级的迅速变化,且真实边界点在垂直于边界方向上的灰度梯度应为局部区域内各像素梯度的极大值,因此可以通过判断局部区域内各点灰度梯度的大小找到手形的真实边缘点。本文方法首先定位手形轮廓的起始点,然后依据手形轮廓的走向在局部区域内确定出候选的轮廓点集,用合适的梯度卷积模板计算出候选像素点集中垂直于边缘方向上梯度最大的点(此处的边缘方向是指:从上一轮廓点到该候选点的方向),并逐点跟踪梯度最大点,既可得到完整的手形轮廓。
通过对大量图像的观察,发现位于手形边缘处存在3~4个像素宽度的灰度过渡变化带,如图1所示。由于该过渡带的存在,手形边界处的像素并非在单像素宽度内呈现梯度的急剧变化,因此用简单的微分算子难以找到真实边缘。算法关键是:(1)找到合适的梯度卷积模板;(2)在手形边界的过渡带像素中确定出真实边界点的准则。若选取的梯度卷积模板过小,则受过渡带像素的影响大,易出现梯度极大值所在的点偏离手形轮廓的情况;而模板过大不仅会导致算法计算量大,而且对于手指间缝隙较小的图像,在跟踪至指跟处时,由于轮廓像素的方向变化较快,过大的模板窗口在此处卷积后的值表征垂直于轮廓方向梯度的能力减小,影响跟踪的准确性。因此梯度卷积模板的选取至关重要。本文通过用不同大小、不同方向的模板对大量图像进行实验验证得出:本文选用的5X5大小的4个方向的梯度卷积模板计算手形边缘像素的灰度梯度效果最优。
本文均以手腕部位在图像右侧的右手图像为例阐述该算法,如图2。
2.1 轮廓跟踪算法描述 2.1.1 确定轮廓跟踪起始点
本文算法设定轮廓跟踪起始点为图像最右列的手腕上边缘点。位于手腕边缘处的像素点,灰度级存在明显变化,且真实边缘点处应有最大的灰度变化。微分边缘检测算子在图像灰度级迅速变化的点处得到较高的值,且灰度级变化越大,该点所得的值越大。因此本文用一个竖直方向的边缘检测模板(模板1),逐点与图像最右列像素做卷积,卷积所得的值即为图像中与模板中心元素对应的像素点在竖直方向上的梯度,梯度值最大且为正值的点即为手形轮廓起始点。
若在定位轮廓起始点时,出现两个梯度值最大且为正值的点的情况,则增大梯度模板,将模板上下各增加一个元素,用新模板对这两个梯度值最大且为正值的点重新求取梯度值,若两点的梯度值仍相等,则继续增大模板,直至找到唯一的轮廓起始点。若出现两个以上梯度值相同的点,可用同样方法处理。2.1.2 确定第二、第三轮廓点及轮廓走向
依据起始点位置,确定第二、第三轮廓点。本文轮廓跟踪顺序为:从起始点开始,沿逆时针方向,按照手形轮廓的自然走向逐点跟踪,直至跟踪到达图像右侧边缘,结束跟踪。因此第二轮廓点的候选点集为起始点(i, j)左侧的3个邻域像素点,如图3所示,3个候选点为(i-1,j-1),(i,j-1),(i+1,j-1)。由于此时候选像素点位于图像边界,若采用本文的5X5模板进行卷积,位于图像边缘处的像素不够容纳模板窗口的大小,因此不适宜用本文5X5模板求取梯度的方法确定 第二轮廓点。故对第二轮廓点采用了如下求取方法:(1)依据公式(1)求得最大值MAX。(2)当公式(1)取得最大值MAX时,对应的像素点坐标(i+k,j-1)为第二轮廓点。
MAX=max{abs[h(i+k,j-1)-h(i+k-1,j-1)]} k=-1,0,1(1)其中:h(p,q)为图像中第p行,第q列像素点的灰度值。
第二轮廓点确定后,依据第二轮廓点位置,用相同方法确定第三轮廓点,并将第三轮廓点作为当前点,将第二轮廓点到第三轮廓点的方向记录为当前方向。2.1.3 轮廓跟踪规则
根据前一步的走向,即当前方向,确定下一步的可能走向(3个可选方向)。下一步走向的三个可选方向分别为当前方向以及对应于8方向码(如图4)中的当前方向的两个邻接方向。例如:若当前方向为4,则下一步的可选方向为3、4、5;若当前方向为5,则下一步的可选方向为4、5、6;其余同理。对3个可能走向分别以从当前点沿该方向前进一点作为候选点,得到3个候选点,将每个候选点对应于卷积模板的中心元素求卷积。模板的选取是根据从当前点到该候选点的方向(称为候选方向)确定的,每个不同的候选方向对应于不同的卷积模板进行计算。若候选方向为0或4,选用0度方向模板;若候选方向为1或5,用135度方向模板;若候选方向为2或6,用90度方向模板;若候选方向为3或7,用45度方向模板,四个方向的卷积模板如图5所示。对3个候选点分别用与之相对应的方向梯度卷积模板求卷积,求得的值即为与该候选点的走向垂直方向上的梯度。当某一候选点位于手形轮廓真实边缘时,其垂直于边缘方向的梯度在三个候选点中应呈现出最大值。因此3个候选点中梯度绝对值最大的点以及该点对应的方向即为下一轮廓点及下一步走向。将找到的下一轮廓点作为新的当前点,将其对应的方向作为新的当前方向,循环此过程,直至遇到终止条件结束跟踪。
0度方向模板检测的是垂直方向的梯度,45度方向模板检测的是135度方向的梯度,其余两个方向模板同理。
2.1.4 轮廓跟踪的终止条件
依据模板窗口大小和跟踪结束时的轮廓走向,当当前点的横坐标距离图像右侧边界小于3个像素的距离,且跟踪方向为0或1或7时,跟踪结束。2.2 算法步骤(1)对图像中最右列的上数第四点至下数第四点之间的像素逐点用模板1做卷积,卷积所得的值最大的点记为轮廓跟踪的起始点。若得到两个(或两个以上)值最大的点,则将模板1上下各增加一个元素,用新模板对这两点重新做卷积,直至只得到一个最大值为止。初始化轮廓数组,并将起始点存入轮廓数组。
(2)将起始点的左侧邻域三点分别作为候选点,依据公式(1)计算得到第二轮廓点。再以第二轮廓点左侧邻域三点为候选点,用同样方法找到第三轮廓点。将第二、第三轮廓点分别存入轮廓数组。将第三轮廓点作为当前点CurrentPoint,将第二轮廓点到第三轮廓点的方向记录为当前方向CurrentDirection。
(3)将当前方向CurrentDirection以及对应于图4方向码中当前方向的两个邻接方向作为下一步的3个可能走向。
(4)从当前点沿着每个可能走向分别前进一点作为候选点。对每个候选点,依据从当前点到该候选点的方向,从图5中选取与该方向相对应的卷积模板,将该候选点对应于模板中心元素求卷积,将卷积结果的绝对值作为该候选点的灰度梯度值。
(5)比较第(4)步中3个候选点的灰度梯度值的大小,将值最大的候选点作为下一个轮廓点(若3个候选点的灰度梯度值出现相等的情况,则若出现相等情况的点中包括中心方向上的点,则取中心方向上的点作为下一轮廓点;否则,取中心方向右侧方向上的点作为下一轮廓点)。将找到的轮廓点存入轮廓数组,将当前方向更新为从当前点到该轮廓点的方向,再将当前点更新为该轮廓点。(6)判断当前点坐标是否满足结束条件。若当前点的横坐标距离图像右侧边界小于3个像素,且跟踪方向为0或1或7时,跟踪结束,否则转(3)继续执行。
参考文献:《基于方向梯度极值的手形轮廓跟踪算法》,苑玮琦,董 茜,桑海峰,沈阳工业大学视觉检测技术研究所。实验结果
处理图像:
代码程序: 建立10个m文件 er.m,fangxianghans.m, gezhongsuanfa.m, juanji.m, lunkuo.m, moban.m, qishi.m, san.m, Untitled.m, youle.m,最终运行Untitled文件,代码如下:
1、er.m:
function secondpoint=er(firstpoint,I)[M N]=size(I);for i=1:3 chazhi(i)=I(M-1,firstpoint+i-1)-I(M-1,firstpoint+i-2);end second=find(chazhi==max(chazhi));secondpoint=firstpoint+second(1)-1;
2、fangxianghans.m:
function fangxiang=fangxianghans(yqian,xqian,yhou,xhou)fang2=xhou-xqian;%1 0-1 左右 fang1=yhou-yqian;%1 0-1 上下 if fang1==0&&fang2==-1 %向左 左 1 fangxiang=1;end if fang1==-1&&fang2==-1 %向左上 左上2 fangxiang=2;end if fang1==-1&&fang2==0 %向上 fangxiang=3;end if fang1==-1&&fang2==1 %向右上 右上4 fangxiang=4;end if fang1==0&&fang2==1 %向右 右5 fangxiang=5;end if fang1==1&&fang2==1 %向右下 右下6 fangxiang=6;end if fang1==1&&fang2==0 %向下 fangxiang=7;end if fang1==1&&fang2==-1 %向左下 左下8 fangxiang=8;end fangxiang=fangxiang;
3、gezhongsuanfa.m: clear;I=imread('5.bmp');% 读图片 %figure;%imshow(I);%原图像显示 %i2=im2bw(I,0.30);% 二值化 %imshow(i2);%二值化显示 BW = edge(I,'sobel',0.3);figure;imshow(BW);%原图像显示 title('soble');BW = edge(I,'prewitt');figure;imshow(BW);%原图像显示 title('prewitt');BW = edge(I,'roberts');figure;imshow(BW);%原图像显示 title('roberts');BW = edge(I,'log');figure;imshow(BW);%原图像显示 title('log');BW = edge(I,'canny');figure;imshow(BW);%原图像显示 title('canny');
4、juanji.m: function pointvalue=juanji(xianpointy,xianpointx,I,y,x,moban)
wei_y=xianpointy+y;wei_x=xianpointx+x;I=im2double(I);pointvalues=0;for ii=1:5 for jj=1:5 pointvalues=I(wei_y+ii-3,wei_x+jj-3)*moban(ii,jj)+pointvalues;end end pointvalue=abs(pointvalues);
5、lunkuo.m:
function I_lunkuo=lunkuo(secondpoint,thirdpoint,I)[M N]=size(I);%fangxiang=fangxianghans(M,secondpoint,M-1,thirdpoint);%xianpointx=thirdpoint;%xianpointy=secondpoint;points(2)=secondpoint;points(1)=M-1;point(2)=thirdpoint;point(1)=M-2;flag=1;count=4;lunkuopoint(1,1)=1;lunkuopoint(1,2)=1;lunkuopoint(2,1)=M-1;lunkuopoint(2,2)=secondpoint;lunkuopoint(3,1)=M-2;lunkuopoint(3,2)=thirdpoint;while flag==1 fangxiang=fangxianghans(points(1),points(2),point(1),point(2));xianpointy=point(1);xianpointx=point(2);pointqian=moban(fangxiang,xianpointy,xianpointx,I);points=point;point=pointqian;if point(1)==M-2&&point(2)~=thirdpoint %if count==M-10 flag=0;end %if point(1)==M-5&&point(2)~=thirdpoint %if count==200 %flag=0;%end lunkuopoint(count,1)=point(1);lunkuopoint(count,2)=point(2);count=count+1;end [M N]=size(I);for ii=1:M for jj=1:N I_lunkuo(ii,jj)=0;end end for iii=1:count-2 I_lunkuo(lunkuopoint(iii,1),lunkuopoint(iii,2))=255;end mm=lunkuopoint;
6、moban.m: function pointqian=moban(fangxiang,xianpointy,xianpointx,I)
moban1=[0 1 1 1 0;0 1 1 1 0;0 0 0 0 0;0-1-1-1 0;0-1-1-1 0];moban2=[0 1 1 0 0;1 1 1 0 0;1 1 0-1-1;0 0-1-1-1;0 0-1-1 0];moban3=[0 0 0 0 0;1 1 0-1-1;1 1 0-1-1;1 1 0-1-1;0 0 0 0 0];moban4=[0 0 1 1 0;0 0 1 1 1;-1-1 0 1 1;-1-1-1 0 0;-1-1 0 0 0];% a=1111 switch fangxiang case 1
pointqian1=juanji(xianpointy,xianpointx,I,1,-1,moban2);%向左下 8 4
pointqian2=juanji(xianpointy,xianpointx,I,0,-1,moban1);%继续向左 1 1
pointqian3=juanji(xianpointy,xianpointx,I,-1,-1,moban4);%向左上 2 2 case 2
pointqian1=juanji(xianpointy,xianpointx,I,0,-1,moban1);%向左 1 1
pointqian2=juanji(xianpointy,xianpointx,I,-1,-1,moban4);%继续左上 2 2
pointqian3=juanji(xianpointy,xianpointx,I,-1,0,moban3);%向上 3 3 case 3
pointqian1=juanji(xianpointy,xianpointx,I,-1,-1,moban4);%向左上 2 4
pointqian2=juanji(xianpointy,xianpointx,I,-1,0,moban3);%继续向上 3 3
pointqian3=juanji(xianpointy,xianpointx,I,-1,1,moban2);%向右上 4 2 case 4
pointqian1=juanji(xianpointy,xianpointx,I,-1,0,moban3);%向上 3
pointqian2=juanji(xianpointy,xianpointx,I,-1,1,moban2);%继续右上 4 2
pointqian3=juanji(xianpointy,xianpointx,I,0,1,moban1);%向右 5 case 5
pointqian1=juanji(xianpointy,xianpointx,I,-1,1,moban2);%向右上 4 2
pointqian2=juanji(xianpointy,xianpointx,I,0,1,moban1);%继续向右 5
pointqian3=juanji(xianpointy,xianpointx,I,1,1,moban4);%向右下 6 2 case 6
pointqian1=juanji(xianpointy,xianpointx,I,0,1,moban1);%向右 5
pointqian2=juanji(xianpointy,xianpointx,I,1,1,moban4);%继续右下 6
pointqian3=juanji(xianpointy,xianpointx,I,1,0,moban3);%向下 7 case 7
pointqian1=juanji(xianpointy,xianpointx,I,1,1,moban4);%向右下 6 4
pointqian2=juanji(xianpointy,xianpointx,I,1,0,moban3);%继续向下 7
pointqian3=juanji(xianpointy,xianpointx,I,1,-1,moban2);%向左下 8 2 case 8
pointqian1=juanji(xianpointy,xianpointx,I,1,0,moban3);%向下 7
pointqian2=juanji(xianpointy,xianpointx,I,1,-1,moban2);%继续左下 8 2
pointqian3=juanji(xianpointy,xianpointx,I,0,-1,moban1);%向左 1 end bijiao(1)=pointqian1;bijiao(2)=pointqian2;bijiao(3)=pointqian3;suoyins=find(max(bijiao)==bijiao);suoyin=suoyins(1);switch fangxiang case 1 if suoyin==1 pointqian(1)=xianpointy+1;pointqian(2)=xianpointx-1;end if suoyin==2 pointqian(1)=xianpointy;pointqian(2)=xianpointx-1;end if suoyin==3 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx-1;end case 2 if suoyin==1 pointqian(1)=xianpointy;pointqian(2)=xianpointx-1;end if suoyin==2 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx-1;end if suoyin==3 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx;end case 3 if suoyin==1 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx-1;end if suoyin==2 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx;end if suoyin==3 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx+1;end case 4 if suoyin==1 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx;end if suoyin==2 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx+1;end if suoyin==3 pointqian(1)=xianpointy;pointqian(2)=xianpointx+1;end case 5 if suoyin==1 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx+1;end if suoyin==2 pointqian(1)=xianpointy;pointqian(2)=xianpointx+1;end if suoyin==3 pointqian(1)=xianpointy+1;pointqian(2)=xianpointx+1;end case 6 if suoyin==1 pointqian(1)=xianpointy;pointqian(2)=xianpointx+1;end if suoyin==2 pointqian(1)=xianpointy+1;pointqian(2)=xianpointx+1;end if suoyin==3 pointqian(1)=xianpointy+1;pointqian(2)=xianpointx;end case 7 if suoyin==1 pointqian(1)=xianpointy+1;pointqian(2)=xianpointx+1;end if suoyin==2 pointqian(1)=xianpointy+1;pointqian(2)=xianpointx;end if suoyin==3 pointqian(1)=xianpointy+1;pointqian(2)=xianpointx-1;end case 8 if suoyin==1 pointqian(1)=xianpointy+1;pointqian(2)=xianpointx;end if suoyin==2 pointqian(1)=xianpointy+1;pointqian(2)=xianpointx-1;end if suoyin==3 pointqian(1)=xianpointy-1;pointqian(2)=xianpointx;end end
7、qishi.m:
function firstpoint=qishi(I)moban1=[-1-1-1 0 1 1 1];[M N]=size(I);I=im2double(I);for i=4:N-4 chazhi(i-2)=I(M,i+3)+I(M,i+2)+I(M,i+1)-I(M,i-1)-I(M,i-2)-I(M,i-3);end firstpoints=find(chazhi==max(chazhi));firstpoint=firstpoints(1)+3;
8、san.m:
function thirdpoint=san(secondpoint,I)[M N]=size(I);for i=1:3 chazhi(i)=I(M-2,secondpoint+i-1)-I(M-2,secondpoint+i-2);end second=find(chazhi==max(chazhi));thirdpoint=secondpoint+second(1)-1;
9、youle.m: clear;I=imread('5.bmp');% 读图片 figure;%imshow(I);%原图像显示 i2=im2bw(I,0.30);% 二值化 imshow(i2);%二值化显示 BW = edge(i2,'sobel');figure;imshow(BW);%原图像显示 BW2 = bwmorph(i2,'erode',1);figure;imshow(BW2);BW3 = bwmorph(i2,'open',2);figure;imshow(BW3);[M N]=size(i2);for i=1:M for j=1:N III(i,j)=i2(i,j)-BW2(i,j);end end figure;imshow(III);
10、Untitled.m clear;I=imread('5.bmp');if isgray(I)==0 I=rgb2gray(I);end imshow(I);figure;[M N]=size(I);for i=1:M for j=1:N II(i,j)=0;end end firstpoint=qishi(I);secondpoint=er(firstpoint,I);thirdpoint=san(secondpoint,I);% II(M,firstpoint)=255;II(M-1,secondpoint)=255;II(M-2,thirdpoint)=255;imshow(II);figure;I_lunkuo=lunkuo(secondpoint,thirdpoint,I);imshow(I_lunkuo);for i=1:M for j=1:N if I_lunkuo(i,j)==255 I(i,j)=230;end end end figure;imshow(I);运行Untitled.m,其运行结果如下:
第二篇:视频图像识别分析软件简析
视频图像识别分析软件简析
近年来,随着信号处理技术的进步,视频和图像处理技术得到迅速发展,并逐步渗透到我们的社会生活中。大量的视频监控应用已经出现,我们可能都已经看到,视频监控几乎无所不在:银行柜台和ATM机,小区、酒店、写字楼、机场等公共场所的安全管理,高速公路和停车场的车辆收费管理,以及道路交通的流量管理等等。与此同时,大规模视频监控带来的海量视频信息成为了系统安装后的处理难题。系统利用率低、有效信息提取困难,而视频图像识别分析技术则可以解决这个问题,智能视频分析软件就是基于此点迅速发展起来。技术发展状况
视频图像识别分析技术源自计算机视觉(CV,Computer Vision)技术。计算机视觉技术是人工智能(AI,Artificial Intelligent)研究的分支之一,它能够在图像及图像描述之间建立映射关系,从而使计算机能够通过数字图像处理和分析来理解视频画面中的内容。而视频监控中所提到的智能视频技术主要指的是:“自动分析和抽取视频源中的关键信息。”如果把摄像机看作人的眼睛,而智能视频系统或设备则可以看作人的大脑。人脸辨识、车牌识别以及行为分析三项技术则是智能视频软件的核心技术。
人脸辨识技术
人脸辨识是一个相当古老的题目,早在1981年便有人发明模拟人脸,做人脸辨识的计算机视觉系统,在1991年以及1997年分别有两个重要的人脸辨识方法发表,其分别是Eigenface以及Fisherface。
Eigenface法是假设所有人脸可以用一组基底人脸的线性组合所表示,作者以PCA组成分析原理(Principle Components Analysis)找出这组基底。
Fisherface法则是进一步利用LDA线性判别式分析法(Linear Discriminant Analysis),强制将不同的人脸在投射空间中尽量分开,因而提高了辨识率。
基本上人脸辨识可以分为两种主要方法,一是整体特征方法,一是局部特征方法。整体特征方法:直接将整张人脸当作单一特征来做辨识;局部特征方法:先找出脸上的局部特征,通常是眼睛、鼻子和嘴巴,然后分别根据这些局部特征做辨识,最后将个别局部特征的结果统合而得到最后结果。近来的研究发现局部特征方法要比整体特征方法有更高的准确率,但局部特征方法存在局部特征的对位问题,在实际应用上有较高的困难度。大部分的人脸辨识方法会先将原始影像数据经过降维的程序,在投射的子空间进行辨识,如此一来降低了运算量,例如前述的利用PCA或LDA方法。
近来也有方法是利用不连续余弦转换法DCT(Discrete Cosine Transform)来做降维,其与PCA 和LDA不同处在于DCT法抽取的是影像的低频部分作为特征,并且不用象PCA或LDA需要很多样本(sample)来计算转置矩阵,而是利用单一公式直接对每个样本降维。在抽取出特征后(不管是原始影像或是降维空间),做辨识通常是利用最近邻居法(Nearest-Neighbor),Eigenface以及Fisherface皆属于这种方式。比较快速的方式是利用中枢网络法(Neural Network),再配合DCT的处理结果作为特征后,在Yale以及ORL人脸数据库有不错的辨识率。近来非常热门的Support Vector Machine(SVM)方法也被应用到人脸辨识的题目上,其直接取原始影像作为特征,或是经过PCA降维后当作特征,再训练出SVM来做辨识。一个很有创意的人脸辨识方法是利用DCT加上Hidden Markov Model(HMM)来做人脸辨识,其是利用了人脸由上而下,眼睛、鼻子和嘴巴这些特征是有一定顺序的性质。人脸辨识目前公认存在的难题有两个,一是不同光源的问题,一是不同角度的问题。由于同一张人脸在不同光线以及角度下常常会有很大的差别,所以传统的方法通常会失败。近来有不少方法致力于处理上述两问题,在处理光线问题方面有Illumination Cone、Quotient Image以及Self Quotient Image和Intrinsic Illumination Subspace四种方法。
Illumination Cone提出建立3D脸部模型,理论上可以重建固定视角下所有光源的脸2D样貌,因而处理了光线变化的问题。
Quotient Image、Self Quotient Image和Intrinsic Illumination Subspace概念上都是一种前处理的手段,三者皆先将欲辨识的人脸转成删除光源信息的格式,再做人脸辨识。
在处理不同角度方面有Morphable model、View-Base Eigenspaces、Elastic Bunch Graph Matching和Active appearance model四种方法。
Morphable model 与Active appearance model提供将视角为非正面输入影像转换成正面影像,因而去除了不同视角的因素,在此条件下做人脸辨识自然有较高的精确度。
View-Base Eigenspaces是基于Eigenface的方法,但根据不同的视角都个别去做,因而数据库中储存了同一人在不同视角下的数据。
Elastic Bunch Graph Matching方法则是根据人脸上的特征点建立一个图(graph),藉由允许此图变形而使得不同视角下脸部的特征点仍位于脸上相同位置,因此藉由这些特征点来做人脸辨识便排除了不同视角的因素。
上述的这些方法皆是利用2D的模型来进行人脸辨识。另外一类的方法使用3D模型来进行人脸辨识,如在FRVT 2002中三维Morphable模型的测试被证明可以有效地改善不同视角的辨識率。
传统的人脸辨识使用单张影像,相对于此种静态影像辨识方法外,利用影片中连续的多张影像来做辨识的方法则称为动态影像辨识。动态影像相对于静态影像有许多优势,一是多张影像提供的信息比单张影像丰富,其中包括了不同的视角,相邻影像的信息等,这些信息都能够增加人脸辨识的准确度。
第三篇:图像识别中仍然存在的问题及解决思路
图像识别中仍然存在的问题及解决思路
一、摄像系统晃动问题,在对焦侧及中部炉盖进行拍摄时,小的晃动问题并不显示很严重,但对机焦炉盖及上升管拍摄时,由于距离比较远,小的晃动就会造成画面的不稳定,影响识别精度。
晃动的原因:有几种情况,一是由于滑行车在风的作用下东西方向的摆动;二是摄像系统安装于滑行车外部支架上,有一定高低方向的颤动;三是由于云台的旋转俯仰均是齿轮驱动,齿轮配合间隙的晃动会造成一定的晃动。
解决方案:虽然现在的识别程序中已经对晃动进行了配准,但有时仍会由于晃动造成误判,因此考虑从硬件及软件两方面着手进行改善,硬件上解决滑行车摆动最理想的方案是采用双轨,但考虑到成本会增加较多,在王工新的设计中将摄像系统由滑行车外部移到中部应该对上下的颤动会有改善。云台齿轮间隙的问题,如要解决只能选用新的更精密的云台,考虑到这部分晃动的幅度较小,而且由于这种间隙没有弹性的回力,故在一定风向下一般不会发生来回的晃动,可不考虑。
软件的方面,现在所用的晃动图像配准方法有两个问题,一是由于运算量较大,现在只对晃动严重的上下方向进行了配准,对横向的晃动未进行配准。二是配准的算法上应该还有一定的提高空间(主要是降低运算量及提高配准精度),新来的小张由于研究生专业就是图像识别,考虑让他在这方面做一些工作(除了配准这部分,从整个识别算法上也可以做一个重新的考虑)。
另一个张总曾提出的软件解决方案是,在拍摄瞬时风速超过一定范围后,识别结果均定为不泄漏。
二、逆光问题,在下午的拍摄中,逆光是影响识别效果最严重的一个因素(对焦侧炉盖的拍摄基本没影响,对中间炉盖有一定影响同,对机侧炉盖及上升管拍摄影响很大),在逆光时拍摄回的画面,即使人工来识别,也已经无法判断泄漏与不泄漏,这种情况下计算机识别已经无能为力。
逆光原因:由于焦炉是南北走向,我们的摄像系统安装于焦炉东侧的焦侧方向,在下午对机侧炉盖及上升管拍摄时,阳光正好照射在摄像机护罩玻璃上,导致摄回的图像均变成灰色。除不能识别外,有时还会由于中部光线强度的变化导致一些误判。解决方案:王工提出从南向北拍摄的方法,也就是说滑行车定位时,定位在被摄炭化室南边若干个炭化室(这个距离需要实验得出),拍摄时向北边被摄炉盖拍摄。这样做可部分解决逆光问题,但引入几个新的问题,1.拍摄时距离变远了,对滑行定位及云台定位的精度要求会更高;2.对于变焦镜头,在更大变比情况下摄回的图像清晰度、亮度、细节丰富程度,均会下降,但下降的程度需要实验结果说明。3.滑行轨道的设计安装有一定改变,由于滑行车要定位在被摄炭化室南边位置拍摄,为了避免逆光,可能需要比较远的距离,那为在拍摄最南边炭化室时,轨道需要延长出相应的距离才能拍摄。
三、上升管背后炉门泄漏对上升管泄漏识别造成的影响:在对上升管进行拍摄时,如果该炭化室的机侧炉门是泄漏的,那么在被摄上升管的两边会出现上升的烟雾,这种烟雾和上升管泄漏烟雾尚不能区别。
解决方案:从软件上考虑只识别上升管根部泄漏的烟雾;另一个方案是在检查到该炭化室机侧炉门泄漏后,将此上升管识别为不泄漏。
四、夜间补光灯效果仍需要提高:阳光项目采用一个汽车的前大灯做为补光灯,在实际使用中发现这种灯无法兼顾远射和近射两种需要,在拍摄焦侧上升管时,补光灯距离目标只有四五光,而在拍摄上升管时,补光灯距离目标十五六米,在这两种情况下,这个汽车灯补充的光线仍有不足,考虑新的设计中最好采用两个补光灯来分别解决远射和近射两种需要。另一个问题是汽车灯是一种聚光,而我们需要的最好是一种泛光,在远射时又需要一定的聚光效果。因此考虑选用LED补光灯。
解决方案:重新选型补光灯。
五、视频信号干扰造成的误判:在阳光项目中由于视频信号线和摄像头、视频服务器等连接问题造成画面出现干扰条纹,造成的误判也有一定的数量。
干扰原因:由于视频信号线接头质量及接头和摄像头、视频服务器连接质量造成画面出现干扰条纹。而这种条纹在某种情况下符合了现在采用算法的烟雾特征,故造成误判。
解决方案:从硬件上采用质量更好的视频线接头,保证视频线和摄像头、视频服务器的连接质量;软件上考虑能够区别这种条纹和烟雾的算法。
六、光影造成的误判:在烟雾识别的算法中,有一种情况比较难以和烟雾进 2 行精确分别,这就是局部光线的的变化,在前期做调研时,了解到的一些烟雾识别得法,包括浙江理工周平的方法,均对这种光线变化无法很好的和烟雾进行精确的甄别,在阳光现场出现过将水汽阴影或工人阴影的部分识别为烟雾的的误判。
光影影响的原因:在烟雾识别中,为了消除对刚性物体的误判,会对识别目标的运动变化识别一个阈值,超过这个阈值的就是刚性物体,否则就是烟雾,而某种程度的阴影的变化,会正好符合这个小范围,故会造成一定的误判。
解决方案:只能从软件上考虑,但这部分误判的数量很少,只有个别的几起,故可放在最后考虑。
第四篇:如何写技术报告
一、内容要求
专业技术工作报告应按时间顺序撰写,以任现职后的业绩为主(任现职前的业绩可简写),应明确本人在专业技术工作中的角色、承担的具体工作任务、所发挥的作用以及为解决问题所采取的措施、技术手段等。篇幅在2500字以上。
二、格式要求
专业技术工作报告由二个部分组成:封面、正文。
(一)封面
大标题(专业技术工作报告)应居中书写,采用宋体2号加粗;单位、姓名、日期为宋体小2号。
(二)正文
1.版面规格
页边距:上、下、左、右均为2.6厘米。
2.字体规格
文章题目:“专业技术工作报告”为宋体小2号,加粗。
文章内容:宋体4号,行间距为固定值25磅。
3.段落层次
段落层次一般不超过四层,层次序号应使用下列数字标识:
第一层:一、二、三、„„
第二层:
(一)(二)
(三)„„
第三层:1.2.3.„„
第四层:(1)(2)(3)„„
4.页码
封面不加页码;正文需要单独编排页码,从“1”开始。页码在页面底端(页脚)居中书写。
三、打印及装订要求
(一)用A4纸单面打印。
(二)装订顺序
1.专业技术报告封皮(附后)
2.正文
第五篇:技术报告格式
技术总结报告
一.立项背景
二、预期目标与成果水平
三、主要研究内容
四、总体思路与研究方案
3.1 总体思路
3.2 技术路线
3.3 实施方案
五:研究队伍和人员分工
六、进度安排
七、主要研究结果
八、项目组发表的代表论文(单独成册)
九、项目人才培养情况
十、成果应用效益分析