主要内容

交角测量

这个例子展示了如何测量角度和交叉点之间的两束使用bwtraceboundary,这是一个边界跟踪例程。机器视觉应用中的一个常见任务是使用图像采集和图像处理技术进行免提测量。

步骤1:加载图像

读到gantrycrane.png并画箭头指向两束感兴趣的光束。这是一个用于组装桥梁的门式起重机的图像。

RGB = imread (“gantrycrane.png”);imshow (RGB);文本(大小(RGB, 2),大小(RGB, 1) + 15,“图片由杰夫·马瑟提供”...“字形大小”7“HorizontalAlignment”“对”);103线(328 [300],[85],“颜色”, (1 1 0));140线(255 [268],[85],“颜色”, (1 1 0));文本(150、72、“测量这些光束之间的角度”“颜色”“y”...“FontWeight”“大胆”);

图中包含一个轴。轴包含图像、文本、线条类型的5个对象。

步骤2:提取感兴趣的区域

裁剪图像得到之前选择的龙门起重机的梁。这一步将使提取两个金属梁的边缘更容易。

%可以得到矩形区域的坐标%像素信息显示imtoolstart_row = 34;start_col = 208;cropRGB = RGB(start_row:163, start_col:400,:);imshow (cropRGB)

图中包含一个轴。轴包含图像类型的对象。

%存储(X,Y)偏移量以备以后使用;减去1,每个偏移量%对应感兴趣区域之前的最后一个像素offsetX = start_col-1;offsetY = start_row-1;

步骤3:阈值图像

将图像转换为黑白,用于后续提取边缘坐标bwtraceboundary例行公事。

I = rgb2gray (cropRGB);BW = imbinarize(我);BW = ~ BW;%补充图像(感兴趣的对象必须是白色)imshow (BW)

图中包含一个轴。轴包含图像类型的对象。

步骤4:在每个边界上找到初始点

bwtraceboundary例程要求您在边界上指定单个点。这一点被用作边界跟踪过程的起始位置。

为了提取下光束的边缘,在图像中选择一列并检查它,直到从背景像素到对象像素发生过渡。存储此位置以备以后使用bwtraceboundary例行公事。对另一束重复这个步骤,但这次是水平跟踪。

昏暗的大小= (BW);%的水平梁col1 = 4;row1 = find(BW(:,col1), 1);%的梁row2 = 12;col2 = find(BW(row2,:), 1);

第五步:跟踪边界

bwtraceboundary例程用于提取边界点的(X, Y)位置。为了最大限度地提高角度和交点计算的精度,需要尽可能多地提取出波束边缘的点。你应该通过实验确定点数。由于水平条的初始点是由北向南扫描得到的,因此将初始搜索步骤设置为指向物体外部最安全,即“北”。

边界1 = bwtraceboundary(BW, [row1, col1],“N”8, 70);%设置搜索方向为逆时针,以便向下追踪。边界2 = bwtraceboundary(BW, [row2, col2],“E”90年,8日,“计数器”);imshow (RGB);持有应用偏移量以便在原始图像中绘制情节(offsetX + boundary1 (:, 2), offsetY + boundary1 (: 1),‘g’“线宽”2);情节(offsetX + boundary2 (:, 2), offsetY + boundary2 (: 1),‘g’“线宽”2);

图中包含一个轴。轴包含3个对象类型的图像,线。

步骤6:使线条符合边界

虽然(X,Y)坐标对是在前一步中获得的,但并不是所有的点都在一条直线上。哪些应该用来计算夹角和交点?假设所有获得的点都是同等重要的,拟合线的边界像素位置。

直线的方程是y = [x 1]*[a;b]。您可以通过使用,在最小二乘意义下求解参数'a'和'b'polyfit

Ab1 = polyfit(boundary1(:,2), boundary1(:,1), 1);Ab2 = polyfit(boundary2(:,2), boundary2(:,1), 1);

第七步:求交角

用点积求角度。

vector = [1 ab1(1)];创建一个基于直线方程的矢量Vect2 = [1 ab2(1)];Dp = dot(向量1,向量2);%计算向量长度length1 =√总和(vect1 ^ 2));length2 =√总和(vect2 ^ 2));%得到较大的相交角,以角度表示角= 180 -这些“可信赖医疗组织”(dp / (length1 * length2)) * 180 /π
角= 129.4971

第八步:找到交点

解两个方程组以得到交点的(X,Y)坐标。

交集= [1,-ab1(1);]1, -ab2(1)] \ [ab1(2);ab2 (2)];%应用偏移量以计算原始中的位置,%即未裁剪,图像。intersection = intersection +[偏移量;offsetX]
十字路口=2×1143.0917 - 295.7494

步骤9:绘制结果。

inter_x =路口(2);inter_y =路口(1);在交点上画一个“X”情节(inter_x inter_y,“y”“线宽”2);文本(inter_x-60 inter_y-30, [sprintf (' % 1.3 f '角),“{\保监会}”],...“颜色”“y”“字形大小”14岁的“FontWeight”“大胆”);interString = sprintf (”(% 2.1 f, % 2.1 f)”、inter_x inter_y);文本(interString inter_x-10 inter_y + 20日,...“颜色”“y”“字形大小”14岁的“FontWeight”“大胆”);

图中包含一个轴。轴包含6个对象类型图像,线,文本。

另请参阅

|||

相关的例子

更多关于