В этом примере показано, как найти центроид, периметр и координаты ограничительной рамки круговых блобов в изображении при помощи Blob
Analysis
блок. Модель также выводит матрицу метки для ссылки.
Считайте изображение в рабочее пространство MATLAB.
I = imread('coins.png');
Загрузите бинарную маску, содержащую блобы, которые представляют сегментированные объекты во входном изображении.
load('maskImage','BW');
Отобразите входное изображение и соответствующую бинарную маску. Бинарная маска состоит из 10 круговых блобов варьировавшейся статистики.
figure subplot(1,2,1) imshow(I,[]); title('Original Image'); subplot(1,2,2) imshow(BW) title('Circular Blobs');
Откройте simulink модель.
open_system('ex_blkblobanalysis.slx')
Модель вычисляет центроид, периметр и координаты ограничительной рамки для блобов в бинарном изображении. Вычисленная статистика является overlayed на входном изображении при помощи Draw
Markers
и Draw
Rectangles
блоки.
Количество выходного параметра блобов Blob
Analysis block
установлен равный количеству блобов в бинарной маске. Draw
Markers
блок строит вычисленные центроиды и Draw
Rectangles
блокируйтесь чертит ограничительные рамки. Значения периметра экспортируются как переменная perimeter
к рабочему пространству MATLAB. Матрица метки экспортируется как переменная label
к рабочему пространству MATLAB.
Запустите модель и отобразите результаты с помощью Video
Viewer
блок. Вычисленный центроид и ограничительная рамка являются overlayed на оригинальном изображении. Круговые маркеры указывают, что центроид каждого блоба и прямоугольников вокруг каждого блоба задает вычисленные ограничительные рамки.
out = sim('ex_blkblobanalysis.slx');
Первое значение во всей вычисленной статистике соответствует блобу со значением метки 1. Точно так же вторые значения соответствуют блобу со значением метки 2 и так далее. Значение метки 0 соответствий фону маски должно быть проигнорировано.
Считайте уникальные значения метки из матрицы метки.
lb = unique(out.label);
Отобразите значения периметра и соответствующие значения метки как таблица.
table(lb(2:end),out.perimeter,'VariableNames',{'Label','Perimeter'})
ans = 10x2 table Label Perimeter _____ _________ 1 194.17 2 170.02 3 191.58 4 156.37 5 195.58 6 186.51 7 190.75 8 192.17 9 167.44 10 168.85
Отобразите матрицу метки.
figure
imshow(out.label,[]);
colorbar
title('Label Matrix');