目的:
基于matlab对如下图片中的几个角度进行提取。
程序思路:
首先要对图像进行预处理,包括导入matlab,二值化,以及边缘提取。
边缘提取选取现在公认效果比较好的canny算子。Matlab提供霍夫变换函数用于提取二值图像中的直线,可以直接采取这个函数。先打印出这个函数,看一下效果。而后在图像中重复打印出霍夫函数所识别出来的直线。我们能看到霍夫函数识别出了7条直线,右上角的直线并没有被识别,可见霍夫函数还是有一定局限性。采用断电的方法可以看出直线的顺序。根据霍夫函数工具箱自己定义的角度正方向,计算出三个角度值。
Matlab代码如下:
pic=imread('钻石角度测量.bmp'); %读取图片
subplot(2,3,1);
imshow(pic);%展示读取到的图片
bw=im2bw(pic);%将图片二值化
subplot(2,3,2);
imshow(bw);%展示二值化后的图片
bw1=edge(bw,'canny');%对二值化的图片边缘提取
subplot(2,3,3);
imshow(bw1);%展示边缘提取后的图片
[H,T,R]=hough(bw1,'ThetaResolution',0.01);%以角度分辨率0.01进行霍夫函数的调用
subplot(2,3,4);
imshow(H,[],'XData', T,'YData',R,'InitialMagnification','fit');%打印霍夫曼函数看看效果
hold on
f=houghpeaks(H,8);%选出直线拟合值最高的八个值
x=T(f(:,2));
y=R(f(:,1));
plot(x,y,'s','color','r');%在霍夫函数中画出这五个值
lines=houghlines(bw1,T,R,f);
subplot(2