[Computer Vision] Size of colored Object detected with my algorithm
1 次查看(过去 30 天)
显示 更早的评论
Hi @ all!
I make a code that detects and tracks colored objects. It works quite fine! Anyway I need also to calculate and to store the size of the detected objects for post elaboration (like area, perimeter etc etc) and unfortunately I don't know how to do that! Can someone help me?
There is my code:
redThresh = 0.8; % Threshold for red component of color detection
greenThresh = 0.4; % Threshold for green component of color detection
blueThresh = 0.4; % Threshold for blue component of color detection
vidDevice = imaq.VideoDevice('winvideo', 1, 'YUY2_640x480', ... % Acquire input video stream
'ROI', [1 1 640 480], ...
'ReturnedColorSpace', 'rgb');
vidInfo = imaqhwinfo(vidDevice); % Acquire input video property
hblob = vision.BlobAnalysis('AreaOutputPort', true, ... % Set blob analysis handling
'CentroidOutputPort', true, ...
'BoundingBoxOutputPort', true', ...
'MinimumBlobArea', 400, ...
'MaximumCount', 50);
hshapeinsWhiteBox = vision.ShapeInserter('BorderColor', 'Custom', ...
'CustomBorderColor', [1 0 0]); % Set white box handling
htextins = vision.TextInserter('Text', 'Number of Colored Object(s): %2d', ... % Set text for number of blobs
'Location', [7 2], ...
'Color', [1 1 1], ... // white color
'Font', 'Courier New', ...
'FontSize', 12);
htextinsCent = vision.TextInserter('Text', '+ X:%6.2f, Y:%6.2f', ... % set text for centroid
'LocationSource', 'Input port', ...
'Color', [0 0 0], ... // black color
'FontSize', 12);
hVideoIn = vision.VideoPlayer('Name', 'Final Video', ... % Output video player
'Position', [100 100 vidInfo.MaxWidth+20 vidInfo.MaxHeight+30]);
nFrame = 0; % Frame number initialization
nFrameMax = 1000; % Max frame number to acquire
k = 1;
%%Processing Loop
while(nFrame < nFrameMax)
rgbFrame = step(vidDevice); % Acquire single frame
rgbFrame = flipdim(rgbFrame,2); % obtain the mirror image for displaying
redFrame = rgbFrame(:,:,1); % Red component of RGB Frame
greenFrame = rgbFrame(:,:,2); % Green component of RGB Frame
blueFrame = rgbFrame(:,:,3); % Blue component of RGB Frame
% Loop of Detection based on Thresholds previously defined
for i = 1:480
for j = 1:640
if redFrame(i,j) >= redThresh
redFrameThres(i,j) = 1;
else redFrameThres(i,j) = 0;
end
if greenFrame(i,j) <= greenThresh
greenFrameThres(i,j) = 1;
else greenFrameThres(i,j) = 0;
end
if blueFrame(i,j) <= blueThresh
blueFrameThres(i,j) = 1;
else blueFrameThres(i,j) = 0;
end
end
end
binFrame = redFrameThres & greenFrameThres & blueFrameThres; % get the common region
binFrameMatrix(:,:,k) = binFrame; % Storage of binFrame
[AREA, CENTROID, BBOX] = step(hblob, binFrame); % Get the area, centroids and bounding boxes of the blobs
rgbFrame(1:15,1:215,:) = 0; % put a black region on the output stream
vidIn = step(hshapeinsWhiteBox, rgbFrame, bbox); % Insert the white box
for object = 1:1:length(bbox(:,1)) % Write the corresponding centroids
vidIn = step(htextinsCent, vidIn, [centroid(object,1) centroid(object,2)], [centroid(object,1)-6 centroid(object,2)-9]);
end
vidIn = step(htextins, vidIn, uint8(length(bbox(:,1)))); % Count the number of blobs
step(hVideoIn, vidIn); % Output video stream
nFrame = nFrame+1;
k = k+1;
end
%%Clearing Memory
release(hVideoIn); % Release all memory and buffer used
release(vidDevice);
clear all;
clc;
2 个评论
Image Analyst
2016-11-16
Jennifer, see the Color Thresholder on the Apps tab of the tool ribbon. Or else see my File Exchange for color segmentation demos.
回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image and Video Ground Truth Labeling 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!