一、效果展示
① 水果分拣系统仿真环境初始状态
②GUI的界面
此界面是在之前做的六轴机械臂操作界面加上的,图个方便,所以这里显得比较突兀!
③分拣结果
二、系统流程图
①前处理
②成熟度检测(通过颜色简单检测)
③果径检测
一可以利用采集到的边缘像素点信息,以某固定点与其他点分别进行比较获得其两者间位置最大的点,两者的距离最大者为判断该水果尺寸的信息。如图3-4所示,最长像素间距判断 。二是利用regionprops函数中的“Area”属性直接计算各个目标的面积值,后通过设定的范围,进行判断分选。
④位置确定(此方法简单映射)
并未进行准确的标定,这里只是简单的利用重心的方法确定位置。
三、代码
matlab部分
主要代码:
img = handles.img;
%% 水果的分拣系统
% img = imread('Orange_g.png');
mdl_puma560;
im = imresize(img,[300 300]);
im1 = rgb2gray(im);
%figure;
%imshow(im1);
e = edge(im1,'canny',0.3);%0.52
%figure('name','边缘检测')
Iprops=regionprops(e,'BoundingBox','Area', 'Image','Centroid');
I=Iprops(1).Centroid
% hold on;
%imshow(e);
[m n] = size(e);
i1 = 0;j1=0;
for i = 1:m
for j = 1:n
if(e(i,j)==1)
k2=e(i,j);
i1=i;
j1=j;
break
end
end
break
end
k=1;k1=1;
for i=1:m
for j=1:n
if(e(i,j)==1)
disi(k)=abs(i-i1);
disi(k1)=abs(j-j1);
k=k+1;
k1=k1+1;%当像素是白色时,该位置减去白色像素的其他位置
end
end
end
maxi=max(disi);
imagesc(im(:,:,1));
r1=im(:,:,1);
g1=im(:,:,2);
b1=im(:,:,3);
m1=mean2(g1);
m2=mean2(r1);
m3=mean2(b1);
r2 = m2/(m1+m2+m3);%返回彩色图像的强度值,并计算平均值
c=0;
if(r2>0.4)%0.4是为红色亮度设置的阈值
c = 1;
end
全部代码较多,如有需要再行发布!