В этом примере показано, как найти координаты центроида, периметра и ограничивающего параллелепипеда на изображении с помощью команды 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')

Модель вычисляет координаты центроида, периметра и ограничивающей рамки для больших двоичных объектов в двоичном изображении. Вычисленная статистика накладывается на входное изображение с помощью Draw Markers и Draw Rectangles блоки.
Число выходных blobs параметра Blob Analysis block устанавливается равным количеству blobs в двоичной маске. Draw Markers блок отображает вычисленные центроиды и Draw Rectangles блок рисует ограничивающие рамки. Значения периметра экспортируются как переменные perimeter в рабочую область MATLAB. Матрица меток экспортируется как переменная label в рабочую область MATLAB.
Запустите модель и просмотрите результаты с помощью Video Viewer блок. Вычисленный центроид и ограничивающая рамка накладываются на исходное изображение. Круглые маркеры определяют центроид каждого большого двоичного объекта, а прямоугольники вокруг каждого большого двоичного объекта определяют вычисляемые ограничивающие рамки.
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');
