当前位置:文档之家› 计算机视觉课程设计1

计算机视觉课程设计1

燕山大学课程设计说明书题目:基于矩形物体的旋转角度测量学院(系)电气工程学院年级专业:学号: 13010302001301030200学生姓名:指导教师:教师职称:讲师燕山大学课程设计(论文)任务书院(系):电气工程学院基层教学单位:仪器科学与工程系说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。

2016年 12 月 22 日燕山大学课程设计评审意见表摘要本文主要研究对矩形物体旋转角度的测量,并且比较每种方法的处理速度。

通过对图像的滤波、二值化、边框的识别等等操作,完成对矩形物体的角度测量。

本文采用五种方法分别对同一个矩形物体进行旋转角度测量,并比较其处理时间。

五种方式分别为,边缘直线角度测量、对角线角度测量、矩形内部标准角度测量、角点边缘角度测量、垂线角度测量。

关键词:图像处理二值化旋转角测量定位识别目录第一章矩形物体的识别 (1)1、图像滤波 (1)2、图像的边缘检测 (2)3、图像的二值化处理 (3)4、图像的区域选择及处理 (4)第二章旋转角度的测量 (6)1、边缘直线角度测量 (6)2、对角线角度测量 (8)3、矩形内部标准角度测量 (9)4、角点边缘角度测量 (10)5、垂线角度测量 (11)第三章算法时间的比较 (15)参考文献 (16)附录一 (17)1、边缘直线角度测量程序 (17)2、对角线角度测量程序 (17)3、矩形内部标准角度测量程序 (18)4、角点边缘角度测量程序 (19)5、二值化-垂线角度测量程序 (23)6、Soble-垂线角度测量程序 (24)附录二 (26)第一章矩形物体的识别1、图像滤波图1.1.1图像滤波前处理效果图1.1.2 滤波后的图像通过图像的处理,对矩形物体的识别,我们采取两个方法。

一种是边缘检测,一种是二值化处理。

通过图1.1.1和图1.1.2可以明显看出,图像中除了矩形物体外,有很多噪声白点。

由于噪声为椒盐噪声,我们采用中值滤波,既不会影响我们后续边缘的检测,也可以很好的除去噪声。

2、图像的边缘检测对于矩形物体的识别,我们采用一阶边缘检测算法soble算子。

从图1.1可知图像并不是理想图像,其中有很多噪声,而且后续需要对边缘进行处理。

要求其边缘不要太粗、尽量连通,否则影响后续的角度的误差。

所以我们选择了soble算子,它可以很好的检测出边缘效果。

图1.2.1和图1.2.2为检测前和检测后的图像。

图1.2.1 原始图像图1.2.2 soble算子检测图像3、图像的二值化处理由于所给图像背景和所识别的图像颜色差别明显,且背景颜色单一。

所以可以直接选取合适的阈值对图像进行二值化处理。

即可以很好的识别矩形物体,如图1.3.1所示。

图1.3.1二值化后图像4、图像的区域选择及处理从图1.2.2和图1.3.1可以看出图像中除了我们要后续处理的矩形物体外,边缘还有其他干扰,因为最终我们只对矩形物体处理,所以我们需要进行区域选择,选择我们感兴趣的区域进行后续处理。

图1.4.1和图1.4.2为处理前后的图像。

图1.4.1区域选择前图像图1.4.2 区域选择后图像第二章旋转角度的测量1、边缘直线角度测量对于这种方法,我们首先对图像按照第一章所介绍的方法进行处理。

识别矩形物体如图2.1.1。

图2.1.1 识别矩形物体其次,我们对整个图片像素进行处理,获得矩形物体最左边边缘。

如图2.1.2所示图2.1.2左侧边缘图像获得左侧边缘后,我们可以对直线进行操作,选取直线上面的两个点,求其斜率,即为所求矩形旋转角度。

如图2.1.3所示,红色直线为选取两点绘制的直线。

k1=-0.4图2.1.3 选取求解直线图像2、对角线角度测量这种方法主要思想是通过获得矩形物体的对顶角,求对角线斜率,获得矩形旋转角度。

首先,识别矩形物体如图2.1.1所示其次,通过对像素处理,判断第一个像素领域满足,上方、左方、右方像素为1,下方像素为0的像素点,判断第二个像素领域满足,左方、下方、右方像素为1,上方像素为0,即这两个点为矩形物体的对角零点。

并求其斜率k2=5.72图2.2.1对角线测旋转角度3、矩形内部标准角度测量这种方式是以矩形内部部件为衡量标准。

通过测量内部两点获得矩形物体旋转角度。

由于图片内部有四个圆形定位孔,所以通过识别任意两个圆形小孔,获得起坐标,求其斜率,即为矩形物体的旋转角度,k3=-2.4,如图2.3所示图2.3内部标准角度测量4、角点边缘角度测量角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域中。

也称为特征点检测。

角点通常被定义为两条边的交点,更严格的说,角点的局部邻域应该具有两个不同区域的不同方向的边界。

而实际应用中,大多数所谓的角点检测方法检测的是拥有特定特征的图像点,而不仅仅是“角点”。

这些特征点在图像中有具体的坐标,并具有某些数学特征,如局部最大或最小灰度、某些梯度特征等。

一阶导数(即灰度的梯度)的局部最大所对应的像素点;∙两条及两条以上边缘的交点;∙图像中梯度值和梯度方向的变化速率都很高的点;∙角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向。

首先,通过横向Prewitt查分模板分别对图像处理,然后用高斯窗口进行差分操作,其次,查找相似点,并计算其CRF判断是否为角点。

最后通过检测矩形物体的所有角点,并以7X7的领域对所有角点求平均做坐标值,选取两个顶点,求其斜率,如图2.4所示。

图2.4 角点检测图像5、垂线角度测量关于垂线角度检测方法,其原理为:首先找到矩形物体上一个点,然后以一点为中心,任意长度做一垂直直线,通过轮询的方法,判断在这条直线上的另一个边界点。

从而确定边界线的斜率。

关于这种方法的检测,我们采用了两种方式,一种是通过二值化图像识别矩形物体并进行直线斜率测量,结果如图2.5.1和图2.5.2所示,另一种是通过soble算子进行边缘检测并进行直线斜率测量,结果如图2.5.3和2.5.4所示。

K5=0.417图2.5.1 二值化矩形物体识别图2.5.2 二值化垂线角度测量效果图图2.5.3 soble算子识别效果图2.5.4 soble算子测量角度效果图第三章算法时间的比较同过对第二章的各种方法的实现与验证。

我们分别记录了其处理的时间,由于没有进行优化,所以可能有一些人为的误差存在,具体时间结果如表3.1所示。

表3.1从表3.1可以看出,角点边缘检测角度测量运行时间最快,其次是边缘直线角度测量,由于他们在处理图像中进行一些点的选择,将一些不需要的点进行排除。

对角线和矩形内部识别算法基本相同,所以时间也相差不多。

由于图像处理比较简单,处理时间和多方有关,比如当时系统CPU使用情况、循环使用次数等等。

总体来说时间基本相差不多,参考文献1、数字图像处理学电子工业出版社贾永红 20032、数字图像处理(Matlab版)电子工业出版社冈萨雷斯 2006附录一1、边缘直线角度测量程序clear alltici=imread('18.jpg');i=rgb2gray(i);A=im2bw(i,0.43);%进行区域选择for x=10:480for y=10:480if(A(x,y)==0&&A(x-1,y-1)==1&& y<280&& y>100&&x<350)B(x,y)=1;else B(x,y)=0;endendendimshow(B);%直线点选择for y=10:480if(B(200,y)==1&&B(200,y+2)==0&&B(200,y-2)==0)f1=y;endif(B(300,y)==1&&B(300,y+2)==0&&B(300,y-2)==0)b2=y;endendk=(b2-f1)/100;imshow(B);line([b2,f1],[300,200],'Color','r','LineWidth',3)t=toc2、对角线角度测量程序clear alltici=imread('18.jpg');i=rgb2gray(i);A=im2bw(i,0.43);for x=1:480for y=1:480%C(x,1)=0;if( y<480&& y>100&&x<480&&x>100)B(x,y)=A(x,y);else B(x,y)=1;endendendfor x=15:300for y=10:480if( B(x,y)==0&&B(x,y-4)==1&& B(x-1,y)==1&& B(x,y+4)==1)x1=y;y1=x;endendendfor x=240:480for y=10:480if(B(x,y)==0&&B(x,y-1)==1&& B(x+3,y)==1&& B(x,y+1)==1)x2=y;y2=x;endendendimshow(B);line([x1,x2],[y1,y2],'Color','r','LineWidth',3)k=(y2-y1)/(x2-x1);t=toc3、矩形内部标准角度测量程序clear alltici=imread('18.jpg');i=rgb2gray(i);A=im2bw(i,0.43);for x=1:480for y=1:480%C(x,1)=0;if( y<480&& y>100&&x<480&&x>100)B(x,y)=A(x,y);else B(x,y)=1;endendend%imshow(B);for x=15:300for y=10:470if( B(x,y)==1&&B(x,y-2)==1&& B(x-2,y)==1&& B(x,y+2)==1&&...B(x,y-2)==1&& B(x,y+10)==0&& B(x-10,y)==0&& B(x+10,y)==0)x1=y;y1=x;endendendfor x=240:480for y=10:470if(B(x,y)==1&&B(x,y-2)==1&& B(x-2,y)==1&& B(x,y+2)==1&&...B(x,y-2)==1&& B(x,y+10)==0&& B(x-10,y)==0&& B(x+10,y)==0)x2=y;y2=x;endendendimshow(B);line([x1,x2],[y1,y2],'Color','r','LineWidth',3)k=(y2-y1)/(x2-x1);%imshow(m);%hold ont=toc4、角点边缘角度测量程序%%%Prewitt Operator Corner Detection.m%%%时间优化--相邻像素用取差的方法%%clear;ticImage = imread('18.jpg'); % 读取图像Image = im2uint8(rgb2gray(Image));dx = [-1 0 1;-1 0 1;-1 0 1]; %dx:横向Prewitt差分模版Ix2 = filter2(dx,Image).^2;Iy2 = filter2(dx',Image).^2;Ixy = filter2(dx,Image).*filter2(dx',Image);%生成9*9高斯窗口。

相关主题