how to find robocup`s ball?

1 次查看(过去 30 天)
hi guys, this is my first project in matlab can anyone help me with this? I am trying to find robocup`s ball. because it is orange , so I separated this color and after that test if it is round or not...
rgb = imread('E:/robot4.jpg');
imshow(rgb);
hsv=rgb2hsv(rgb);
h=hsv(: , : ,1);
s=hsv(: , : ,2);
v=hsv( : , : ,3);
bw= (h>0.05 & h<0.12) & (s>0.6) & (v> 0.51);
imagesc(bw)
colormap(gray)
se = strel('disk',2);
bw = imclose(bw,se);
bw = imfill(bw,'holes');
imshow(bw)
ball1 = bwareaopen(bw, 50);
imagesc(ball1);
[B,L] = bwboundaries(ball1,'noholes');
stats = regionprops(L,'Area','perimeter');
for k = 1:length(B)
area = stats(k).Area;
s=stats(k).Perimeter;
end
metric=s^2/(4*pi*area);
if (metric>0.8)
stat = regionprops(ball1,'centroid');
imshow(rgb); hold on;
for x = 1: numel(stat)
plot(stat(x).Centroid(1),stat(x).Centroid(2), 'wp','MarkerSize',20,'MarkerFaceColor','b');
end
end
this shows every orange things and also ball !!! I guess it has problem in calculating perimeter, but I dont know how can I solve it

采纳的回答

Jeff E
Jeff E 2014-1-8
You're going about calculating perimeter in a roundabout fashion. Matlab can convert a specific part of a structure, in your case all the perimeter values from regionprops, to an array. As an added bonus, their order in the array corresponds to the labeled matrix image created by bwlabel/regionprops. You'll want to use bwlabel instead of bwboundaries. The below shows how to perform a simple property check on all the objects in an image, and keep on only those that pass using ismember.
lab = bwlabel(ball1);
s = regionprops(lab, 'Area', 'Perimeter');
sArea = [s.Area];
sPerim= [s.Perimeter];
idx = find((sArea ./ sPerim) < 8);
gr_fin = ismember(lab, idx);

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by