필터 지우기
필터 지우기

[Computer Vision] Size of colored Object detected with my algorithm

조회 수: 1 (최근 30일)
Marco Lacitignola
Marco Lacitignola 2013년 7월 30일
댓글: Image Analyst 2016년 11월 16일
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
JENNIFER JACOB
JENNIFER JACOB 2016년 11월 14일
how did u find the exact threshold values for these colors?
Image Analyst
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개)

Iain
Iain 2013년 7월 30일
have a look at regionprops.

카테고리

Help CenterFile 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!

Translated by