Маркируйте и измеряйте связанные компоненты в бинарном изображении

Обнаружение связанных компонентов

connected component в бинарном изображении является набором пикселей, которые образуют связную группу. Для примера, бинарное изображение ниже имеет три связанных компонента.

Вычислите связанные компоненты при помощи bwconncomp. В этом примере кода, BW - двоичная матрица, показанная на приведенном выше изображении. Задайте связность 4 так, чтобы два смежных пикселя были частью одного и того же объекта, если они оба включены и соединены в горизонтальном или вертикальном направлении. The PixelIdxList поле определяет список пикселей, принадлежащих каждому подключенному компоненту.

BW = zeros(8,9);
BW(2:4,2:3) = 1;
BW(5:7,4:5) = 1;
BW(2,7:9) = 1;
BW(3,8:9) = 1;
BW
BW =

     0     0     0     0     0     0     0     0     0
     0     1     1     0     0     0     1     1     1
     0     1     1     0     0     0     0     1     1
     0     1     1     0     0     0     0     0     0
     0     0     0     1     1     0     0     0     0
     0     0     0     1     1     0     0     0     0
     0     0     0     1     1     0     0     0     0
     0     0     0     0     0     0     0     0     0
cc = bwconncomp(BW,4)
cc = 

    Connectivity: 8
       ImageSize: [8 9]
      NumObjects: 3
    PixelIdxList: {[6x1 double]  [6x1 double]  [5x1 double]}

Маркируйте соединенные компоненты

Маркировка связанного компонента является процессом идентификации связанных компонентов в изображении и назначения каждой из них уникальной метки. Получившаяся матрица называется матрицей меток.

Создайте матрицу меток при помощи labelmatrix функция. Этот пример кода продолжается со структурой связанного компонента cc, заданный в предыдущем разделе.

labeled = labelmatrix(cc)
labeled =

  8×9 uint8 matrix

   0   0   0   0   0   0   0   0   0
   0   1   1   0   0   0   3   3   3
   0   1   1   0   0   0   0   3   3
   0   1   1   0   0   0   0   0   0
   0   0   0   2   2   0   0   0   0
   0   0   0   2   2   0   0   0   0
   0   0   0   2   2   0   0   0   0
   0   0   0   0   0   0   0   0   0

Чтобы визуализировать связанные компоненты, отобразите матрицу меток как псевдокрашенное изображение при помощи label2rgb функция. Метка, идентифицирующая каждый объект в матрице меток, преобразуется в другой цвет в связанной палитре. Вы можете задать палитру, цвет фона и как объекты в матрице меток сопоставить цвета в палитре.

RGB_label = label2rgb(labeled,@copper,'c','shuffle');
imshow(RGB_label)

Выбор объектов в бинарном изображении

Вы можете использовать bwselect функция для выбора индивидуума объектов в бинарное изображение. Задайте пиксели во входном изображении программно или в интерактивном режиме с помощью мыши. bwselect возвращает бинарное изображение, которая включает только те объекты из входов изображения, которые содержат один из заданных пикселей.

Для примера используйте эту команду, чтобы выбрать объекты на изображении, отображаемом в текущей системе координат.

BW2 = bwselect;

Курсор изменяется на перекрестие, когда находится поверх изображения. Щелкните объекты, которые вы хотите выбрать; bwselect отображает небольшую звезду на каждом пикселе, который вы кликаете. Когда вы закончите, нажмите Return. bwselect возвращает бинарное изображение, состоящее из выбранных объектов, и удаляет звезды.

Измерение свойств связанных компонентов

regionprops функция может возвращать измерения для нескольких свойств связанных компонентов. Другие функции измеряют одно свойство. Для примера, bwarea функция возвращает область бинарного изображения.

Этот пример использует bwarea для определения процентного увеличения площади circbw.tif что является результатом операции расширения. Площадь является мерой размера переднего плана изображения и примерно равна количеству on пиксели на изображении. Однако bwarea не просто подсчитывает количество пикселей, заданное как on. Скорее, bwarea взвешивает различные пиксельные шаблоны неравномерности при вычислении области. Это взвешивание компенсирует искажение, которое присуще представлению непрерывного изображения с дискретными пикселями. Для примера диагональная линия на 50 пикселей длиннее горизонтальной линии на 50 пикселей. В результате взвешивания bwarea используется, горизонтальная линия имеет площадь 50, но диагональная линия имеет площадь 62,5.

BW = imread('circbw.tif'); 
SE = ones(5);
BW2 = imdilate(BW,SE);
increase = (bwarea(BW2) - bwarea(BW))/bwarea(BW)
increase =

    0.3456

См. также

| | | |

Похожие примеры

Подробнее о