1、 MATLAB目的 : 检测下列图像的白色区域和红色区域的边缘,并计算其角度和距离。 1) 利用烟草包装纸、基准线以及传送带三者之间的特性,首先将高速相机拍摄到的图片进行红色通道分离。 2) 将通道分离后的图片进行二值化,得到二值图像 3) 将所得到的二值图像进行边缘检测 4) 将 边缘检测后的 图像先腐蚀运算,再进行膨胀运算,得到最终 图像 5) 将图 8最终得到的两条边界线使用 MATLAB进行最小二乘法拟合,分别得到两条边界线的关系式,并使用数学方法计算出两条边界线的角度以及图像最左端的直线距离。 此例中,计算得到的两边沿的偏离角大小为 3.15,两边沿最左端距离大小为 303.51像素
2、。 clear clc image=imread(Image.jpg); %读取图片 imtool(image); %显示所读取的图片 imager = image(:,:,1); %提取图片红色通道 imtool(imager); BW = im2bw(imager,0.15); %二值化 BW = BW; imtool(BW); BW1 = edge(BW,canny,0.95); %检测边缘 imtool(BW1); se1 = strel(line,9,176); %腐蚀 IM1 = imerode(BW1,se1); imtool(IM1); se2 = strel(line,60,
3、176); %膨胀 IM2 = imdilate(IM1,se2); imtool(IM2); a,b=size(IM2); h,w=find(IM2=1); %筛选边界点,像素值为 1 yx=h,w; yx_size = size(yx); %像素点坐标对数 %数据筛选出上下边界线以供拟合 p=1;q=1; for k=1:yx_size(1,1) if(yx(k,1)=600) yx1(p,:) = yx(k,:); p = p+1; else yx2(q,:) = yx(k,:); q = q+1; end end yx1_c1 = yx1(:,1); yx1_c2 = yx1(:,2)
4、; yx2_c1 = yx2(:,1); yx2_c2 = yx2(:,2); %绘制分离边界的像素点 plot(w,h,r.) axis(0 b 0 a); hold on %绘制拟合的直线 xy1=polyfit(yx1_c2,yx1_c1,1); plot(1:b,polyval(xy1,1:b),b-) axis(0 b 0 a); hold on xy2=polyfit(yx2_c2,yx2_c1,1); plot(1:b,polyval(xy2,1:b),y-) axis(0 b 0 a); hold on %计算两直线的夹角 angle_xy = 180*atan( abs(xy2(1,1)-xy1(1,1)/(1+xy1(1,1)*xy2(1,1) )/pi %角度 %计算最左端的距离,以像素点为单位 dist_xy = polyval(xy1,0)-polyval(xy2,0)