北京市建设教育协会网站首页,dede静态网站模板下载,深圳网络推广平台,wordpress网站代码优化2018年认证杯SPSSPRO杯数学建模
基于轮廓提取与图像配准的零件定位问题研究
C题 机械零件加工过程中的位置识别
原题再现#xff1a; 在工业制造自动生产线中#xff0c;在装夹、包装等工序中需要根据图像处理利用计算机自动智能识别零件位置#xff0c;并由机械手将零件…2018年认证杯SPSSPRO杯数学建模
基于轮廓提取与图像配准的零件定位问题研究
C题 机械零件加工过程中的位置识别
原题再现 在工业制造自动生产线中在装夹、包装等工序中需要根据图像处理利用计算机自动智能识别零件位置并由机械手将零件自动搬运到特定位置。某零件轮廓如图 1 所示图2 表示零件搬运前后的位置示意图。 第二阶段问题 3. 题目给出了未经轮廓提取的原始零件图像数据 (附件 DATA3)请采用或自主设计合适的轮廓提取算法验证前两问中建立的优化模型是否同样适用。 4. 问题 1 至问题 3 讨论的是零件放置于平面的情况。假设零件放置在不平整的表面上请建立有效的数学模型识别不同零件的位置 (开放性问题自主设计)。 整体求解过程概述(摘要) 在本文中我们主要对工业生产中零件的轮廓提取和当零件放置于不平整的表面上时的定位问题进行了研究。 本文的主要创新点首先我们研究了提取零件轮廓的算法提出了通过 Canny 和watershed 算法相结合的适用范围较广并且效果相对较好的轮廓提取算法在三维情况下我们通过将基准图片与实际的图片进行配准并通过基准坐标获取实际坐标的方式在兼顾效率的同时实现了三维空间较好的定位算法。以下是我们主要完成的工作 对于轮廓提取问题需要考虑零件的内部轮廓是否对结果有影响如果没有影响使用 watershed 算法对零件的外部轮廓进行提取当存在影响时则采取改进的 Canny算法同时对内部和外部轮廓进行提取两种方法各有利弊watershed 提取的轮廓信息不全适用领域有限而 Canny 算法提取的零件边缘往往有较多的噪声我们将二者相结合从而实现适用范围更广效果更好的算法。当轮廓提取完成后通过寻找关键点的方式可以计算出零件的坐标以题目中给出的四个齿轮中最大的一个为例由于其本身存在的对称性我们提取其几何中心内部的长方形与其外轮廓一侧的两个交点作为其坐标当移动该齿轮时只需要将这三个点的位置放到目标位置上即可完成操作最终得到的结果为(342, 159), (350, 126), (496.5, 232.0)。 当零件放置于不平整的表面时仅通过一张图片很难得到想要的信息所以要解决这个问题需要至少两张图片通过 SURF 算法对这两张图片进行图像配准并且计算出两张图片中零件的变换矩阵假设对于机械臂所到达的每一个位置我们有其基准的位置坐标通过这些基准坐标加上通过变换所得到的基准图像中的关键点的坐标最终得到目标零件的坐标信息。我们的结果具有较好的泛化能力不仅能处理不考虑高度的二维坐标对于三维坐标也同样适用。 在对模型进行介绍和求解之后我们对其进行了评价分析了其优缺点并对潜在的应用场景进行了探讨。
问题分析 本阶段的题目主要分为两个大问题以及四个子问题首先是在假设平面平整的前提下为所的零件俯视图像中零件的识别与轮廓的提取算法的设计这其中需要预先对图像进行预处理以保证轮廓算法的高效与精准其次是考虑更为复杂的情况即平明不平整的前提下建立数学模型识别不同零件的位置在识别位置之前首先要考虑三维空间转二维空间物体发生的形变并对这种形变进行转换与处理。 问题三的具体分析 问题三给出了一个未经轮廓提取的原始零件图像数据经过图像查看为四个齿轮的图像。与第一阶段的问题一和二中的正方形与三个异构圆孔明显不同虽然齿轮整体是一个对称的零件但是由于其边缘呈现锯齿形状在零件抓取与定位的过程中对齿轮的边缘细节的提取要求较高。 首先需要对图像进行预处理将彩色的图像数据降低维度进而对图像进行灰度及二值换处理。并且需要对图像进行滤波、去噪等预处理以便后期高效的处理。 其次可根据分水岭算法及形态学等对预处理过的图像进行齿轮外轮廓的提取因仅提取齿轮的外轮廓则可进行多种处理。其中需注意因左、上、右三个齿轮咬合较为紧密在数据分割时难免会造成咬合部分轮廓的缺失若发生此类情况需根据齿轮的特性进行整个齿轮外径轮廓的补全。 最后因仅根据外形轮廓无法支持对定位的要求还需要得到内径及孔洞的轮廓数据信息可根据 Canny 算法对整体的所有齿轮的所有孔洞及内外径进行整体的轮廓提取并且将整体轮廓与上一步的加强外径轮廓进行融合将得到非常明显且精准的平面内多零件的整体清晰轮廓图像数据。 问题四的具体分析 问题四的情况则更为复杂因前三个问题均发生在平整平面内即仅 x 与 y的坐标发生位移即仅在二维坐标内发生位移。但如整体的情况为非平整平面则零件会在 z 轴也发生位移即零件会在三维空间内发生位移及旋转。虽然零件在三维空间内发生了旋转但从摄像机的俯视角度仅能看到二维形状发生的形变这将为计算位移与旋转角度带来极大的困难。 因此将采用对空间及尺寸变换不敏感的算法如 surf 算法对基准图像与现有零件放置图像进行图像配准通过两个图像特征值的配准的过程求得三维空间内的转换矩阵由矩阵数据可求得两个零件在三维空间内的相对位移。最终零件当前的位置可由基准位置的坐标及相对位移求得。
模型假设 假设 1附件提供的零件位置数据在可靠条件下获得光照稳定、无明显抖动摄像机摄像效果良好 假设 2零件的结构标准即在单一齿轮中锯齿结构相同 假设 3多个零件在平台上的摆放并没有重叠 假设 4针对问题三情况物体摆放平整且图像数据均为俯视图。 假设 5针对问题四情况物体虽然放置在不平整的平面会发声一定的倾斜但非进行视角转换并未进行轴旋转类空间形变。并且有基准位置的图片库。
论文缩略图 全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码(代码和文档not free)
clear all;
clear
clc;
%读进图像
[filename, pathname] uigetfile({*.jpg; *.bmp; *.gif}, 选择图片);
%没有图像
if filename 0return;
end
imgsrc imread([pathname, filename]);
[y, x, dim] size(imgsrc);
%转换为灰度图
if dim1imgsrc rgb2gray(imgsrc);
end
for i 1:10imgsrc medfilt2(imgsrc);
end
sigma 1;
gausFilter fspecial(gaussian, [3,3], sigma);
img imfilter(imgsrc, gausFilter, replicate);
zz double(img);
%----------------------------------------------------------
%自己的边缘检测函数?
[m theta sector canny1 canny2 bin] canny1step(img, 22);
[msrc thetasrc sectorsrc c1src c2src binsrc] canny1step(imgsrc, 22);
%Matlab 自带的边缘检测?
ed edge(img, canny, 0.5);
[xx, yy] meshgrid(1:x, 1:y);
m uint8(m);
figure(1)imshow(m)imwrite(m, 无二值化.jpg)
m imbinarize(m);
for i 1:2m medfilt2(m);
end
figure(2)imshow(m);imwrite(m, 二值化.jpg)save image.matfunction [ m, theta, sector, canny1, canny2, bin] canny1step( src,
lowTh)
%canny 函数第一步求去 xy 方向的偏导模板如下
% Gx
% 1 -1
% 1 -1
% Gy
% -1 -1
% 1 1
%------------------------------------
% 输入
% src图像如果不是灰度图转成灰度图
% lowTh低阈值
% 输出
% m 两个偏导的平方差反映了边缘的强度
% theta反映了边缘的方向
% sector将方向分为 3 个区域具体如下
% 2 1 0
% 3 X 3
% 0 1 2
% canny1非极大值
% canny2双阈值抑制
% bin 二值化
%---------------------------------------
[Ay Ax dim ] size(src);
%转换为灰度图
if dim1src rgb2gray(src);
end
src double(src);
m zeros(Ay, Ax);
theta zeros(Ay, Ax);
sector zeros(Ay, Ax);
canny1 zeros(Ay, Ax);%非极大值抑制
canny2 zeros(Ay, Ax);%双阈值检测和连接
bin zeros(Ay, Ax);
for y 1:(Ay-1)for x 1:(Ax-1)gx src(y, x) src(y1, x) - src(y, x1) - src(y1, x1);gy -src(y, x) src(y1, x) - src(y, x1) src(y1, x1);m(y,x) (gx^2gy^2)^0.5 ;%--------------------------------theta(y,x) atand(gx/gy) ;
tem theta(y,x);%--------------------------------if (tem67.5)(tem22.5)sector(y,x) 0; elseif (tem22.5)(tem-22.5)sector(y,x) 3; elseif (tem-22.5)(tem-67.5)sector(y,x) 2; elsesector(y,x) 1; end%-------------------------------- end
end
%-------------------------
%非极大值抑制
%------ x
% 2 1 0
% 3 X 3
%y 0 1 2
for y 2:(Ay-1)for x 2:(Ax-1) if 0 sector(y,x) %右上 - 左下if ( m(y,x)m(y-1,x1) )( m(y,x)m(y1,x-1) )canny1(y,x) m(y,x);elsecanny1(y,x) 0;endelseif 1 sector(y,x) %竖直方向if ( m(y,x)m(y-1,x) )( m(y,x)m(y1,x) )canny1(y,x) m(y,x);elsecanny1(y,x) 0;endelseif 2 sector(y,x) %左上 - 右下if ( m(y,x)m(y-1,x-1) )( m(y,x)m(y1,x1) )canny1(y,x) m(y,x);elsecanny1(y,x) 0;end
elseif 3 sector(y,x) %横方向if ( m(y,x)m(y,x1) )( m(y,x)m(y,x-1) )canny1(y,x) m(y,x);elsecanny1(y,x) 0;endend end%end for x
end%end for y
%---------------------------------
%双阈值检测
ratio 2;
for y 2:(Ay-1)for x 2:(Ax-1) if canny1(y,x)lowTh %低阈值处理canny2(y,x) 0;bin(y,x) 0;continue;elseif canny1(y,x)ratio*lowTh %高阈值处理canny2(y,x) canny1(y,x);bin(y,x) 1;continue;else %介于之间的看其 8 领域有没有高于高阈值的有则可以
为边缘tem [canny1(y-1,x-1), canny1(y-1,x), canny1(y-1,x1);canny1(y,x-1), canny1(y,x),
canny1(y,x1);canny1(y1,x-1), canny1(y1,x),
canny1(y1,x1)];temMax max(tem);if temMax(1) ratio*lowThcanny2(y,x) temMax(1);bin(y,x) 1;continue;elsecanny2(y,x) 0;bin(y,x) 0;
continue;endendend%end for x
end%end for y
end%end of function全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可