机器视觉_实验

上传人:桔**** 文档编号:557565764 上传时间:2023-11-20 格式:DOCX 页数:19 大小:1.17MB
返回 下载 相关 举报
机器视觉_实验_第1页
第1页 / 共19页
机器视觉_实验_第2页
第2页 / 共19页
机器视觉_实验_第3页
第3页 / 共19页
机器视觉_实验_第4页
第4页 / 共19页
机器视觉_实验_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《机器视觉_实验》由会员分享,可在线阅读,更多相关《机器视觉_实验(19页珍藏版)》请在金锄头文库上搜索。

1、实验二 多边形边长测量一、实验目的1 掌握哈夫变换方法检测直线的基本原理和步骤。2. 复习VB/VC/Matlab的基本概念、基本语法和编程方法,并熟练使用VB/VC/Matlab编写遗传算法程序。二、实验设备微机三、实验原理距离测量基本步骤:1)对定位距离的两条直线进行识别和拟合。(关键步骤)2)得到直线方程后,根据数学方法计算两线间的距离。两种经典的直线拟合(检测)算法:最小二乘法、哈夫(霍夫)变换法直线函数极值原理: y=ax+b , a 、 b 是 待 定 常 数科科科q二 匕 b=-X-ij=l最小二乘法可以方便、快速地求解直线方程。缺点=拟合出的两条直线可能不平行。解决方法;一般采

2、 用一条直线上多点到另一条直线的距离平均值来近似计算.Hough变换Hough, 1962是一种利用图像全局特征将特定形状的边缘连接起来,形成连续平滑 边缘的一种方法。它通过将源图像上的点映射到用于累加的参数空间,实现对已知解析式曲线的识别。由于 Hough 变换利用了图像全局特性,所以受噪声和边界间断的影响较小,比较鲁棒Robust)。Hough变换常用来对图像中的直线和圆进行识别。直线菽合的哈夫变换方法直线函数:y=px+q 图像空间XF: (x,j)参数空间刊2: q)点-线对偶性二图像空间中共线的点,对应在参 数空间中相交的线。参数空间中相交于一点的所有直 线,在图像空间里都有共线的点

3、I与之对应o第章尺寸测量技术点-线对偶性:图像空间XY中共线的点,对应在参数空间PQ中相交的线。参数空间PQ中相交于一点的所有直线,在图像空间XY里都有共线的点与之对应。结论:在PQ平面上相交直线最多的点,对应在XY平面上的直线就是解。eef0点正弦曲线对偶:图像空间中的点(兀映射到够数空间直线的极坐标方程=r=xcossin0歎空间(匚 幼 先(0, re(-R.R)rAjCosjsinyJi)r=x2cos 0y2sm 0假设:1)图像上的直线是一个容器;2)直线上的点(图像中的特定像素)是放在容器中的棋子。由于图像上任一像素可以同时属于多根直线,即可看成每个棋子(像素)可以同时放在多个容

4、器中(直线)。Hough 变换的基本思想:依次检查图像上的每个棋子(特定像素)。对每个棋子,找到所有包含 它的容器(直线),并为每个容器的计数器加 1。遍历结束后,统计每个容器所包含的棋子数量。当 图像上某个直线包含的特定像素足够多时,就可以认为直线存在。 Hough变换时,依次对像素於进行处理像素/的处理结果:Zl、Z2、Z3、Z4等直线的计数器加1; 像素的处理结果:L2. L6. L7. Z8等直线的计数器加1;最终结果:除2外,其余直线区域的计数器值均为1 根据图像大小设定阈值门规定若某个直线计数器内包含 的特定像素数量八则认为此直线存在。具体步骤:将r 空间量化,得到二维矩阵Mr;根

5、据极坐标表示法,r是直线到原点的距离。设图像的对角线长度为n固定左上角为原点,则r 的取值范围为0, n 。令以1度为增量,则的取值范围为0, 359。此时,M是一个n行360列的二维矩阵。矩阵中任一元素Mr所存储的值就是图像中由参数(r,)决定的直线上所拥有的像素数。初始化时,矩阵M置为0。遍历图像,对像素(xi, yi),将的所有量化值和像素坐标(xi, yi),依次代入直线的极坐标方程,计算r的值,根据当前r、,将对应的累加器加1,即:Mr=Mr +1。分析Mr,如果Mr T,就认为存在一条有意义的线段,(r,)是该线段的拟合参 数。T是一个非负整数,由图像中景物的先验知识决定,与图像大

6、小有关。由(r,)和(xi, yi)共同确定图像中的线段,并连接断裂部分。若将Hough变换得到的各直线计数器的值看作图像的衣度,把用 于存储的二维数组看做像素矩阵,则可得到Hough变换的图像。原灰度图参数空间映射图像四、预习要求1 查阅资料,理解并掌握哈夫变换方法检测直线的基本原理与步骤。2 复习 VB/VC/Matlab 的基本概念、基本语法和编程方法。五、实验内容及步骤1. 上机编写程序,以“六边形.bmp ”为实验对象,利用哈夫变换方法检测出六边形各边边长。程序代码:#include stdafx.h#include opencv2/highgui/highgui.hpp#inclu

7、de opencv2/imgproc/imgproc.hpp#include using namespace cv;using namespace std;Mat src, edges;Mat src_gray;Mat st andard_hough, probab il is ti c_hough;/标准霍夫变换,概率的霍夫变换int min_threshold = 10;/最小阈值为 10int max_trackbar = 200;/最大的跟踪条为 200char*standard_name = Standard Hough Lines Demo;char*probabilistic_n

8、ame = Probabilistic Hough Lines Demo;int s_trackbar = max_trackbar;int p_trackbar = max_trackbar;void help();void Standard_Hough(int, void*);void Probabilistic_Hough(int, void*);int main()src = imread(六边形.bmp, 1);if (src.emp ty()help();return -1;cvtColor(src, src_gray, CV_RGB2GRAY);Canny(src_gray, e

9、dges, 50, 200, 3);namedWindow(standard_name, CV_WINDOW_AUTOSIZE);createTrackbar(Thresh, standard_name, &s_trackbar, max_trackbar, Standard_Hough); namedWindow(probabilistic_name, CV_WINDOW_AUTOSIZE);createTrackbar(Thresh, probabilistic_name, &p_trackbar, max_trackbar, Probabilistic_Hough); /初始化St an

10、dard_Hough(0, 0);Probabilis tic_Hough(0, 0);wait Key(0);return 0;void help()printf(t Hough Transform to detect lines n);printf(tn);printf(Usage:./HoughLines_Demoimage_namen);void Standard_Hough(int, void*)vectorVec2fs_lines;cvt Color(edges, st andard_hough, CV_GRAY2BGR);/用标准霍夫变换HoughLines(edges, s_l

11、ines, 1, CV_PI / 180, min _t hreshold + s_t rackbar, 0, 0);/显示结果for (in t i = 0; i s_lines.size(); i+)floa t r = s_linesi0, t = s_linesi1;double cos _t = cos( t), sin _t = sin( t);double x0 = r*cos_t, y0 = r*sin_t;double alpha = 1000;Point ptl (cvRound(x0 + alpha*(-sin_t), cvRound(y0 + alpha*cos_t);

12、Poin t pt 2(cvRound(x0 - alpha *(-sin _t), cvRound(y0 - alpha *cos _t); line(standard_hough, ptl, pt2, Scalar(255, 0, 0), 1, CV_AA);imshow(standard_name, standard_hough);imwr ite(六边形.bmp, st andard_hough); void Probabilistic_Hough(int, void*)vectorVec4ip_lines;cvtColor(edges, probabilistic_hough, CV

13、_GRAY2BGR);/用概率霍夫变换HoughLinesP(edges, p_lines, 1, CV_PI / 180, min _t hreshold + p_t rackbar, 30, 10);/显示结果for (size _t i = 0; i p_lines.size(); i+)Vec4i l = p_linesi;line(probabilistic_hough, Point(l0, l1), Point(l2, l3), Scalar(255, 0, 0), 1,CV_AA);imshow(probabilistic_name, probabilistic_hough);

14、imwr ite(六边形.bmp, probabilis ti c_hough);2. 利用实验一的Harris角点检测程序,检测“六边形. bmp”中六边形的各边边长。源程序:#include stdafx.h#include opencv2/highgui/highgui.hpp#include opencv2/imgproc/imgproc.hpp#include opencv2corecore.hpp#include opencv2legacylegacy.hpp#include opencv2nonfreenonfree.hpp#include opencv2highguihighgui.hpp#include opencv2calib3dcalib3d.hpp#include vector#include using namespace cv;using namespace std;Mat src, src_gray, dst_norm_scaled, src_copy;int thresh = 0;int max_thresh = 100;int maxCorners = 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号