В этом примере показано, как найти координаты центроида, периметра и ограничивающего прямоугольника круговых блобов на изображении при помощи Blob
Analysis
блок. Модель также выводит матрицу меток для ссылки.
Чтение изображения в рабочее пространство MATLAB.
I = imread('coins.png');
Загрузите двоичную маску, содержащую blobs, которые представляют сегментированные объекты в вход изображении.
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
задается равным количеству блобов в двоичной маске. The 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');