Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
clear all
load ('target_image_art'); % 36х26 uint8
% figure, imshow(target_image);
dX = size(target_image,2); 26 pixels
dY = size(target_image,1); 36 pixels
Img_eroding = 100; % average between screen and target intensity
cam = webcam(1);
cam.Resolution = '320x240';
for i = 1:1000
pct = snapshot(cam);
Img=rgb2gray(pct); % rgb in gray
Img_edge_enhacement=imsubtract(Img,Img_eroding); % negative result of subtract is replaced by zero
Img_lgc=logical(Img_edge_enhacement); % '0' if pixel = 0; '1' if pixel > 0
%figure, imshow(Img_lgc);
Img_inv_lgc = not(Img_lgc); % inversion
Img_inv_flt_lgc = bwareaopen(Img_inv_lgc,500); % remove 'island' being less than 500 pixels
Iprops=regionprops(Img_inv_flt_lgc,'BoundingBox','Image'); % find remained 'islands'
% format: Iprops(i).BoundingBox(:) = [X,Y,dX,dY]
obj_num = find(arrayfun(@(x)max(x.BoundingBox(3)),Iprops)< 50 & ... % max(dx)
arrayfun(@(x)min(x.BoundingBox(3)),Iprops)> 10 & ... % min(dx)
arrayfun(@(x)max(x.BoundingBox(4)),Iprops)< 60 & ... % max(dy)
arrayfun(@(x)min(x.BoundingBox(4)),Iprops)> 20); % min(dy)
% display target
if ~isempty(obj_num)
X = Iprops(obj_num(1)).BoundingBox(1);
Y = Iprops(obj_num(1)).BoundingBox(2)+11;
if X+dX < 320 && Y+dY < 240
% target iside the screen
target_area = [X,Y,dX-1,dY-1];
Imf = insertShape(pct, 'Rectangle', target_area, 'Color', 'green');
image(Imf);
else
% target in screen boarder
image(pct);
end
else
% no target found
image(pct);
end
end
clear cam;

Система распознавания отображаемых данных объекта