视觉测量实验报告.docx

上传人:b****2 文档编号:25881046 上传时间:2023-06-16 格式:DOCX 页数:12 大小:42.97KB
下载 相关 举报
视觉测量实验报告.docx_第1页
第1页 / 共12页
视觉测量实验报告.docx_第2页
第2页 / 共12页
视觉测量实验报告.docx_第3页
第3页 / 共12页
视觉测量实验报告.docx_第4页
第4页 / 共12页
视觉测量实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

视觉测量实验报告.docx

《视觉测量实验报告.docx》由会员分享,可在线阅读,更多相关《视觉测量实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

视觉测量实验报告.docx

视觉测量实验报告

 

实验报告

 

实验名称典型零件尺寸的图像处理与视觉测量

专业班级测控

学号2009013003

姓名侯爵

指导教师刘力双

实验目的:

通过本实验,给学生提供边学习边实践的机会,应用平时所学的知识,通过一些编程软件处理一些图像,观察处理之后的效果,可以巩固所学知识,提高学生的动手能力和编程水平。

实验要求:

已修过《数字图像处理》和《视觉测量技术》课程。

实验报告要求:

每人提交一份电子版实验报告,报告内容包括:

封皮,实验要求,实验思路和过程,实验结果,实验遇到的问题及解决方法,附上程序。

实验内容:

采用MATLAB或VC++编制程序,实现图像中尺寸参数的测量。

必做:

(1)求图1中直线的参数方程,按照y=kx+b的形式给出。

(难度:

**)(思路:

先提取出边缘点,然后用边缘点拟合直线)

图1求出图中直线的参数

clc;

clear;

closeall;

I=imread('straight_line.jpg');%读取图像

I1=im2double(I);%将彩图序列变成双精度

I2=rgb2gray(I1);%将彩色图变成灰色图

[thr,sorh,keepapp]=ddencmp('den','wv',I2);

I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp);%小波除噪

%I4=medfilt2(I3,[99]);%中值滤波

%I5=imresize(I4,0.3,'bicubic');%图像大小

%I6=imresize(I2,0.3,'bicubic');%图像大小

BW1=edge(I3,'sobel');%sobel图像边缘提取

[y,x]=find(BW1);

m=polyfit(x,y,1);

yy=polyval(m,x);

%k=(yy

(1)-m)/x

(1);

func=['y=',num2str(m

(2)),'+',num2str(m

(1)),'*x'];

subplot(1,2,1);%图划分为一行三幅图,第一幅图

imshow(I2);%绘图

title('原始图像');%标注

subplot(1,2,2);%第二幅图

imshow(I3);title('消噪后图像');

%subplot(1,3,3);%第三幅图

%imshow(I4);title('中值滤波图像');

figure;生成窗口

subplot(1,2,1);

imshow(BW1);

title('Sobel算子');

subplot(1,2,2);

imshow(I3);

holdon;

plot(x,yy,'r-','linewidth',2);

xlabel('x');

ylabel('y');

text(x

(2),yy

(1)+5,func);

title('拟合直线');%标注

(2)按照拟合法求图2中圆的参数,即给出圆心位置和半径。

(难度:

**)(思路:

先提取出边缘点,然后用边缘点拟合圆)

图2求出图中圆的圆心位置和半径

clc;

clear;

closeall;

I=imread('circle.jpg');%读取图像

I1=im2double(I);%将彩图序列变成双精度

I2=rgb2gray(I1);%将彩色图变成灰色图

[thr,sorh,keepapp]=ddencmp('den','wv',I2);

I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp);%小波除噪

BW1=edge(I3,'sobel');%sobel图像边缘提取

[y,x]=find(BW1);

subplot(1,2,1);%图划分为一行三幅图,第一幅图

imshow(I2);%绘图

title('原始图像');%标注

subplot(1,2,2);%第二幅图

imshow(I3);title('消噪后图像');

figure;生成窗口

subplot(1,2,1);

imshow(BW1);

title('Sobel算子');

N=length(x);

x1=0;

x2=0;

x3=0;

y1=0;

y2=0;

y3=0;

x1y1=0;

x1y2=0;

x2y1=0;

fori=1:

N

x1=x1+x(i);

x2=x2+x(i)*x(i);

x3=x3+x(i)*x(i)*x(i);

y1=y1+y(i);

y2=y2+y(i)*y(i);

y3=y3+y(i)*y(i)*y(i);

x1y1=x1y1+x(i)*y(i);

x1y2=x1y2+x(i)*y(i)*y(i);

x2y1=x2y1+x(i)*x(i)*y(i);

end

C=N*x2-x1*x1;

D=N*x1y1-x1*y1;

E=N*x3+N*x1y2-(x2+y2)*x1;

G=N*y2-y1*y1;

H=N*x2y1+N*y3-(x2+y2)*y1;

a=(H*D-E*G)/(C*G-D*D);

b=(H*C-E*D)/(D*D-G*C);

c=-(a*x1+b*y1+x2+y2)/N;

A=a/(-2);%x坐标

B=b/(-2);%y坐标

R=sqrt(a*a+b*b-4*c)/2;

subplot(1,2,2);

imshow(I3);

holdon;

X=(A-R):

0.1:

(A+R);

fori=1:

(2*10*R+1);

Ya(i)=sqrt(R^2-(X(i)-A)^2)+B;

Yb(i)=-sqrt(R^2-(X(i)-A)^2)+B;

end

a=length(X);

fori=1:

a

xx(i)=X(a+1-i);

yy(i)=Yb(a+1-i);

end

X=[Xxx];

Y=[Yayy];

plot(X,Y,'r-','linewidth',2);

func=[num2str(R),'^2=(x-',num2str(A),')^2+(y-',num2str(B),')^2'];

text(5,140,func);

text(5,155,['R=',num2str(R)]);

text(5,170,['圆心坐标(',num2str(A),',',num2str(B),')']);

xlabel('x');

ylabel('y');

title('拟合圆');

(3)按照拟合法求图3中圆弧的参数,即给出圆心位置和半径。

(难度:

**)(思路:

先提取出边缘点,然后用边缘点拟合圆)

图3求出图中圆弧的圆心位置和半径

clc;

clear;

closeall;

I=imread('half_circle.jpg');%读取图像

I1=im2double(I);%将彩图序列变成双精度

I2=rgb2gray(I1);%将彩色图变成灰色图

[thr,sorh,keepapp]=ddencmp('den','wv',I2);

I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp);%小波除噪

BW1=edge(I3,'sobel');%sobel图像边缘提取

[y,x]=find(BW1);

subplot(1,2,1);%图划分为一行三幅图,第一幅图

imshow(I2);%绘图

title('原始图像');%标注

subplot(1,2,2);%第二幅图

imshow(I3);title('消噪后图像');

figure;

subplot(1,2,1);

imshow(BW1);

title('Sobel算子');

N=length(x);

x1=0;

x2=0;

x3=0;

y1=0;

y2=0;

y3=0;

x1y1=0;

x1y2=0;

x2y1=0;

fori=1:

N

x1=x1+x(i);

x2=x2+x(i)*x(i);

x3=x3+x(i)*x(i)*x(i);

y1=y1+y(i);

y2=y2+y(i)*y(i);

y3=y3+y(i)*y(i)*y(i);

x1y1=x1y1+x(i)*y(i);

x1y2=x1y2+x(i)*y(i)*y(i);

x2y1=x2y1+x(i)*x(i)*y(i);

end

C=N*x2-x1*x1;

D=N*x1y1-x1*y1;

E=N*x3+N*x1y2-(x2+y2)*x1;

G=N*y2-y1*y1;

H=N*x2y1+N*y3-(x2+y2)*y1;

a=(H*D-E*G)/(C*G-D*D);

b=(H*C-E*D)/(D*D-G*C);

c=-(a*x1+b*y1+x2+y2)/N;

A=a/(-2);%x坐标

B=b/(-2);%y坐标

R=sqrt(a*a+b*b-4*c)/2;

subplot(1,2,2);

imshow(I3);

holdon;

X=(A-R):

0.1:

(A+R);

fori=1:

(2*10*R+1);

Ya(i)=sqrt(R^2-(X(i)-A)^2)+B;

Yb(i)=-sqrt(R^2-(X(i)-A)^2)+B;

end

a=length(X);

fori=1:

a

xx(i)=X(a+1-i);

yy(i)=Yb(a+1-i);

end

X=[Xxx];

Y=[Yayy];

plot(X,Y,'r-','linewidth',2);

func=[num2str(R),'^2=(x-',num2str(A),')^2+(y-',num2str(B),')^2'];

text(5,205,func);

text(5,225,['R=',num2str(R)]);

text(5,247,['圆心坐标(',num2str(A),',',num2str(B),')']);

xlabel('x');

ylabel('y');

title('拟合圆弧');

(4)求图4中光斑的参数,即给出光斑中心和光斑大小。

(难度:

**)(思路:

采用重心法计算光斑中心,然后采用二阶矩法计算光斑大小)

图4求出图中光斑的中心和大小

clc;

clear;

closeall;

I=imread('light_spot.jpg');%读取图像

I1=im2double(I);%将彩图序列变成双精度

I2=rgb2gray(I1);%将彩色图变成灰色图

[thr,sorh,keepapp]=ddencmp('den','wv',I2);

I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp);%小波除噪

subplot(1,2,1);%图划分为一行三幅图,第一幅图

imshow(I2);%绘图

title('原始图像');%标注

subplot(1,2,2);%第二幅图

imshow(I3);title('消噪后图像');

[a,b]=size(I3);

x=1:

b;

fori=1:

a

X(i,:

)=x;

end

y=1:

a;

y=y';

forj=1:

b

Y(:

j)=y;

end

A=I3.*X;

B=I3.*Y;

A_SUM=sum(A);

B_SUM=sum(B);

C_SUM=sum(I3);

Xc=A_SUM/C_SUM

Yc=B_SUM/C_SUM

J=I3.*((X-Xc).^2);

K=I3.*((Y-Yc).^2);

J_SUM=sum(J);

K_SUM=sum(K);

ox=sqrt(J_SUM/C_SUM);

oy=sqrt(K_SUM/C_SUM);

Wx=2*ox;

Wy=2*oy;

R=(Wx+Wy)/2;

Xt=(Xc-R):

0.1:

(Xc+R);

fori=1:

(2*10*R+1);

Ya(i)=sqrt(R^2-(Xt(i)-Xc)^2)+Yc;

Yb(i)=-sqrt(R^2-(Xt(i)-Xc)^2)+Yc;

end

a=length(Xt);

fori=1:

a

xx(i)=Xt(a+1-i);

yy(i)=Yb(a+1-i);

end

XX=[Xtxx];

YY=[Yayy];

figure;

subplot(1,2,1);

imshow(I3);

holdon;

plot(XX,YY,'r-','linewidth',2);

func=[num2str(R),'^2=(x-',num2str(Xc),')^2+(y-',num2str(Yc),')^2'];

text(250,20,func);

text(250,40,['R=',num2str(R)]);

text(250,60,['圆心坐标(',num2str(Xc),',',num2str(Yc),')']);

xlabel('x');

ylabel('y');

title('由所求参数得到的圆');

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1