exponenta event banner

Метка и измерение связанных компонентов в двоичном изображении

Обнаружение подключенных компонентов

Связанный компонент в двоичном изображении представляет собой набор пикселей, которые образуют соединенную группу. Например, нижеприведенное двоичное изображение имеет три связанных компонента.

Расчет связанных компонентов с помощью bwconncomp. В этом примере кода BW - двоичная матрица, показанная на приведенном выше изображении. Укажите связность 4, чтобы два соседних пикселя были частью одного и того же объекта, если они оба включены и соединены вдоль горизонтального или вертикального направления. 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

См. также

| | | |

Связанные примеры

Подробнее