主要内容

交角测量

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

步骤1:加载图像

读到gantrycrane.png画箭头指向两束感兴趣的光束。这是一个用来组装桥梁的龙门起重机的形象。

RGB = imread(“gantrycrane.png”);imshow (RGB)文本(大小(RGB, 2),大小(RGB, 1) + 15,“图片由Jeff Mather提供”...字形大小= 7,HorizontalAlignment =“正确”);line([300 328],[85 103],Color=[1 10]);line([268 255],[85 140],Color=[1 1 0]);文本(150、72、"测量这些横梁之间的角度"颜色=“y”...FontWeight =“大胆”);

图中包含一个axes对象。坐标轴对象包含5个类型的对象,图像,文本,直线。

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

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

您可以使用。%来获得矩形区域的坐标imtool显示的%像素信息Start_row = 34;Start_col = 208;cropRGB = RGB(start_row:163,start_col:400,:);imshow (cropRGB)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

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

步骤3:阈值图像

bwtraceboundary函数期望在二值图像中感兴趣的对象是白色的,因此将图像转换为黑白并获取图像补位。

I = rgb2gray(cropRGB);BW = imbinalize (I);Bw = ~ Bw;imshow (BW)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

第四步:在每个边界上找到初始点

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

要提取较低光束的边缘,请在图像中选择一列并检查它,直到发生从背景像素到目标像素的转换。存储此位置以供以后使用bwtraceboundary例行公事。对另一根光束重复这一步骤,但这次是水平跟踪。

dim = size(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);设置搜索方向为逆时针,以便向下跟踪。边界= 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);

图中包含一个axes对象。坐标轴对象包含3个类型为image, line的对象。

第六步:根据边界调整线条

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

直线的方程是y = [x 1]*[a;b]。你可以在最小二乘意义上求解参数'a'和'b'polyfit

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

第七步:找到交点的角度

用点积来求角度。

Vect1 = [1 ab1(1)];根据直线方程创建一个向量Vect2 = [1 ab2(1)];Dp = dot(vect1, vect2);计算向量长度Length1 =√(sum(vect1.^2));Length2 =√(sum(vect2.^2));获得较大的交角,单位为度。角= 180-acos(dp/(length1*length2))*180/pi
角度= 129.4971

第八步:找到交点

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

交集= [1,-ab1(1);1, -ab2(1)] \ [ab1(2);ab2 (2)];应用偏移量以计算原始文件中的位置未裁剪图像%交集=交集+[偏移量;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);text(inter_x-10, inter_y+20, interString,...颜色=“y”字形大小= 14日,FontWeight =“大胆”);

图中包含一个axes对象。坐标轴对象包含图像、直线、文本类型的6个对象。

另请参阅

|||

相关的例子

更多关于