www.gusucode.com > 基于机器视觉的外螺纹中径参数测量研究 > code3/基于机器视觉的外螺纹中径参数测量研究/luowenzhongjing.m
%因为指定了用canny和霍夫变换,所以没什么好说的,用这些求出所需的数据就行 %因为没要求,就把他当做一个普通螺纹吧,简单化处理 %网上查找到,螺纹中径基本尺寸的计算 =螺纹大径-螺距乘以系数值。系数值取0.6495 %所以求大径,求螺距 %图片尺寸很小,不知道拍摄条件。如打光,工件情况等。 clear all close all clc src=imread('2.png'); % src=rgb2gray(src);%原图是png格式,我另存为的时候转换为三通道bmp格式,所以重新转为灰度图。 src= imcrop(src,[100, 0, 210, 500]); % x坐标 y坐标 宽度 高度。 figure; imshow(src) %显然该图像是背光拍摄。 [rows,cols]=size(src); for i=1:rows for j=1:cols if src(i,j)<30 src(i,j)=255; else src(i,j)=0; end end end %提取边缘 BW=edge(src,'canny','sobel');%基于高斯拉普拉斯算子的检测 f=BW; [H, theta, rho]= hough(f,'RhoResolution', 0.5); %imshow(theta,rho,H,[],'notruesize'),axis on,axis normal %xlabel('\theta'),ylabel('rho'); peak=houghpeaks(H,5); hold on lines=houghlines(f,theta,rho,peak); figure,imshow(f,[]),title('Hough Transform Detect Result'),hold on for k=1:length(lines) xy=[lines(k).point1;lines(k).point2]; plot(xy(:,1),xy(:,2),'LineWidth',4,'Color',[.6 .6 .6]); end %显然 拿到的线段是正确的 %分析:xy=[lines(k).point1;lines(k).point2]; 中的点显然是线段的端点,利用这些段 %就能求出所需数据。 由于客户指定了方法所以才这么做,比这简单的方法多得是。 %调整[H, theta, rho]= hough(f,'RhoResolution', 0.5); 0.5的值,可以获得不同的线段。 %有了各种线段和端点,自然求中径的方法就很多了。 luoju=((lines(1).point1(1,1)-lines(3).point1(1,1))^2+(lines(1).point1(1,2)-lines(3).point1(1,2))^2)^(1/2) P=lines(2).point1; Q1=lines(1).point2; Q2=lines(3).point2; dajing = abs(det([Q2-Q1;P-Q1]))/norm(Q2-Q1) zhongjing=dajing-luoju*0.6945 imshow(lines);