Найдите статистику круговых блобов в изображении

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

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

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