Find the centroid of images after real time tracking.

2 vues (au cours des 30 derniers jours)
Emmanuel
Emmanuel le 10 Mai 2014
Commenté : Image Analyst le 12 Mai 2014
Hello! I would like to find the centroid formed by three markers (red colored) after tracking them. I got the available code that plots the x,y co-ords of each of these markers successfully. I have added a loop to calculate the mean of these co-ordinates to find the centroid formed by these three markers. I am not able to plot it plzz help!
imaqreset
vid = videoinput('winvideo',1,'MJPG_640x360');
set(vid,'FramesPerTrigger',Inf);
set(vid, 'ReturnedColorSpace','rgb');
vid.FrameGrabInterval =5; x=0; y=0; mx=0; my = 0;
start(vid);
while (vid.FramesAcquired<=200)
data = getsnapshot(vid);
diff = imsubtract(data(:,:,1),rgb2gray(data));
diff = medfilt2(diff, [3 3]);
diff = im2bw(diff, 0.18);
diff = bwareaopen(diff , 300);
bw = bwlabel(diff , 8);
stats = regionprops(bw, 'BoundingBox', 'Centroid');
imshow(data)
hold on
for object = 1:length(stats)
bb = stats(object).BoundingBox;
bc = stats(object).Centroid;
rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
plot(bc(1),bc(2), '-m+')
a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2)))));
set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow');
x = x + round(bc(1));
y = y + round(bc(2));
mx = x/3;
my = y/3;
b = text(mx , my , strcat('XC:',round(mx) , 'XY:',round(my))); set(b, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 16, 'Color', 'white');
end
hold off
end

Réponse acceptée

Image Analyst
Image Analyst le 10 Mai 2014
You don't need a loop to find the means of the blobs. You can do it this way
centroids = [stats.Centroid]; % Make into 2 D array.
xCentroids = mean(centroids(:,1)); % Get x centroid for every blob, if you need that.
yCentroids = mean(centroids(:,2)); % Get y centroid for every blob, if you need that.
% Get mean of all the blobs
meanX = mean(xCentroids);
meanY = mean(yCentroids);
Of course if you want to plot blob-specific things like the bounding box, centroid, a text label, etc., then that part needs to be in a loop. You can use xCentroids and yCentroids inside the loop (if you do the above code before the loop starts) to make it simpler.
  3 commentaires
Image Analyst
Image Analyst le 12 Mai 2014
Lekha's "Answer" moved here since it's not an answer to the original question:
And I tried this out , but its showing the same value of a x,y co-ordinate of the object and not the mean of three co-ords
Image Analyst
Image Analyst le 12 Mai 2014
It will plot those individual coordinates unless you delete the call to plot that plots them. Did you put in a call to plot(xMean, yMean)? It won't show that unless you explicitly call plot to tell it to show the centroid.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by