激光十字光斑中心位置的定位.docx
《激光十字光斑中心位置的定位.docx》由会员分享,可在线阅读,更多相关《激光十字光斑中心位置的定位.docx(16页珍藏版)》请在冰豆网上搜索。
激光十字光斑中心位置的定位
激光十字光斑中心位置的定位
摘要:
数字图像处理(DigitalImageProcessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
数字图像处理技术已经在各个领域上都有了比较广泛的应用。
图像处理的信息量很大,对处理速度的要求也比较高。
Matlab强大的运算和图形展示功能,使图像处理变得更加的简单和直观。
确定激光十字光斑的中心位置可采用多种方法,本文论述了三种方法确定十字光斑中心点分别为:
调用多重函数法、FOR循环寻找坐标取平均值法、求两直线交点坐标法。
文中对每种方法作了简要的介绍和分析。
通过处理结果对三种方法做出了综合评价。
关键词:
数字图像处理,Matlap,十字光斑,中心定位
第一章调用多重函数实现中心点定位……………………………………………………………………3
1.1基本流程.…………………………………………………………………………………………3
1.2程序设计……………………………………………………………………………………………3
1.3显示结果分析………………………………………………………………………………………4
第二章通过FOR循环寻找坐标取平均值实现中心点定位………………………………………………5
2.1基本流程……………………………………………………………………………………………5
2.2程序设计……………………………………………………………………………………………5
2.3显示结果分析.………………………………………………………………………………………6
第三章通过计算两直线交点坐标实现中心点定位………………………………………………………7
3.1基本流程……………………………………………………………………………………………7
3.2程序设计……………………………………………………………………………………………8
3.3显示结果分析………………………………………………………………………………………9
第四章三种方法的综合评价………………………………………………………………………………9
4.1处理速度……………………………………………………………………………………………9
4.2结果精度……………………………………………………………………………………………10
第五章心得体会……………………………………………………………………………………………10
第六章参考文献……………………………………………………………………………………………11
第一章调用多重函数实现中心点定位
1.1基本流程
调用函数实现中心点定位的基本流程图:
将读取的图像转化为二值图像
将二值图像反色
↓
通过bwlable函数计算图像矩阵的连通区域,并对连通区域进行标注
↓
↓
通过regionprops函数对标注矩阵中每一个标注区域进行测量和计算
↓
将计算出的矩形区域像素总数,包含被标注区域的最小矩形boundingbox的长宽值,左上角的横纵坐标值以及被标注区域的数量分别放入自定义的矩阵中
↓
通过已知的坐标值和矩形boundingbox的长宽值计算出四个矩阵中靠近十字中心的坐标值
↓
对计算出的坐标值取平均值,所求的坐标即为十字光斑中心点的位置
1.2程序设计
A=imread('111.jpg');%读取111.jpg图片
B1=im2bw(A);%转化成二值图像
B=~B1;%反色,目的是下面的函数只计算白色矩形方框
L=bwlabel(B);%计算图像矩阵的连通区域
sta=regionprops(L,'Area','BoundingBox');
area=[sta.Area];%把原图中每个白点的个数记录在area中
boundingbox=[sta.BoundingBox];%把BoundingBox的内容存放在boudingbox中;
num=size(area);%计算中共的数目
answer(1,1:
num
(2))=boundingbox(1:
4:
end);%第一行存放每个白色区域左上角的X坐标
answer(2,1:
num
(2))=boundingbox(2:
4:
end);%第二行存放每个白色区域左上角的Y坐标
answer(3,1:
num
(2))=boundingbox(3:
4:
end);%第三行存放每个白色区域X轴的宽度
answer(4,1:
num
(2))=boundingbox(4:
4:
end);%第三行存放每个白色区域Y轴的宽度
answer(5,1:
num
(2))=area(1:
end);%第五行存放每个色白区域的面积
c(1,1)=answer(1,4);c(1,2)=answer(2,4);
c(1,3)=(answer(1,2)+answer(3,2));c(1,4)=(answer(2,3)+answer(4,3));
D(1,1)=rdivide(c(1,1)+c(1,3),2);D(1,2)=rdivide(c(1,2)+c(1,4),2)
fprintf('十字中心位置叉丝线横坐标%6.2f\n',D(1,1));
fprintf('十字中心位置叉丝线纵坐标%6.2f\n',D(1,2));
1.3显示结果及分析
程序运行后现实的结果为:
“十字中心位置叉丝线横坐标158.50”
“十字中心位置叉丝线纵坐标151.50”
通过程序
>>E=rgb2gray(A);
E(151:
152,158:
159)=0;
>>imshow(E);
显示图像如图1-2
图1-1原图像图1-2处理后光斑显示图像
由图1-2观察得中央黑点位置即为十字中心位置。
第二章通过FOR循环寻找坐标取平均值实现中心点定位
2.1基本流程
FOR循环寻找坐标取平均值实现中心点定位基本流程图
将读取的图像转化为二值图像
↓
通过FOR循环分别找出第一行,最后一行,第一列,最后压一列,值为1的像素的坐标值
↓
对第一行值为1的像素所在列数进行记录,并取平均值,即为十字最上方的横坐标,同理对待最后一行,求得十字最下方的横坐标;对第一列值为1的像素所在行数进行记录,并取平均值,即为十字最左方的纵坐标,同理对待最后一列,求得十字最右方的纵坐标
↓
对最上方与最下方的横坐标取平均值,即为中心点的横坐标;对最左方与最右方的纵坐标取平均值,即为中心点的纵坐标
2.2程序设计
I=imread('111.jpg');
I=rgb2gray(im2double(I))
B=imadjust(I,stretchlim(I),[0,1]);
[M,N]=size(B);
k=1;
fori=1:
M
if(B(i,1)==1)
m(k)=i;
k=k+1;
end
end
z=1;
foro=1:
M
if(B(o,M)==1)
m1(z)=o;
z=z+1;
end
end
n=1;
forj=1:
N
if(B(1,j)==1)
p(n)=j;
n=n+1;
end
end
q=1;
forh=1:
N
if(B(M,h)==1)
p1(q)=h;
q=q+1;
end
end
x(1,1)=mean(p);
x(1,2)=1;
x(2,1)=mean(p1);
x(2,2)=M;
x(3,1)=1;
x(3,2)=mean(m);
x(4,1)=N;
x(4,2)=mean(m1);
c(1,3)=(x(1,1)+x(2,1));c(1,4)=(x(3,2)+x(4,2));
D(1,1)=rdivide(c(1,1)+c(1,3),2);D(1,2)=rdivide(c(1,2)+c(1,4),2)
fprintf('十字中心位置叉丝线横坐标%6.2f\n',D(1,1));
fprintf('十字中心位置叉丝线纵坐标%6.2f\n',D(1,2));
2.3显示结果及分析
程序运行后显示的结果为:
“十字中心位置叉丝线横坐标159.50”
“十字中心位置叉丝线纵坐标149.50”
通过程序
>>B(149:
150,159:
160)=0;
>>imshow(B);
显示图像如图2-2
图2-1原图像图2-2处理后定位图像
由图2-2观察中央黑点即为定位的中心位置。
第三章通过计算两直线交点坐标实现中心点定位
3.1基本流程
此方法中需用到第二章FOR循环寻找坐标的方法,通过坐标确定两直线,进而求得两直线交点。
计算两直线交点坐标实现中心点定位基本流程图
将读取的图像转化为二值图像
↓
通过FOR循环分别找出第一行,最后一行,第一列,最后压一列,值为1的像素的坐标值
↓
对第一行值为1的像素所在列数进行记录,并取平均值,即为十字最上方的横坐标,同理对待最后一行,求得十字最下方的横坐标;对第一列值为1的像素所在行数进行记录,并取平均值,即为十字最左方的纵坐标,同理对待最后一列,求得十字最右方的纵坐标
↓
通过最上方点的坐标与最下方点的坐标确定了直线1,通过最左方与最右方的坐标确定了直线2
↓
有直线1和直线2的直线方程,求得两直线的交点坐标,即为十字中心点的位置
3.2程序设计
I=imread('111.jpg');
I=rgb2gray(im2double(I))
B=imadjust(I,stretchlim(I),[0,1]);
[M,N]=size(B);
k=1;
fori=1:
M
if(B(i,1)==1)
m(k)=i;
k=k+1;
end
end
z=1;
foro=1:
M
if(B(o,M)==1)
m1(z)=o;
z=z+1;
end
end
n=1;
forj=1:
N
if(B(1,j)==1)
p(n)=j;
n=n+1;
end
end
q=1;
forh=1:
N
if(B(M,h)==1)
p1(q)=h;
q=q+1;
end
end
x(1,1)=mean(p);
x(1,2)=1;
x(2,1)=mean(p1);
x(2,2)=M;
x(3,1)=1;
x(3,2)=mean(m);
x(4,1)=N;
x(4,2)=mean(m1);
K(1,1)=(x(1,2)-x(2,2))/(x(1,1)-x(2,1));
K(1,2)=(x(4,2)-x(3,2))/(x(4,1)-x(3,1));
Del(1,1)=(x(3,2)-x(1,2)+K(1,1)*x(1,1)-K(1,2)*x(3,1))/(K(1,1)+K(1,2));
Del(1,2)=(K(1,1)*K(1,2)*(x(3,1)-x(1,1))+K(1,2)*x(1,2)-K(1,1)*x(3,2))/(K(1,2)-K(1,1));
fprintf('十字中心位置叉丝线横坐标%6.2f\n',Del(1,1));
fprintf('十字中心位置叉丝线纵坐标%6.2f\n',Del(1,2));
3.3显示结果分析
“十字中心位置叉丝线横坐标159.44”
“十字中心位置叉丝线纵坐标149.56”
通过程序
>>B(149:
150,159:
160)=0;
>>imshow(B);
显示图像如图3-2
图3-1原图像图3-2处理后的定位图像
图3-2中中央黑点即为十字中心点的位置。
第四章三种方法的综合评价
4.1处理速度
在实际操作的过程中,人为感觉,调用函数的方法较其它两种方法的处理速度要稍快些,而计算两直线交点的方法较慢。
4.2结果精度
将图1-2,图2-2,图3-2放大,分别显示为图4-1,图4-2,图4-3
图4-1第一种方法放大图图4-2第二种方法放大图
图4-3第三种方法放大图
通过分析上述三幅图,图4-1较为精确,而图4-2与图4-3黑点位置几乎完全一致,精度一致。
第五章心得体会
在这次数字图像处理的课程设计过程中,首先加深了我对于数字图像处理这门课程的认识,通过对相关知识的进一步了解和掌握,清楚的认识到这门课程在实际应用的广泛性。
通过Matlab编程的过程之中,进一步掌握了Matlab的使用,明白了这个软件作为许多应用方向工具的强大之处,通过对一些小错误的改造还认识到了以往自己没有注意到的一些小的细节问题。
参考文献
1.张汗灵·MATLAB在图像处理中的应用·清华大学出版社,2008·5引用部分51页-56页,61页-66页
2.张德丰·详解MATLAB数字图像处理·电子工业出版社,2010·7引用部分1页-31页,33页—38页,138页-140页
3.闫敬文·数字图像处理·(MATLAB版)·国防工业出版社,2002·2引用部分233页-241页