Borrar filtros
Borrar filtros

I need to save centroid coordinates in a video

6 visualizaciones (últimos 30 días)
Havva Jabbar
Havva Jabbar el 19 de Dic. de 2019
Comentada: Image Analyst el 20 de Dic. de 2019
How do I save the coordinates of my centroid as I need to get many coordinates?
a = imaqhwinfo;
%[camera_name, camera_id, format] = getCameraInfo(a);
% Capture the video frames using the videoinput function
% You have to replace the resolution & your installed adaptor name.
vid = videoinput(winvideo, camera_id, format);
% Set the properties of the video object
set(vid, 'FramesPerTrigger', Inf);
set(vid, 'ReturnedColorspace', 'rgb')
vid.FrameGrabInterval = 5;
%start the video aquisition here
start(vid)
% Set a loop that stop after 100 frames of aquisition
while(vid.FramesAcquired<=200)
% Get the snapshot of the current frame
data = getsnapshot(vid);
% Now to track red objects in real time
% we have to subtract the red component
% from the grayscale image to extract the red components in the image.
diff_im = imsubtract(data(:,:,1), rgb2gray(data));
%Use a median filter to filter out noise
diff_im = medfilt2(diff_im, [3 3]);
% Convert the resulting grayscale image into a binary image.
diff_im = im2bw(diff_im,0.18);
% Remove all those pixels less than 300px
diff_im = bwareaopen(diff_im,300);
% Label all the connected components in the image.
bw = bwlabel(diff_im, 8);
% Here we do the image blob analysis.
% We get a set of properties for each labeled region.
stats = regionprops(bw, 'BoundingBox', 'Centroid');
% Display the image
imshow(data)
hold on
%This is a loop to bound the red objects in a rectangular box.
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');
allCentroids = [measurements.Centroid];
centroidX = allCentroids(1:2:end); % Extract x centroids.
centroidY = allCentroids(2:2:end); % Extract y centroids.
end
hold off
end
% Both the loops end here.
% Stop the video aquisition.
stop(vid);
% Flush all the image data stored in the memory buffer.
flushdata(vid);
% Clear all variables
clear all
sprintf('%s','That was all about Image tracking, Guess that was pretty easy :) ')
I want to do so by creating an array. So far I have built on the red object detection code on matlab.

Respuesta aceptada

Image Analyst
Image Analyst el 19 de Dic. de 2019
You don't need to do this:
sprintf('%s','That was all about Image tracking, Guess that was pretty easy :) ')
instead just do this:
sprintf('That was all about Image tracking, Guess that was pretty easy :) \n');
To save the coordinates, you need to index it.
Get rid of this from the loop:
allCentroids = [measurements.Centroid];
centroidX = allCentroids(1:2:end); % Extract x centroids.
centroidY = allCentroids(2:2:end); % Extract y centroids.
Then save allCentroids in a cell array (since it may have a variable number of centroids per frame) right after you call regionprops() on that frame:
stats = regionprops(bw, 'BoundingBox', 'Centroid');
allCentroids{frameNumber} = vertcat(stats.Centroid);
frameNumber = frameNumber + 1;
Make sure you initialize frameNumber before the while loop
frameNumber = 1;
After that, you can do whatever you want, like call save() to store it in a .mat file on disk, or whatever you want.
  2 comentarios
Havva Jabbar
Havva Jabbar el 20 de Dic. de 2019
Thank you so much image analyst. Now, if I want to use the values inside the cell array to do some computation, how can I? What I want to do is detect red points at knee,ankle and hip and calculate angles from it.
Image Analyst
Image Analyst el 20 de Dic. de 2019
You can get the results back out of the cell array like this:
theseCentroids = allCentroids{frameNumber}
Some people in my company are using Cornell University's Open Pose to get angle, location, and distance information from such key locations (jointed locations) on human bodies:
It works remarkably well. I don't know all the implementation details since I've only seen the results, and I haven't done the programming myself.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Specifying Target for Graphics Output en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by