Поиск статистики циклических Blobs в изображении

В этом примере показано, как найти координаты центроида, периметра и ограничивающего прямоугольника круговых блобов на изображении при помощи Blob Analysis блок. Модель также выводит матрицу меток для ссылки.

Загрузка данных в рабочее пространство MATLAB

Чтение изображения в рабочее пространство 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');

Для просмотра документации необходимо авторизоваться на сайте