基于MATLAB的图像边缘提取并计算其角度和距离
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB
目的:检测下列图像的白色区域和红色区域的边缘,并计算其角度和距离。
1)利用烟草包装纸、基准线以及传送带三者之间的特性,首先将高速相机拍摄到的图片进
行红色通道分离。
2)将通道分离后的图片进行二值化,得到二值图像
3)将所得到的二值图像进行边缘检测
4)将边缘检测后的图像先腐蚀运算,再进行膨胀运算,得到最终图像
5)将图8最终得到的两条边界线使用MATLAB进行最小二乘法拟合,分别得到两条边界线
的关系式,并使用数学方法计算出两条边界线的角度以及图像最左端的直线距离。
此例中,计算得到的两边沿的偏离角大小为3.15°,两边沿最左端距离大小为303.51像素。
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,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);
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)。