- •Лабораторная работа №7. Морфологическая обработка изображений
- •Базовые понятия теории множеств
- •Риунок 1 – а) Два множества а и в. Б) Объединение множеств а и в. В) Пересечение множеств а и в. Г) Дополнение множества а. Д) Разность множеств а и в.
- •Двоичные изображения, множества и логические операции
- •Разложение структурообразующих элементов
- •Функция strel
- •Преобразование успех/неудача
- •Использование поисковых таблиц
- •Функция bwmorph
- •Выделение компонент связности
- •Морфологическая реконструкция
- •Размыкание реконструкцией
- •Размыкание и замыкание
- •Реконструкция
- •Список индивидуальных данных
- •Задание:
Выделение компонент связности
До этого момента все обсуждавшиеся операции применялись индивидуально к пикселам переднего (или заднего) плана или к их ближайшим соседям. В этом параграфе рассматриваются важные операции «среднего плана», которые занимают промежуточное положение между обработкой отдельных пикселов и действиями над всеми пикселами переднего плана. Это приводит к понятию компонент связности, которые мы будем также называть объектами.
Если предложить сосчитать объекты на рис. 17а), то большинство людей скажет, что их там десять: шесть букв и четыре геометрические фигуры. На рис. 17б) дан увеличенный прямоугольный фрагмент этого изображения. Какое отношение имеют 16 пикселов переднего плана на этом рисунке к десяти выделенным объектам? Несмотря на то, что они разделены на две группы, все эти 16 пикселов принадлежат букве “Е” на рис. 17а). Чтобы написать компьютерную программу, которая обнаруживает объекты и оперирует с ними, нам необходимо более точно определить ключевые понятия.
Пиксел р с координатами (х, у) имеет два горизонтальных и два вертикальных соседа с координатами (х+1, у), (х – 1, у), (х, у+1) и (х, у – 1). Эта четверка соседей р обозначается N4(р). Она выделена на рис. 18а) серым цветом. Четыре диагональных соседа р имеют координаты (х+1, у+1), (х+1, у–1), (х – 1, у+1) и (х – 1, у–1). На рис. 18б) изображены эти диагональные соседи; эта четверка обозначается ND(р). Объединение N4(р) и ND(р) на рис. 18в) определяет восьмерку соседей пиксела р, которая обозначается N8(р).
Рисунок 17 - а) Изображение, содержащее 10 объектов. б) Подмножество пикселов изображения.
Рисунок 18 – а) Пиксел р и его четверка соседей N4(р). б) Пиксел р и его диагональные соседи ND(р). в) Пиксел р и его восьмерка соседей N8(р). г) Пикселы р и q являются 4-смежными и 8-смежными. д) Пикселы p и q являются 8-смежными, но не 4-смежными. е) Затемненные пикселы являются одновременно 4-связными и 8-связными. ж) Затемненные пикселы являются 8-связными, но не 4-связными.
Два пиксела p и q называются 4-смежными, если q N4(p). Аналогично, пикселы p и q называются 8-смежными, если q N8(p). Рис. 18г) и д), иллюстрирует эти понятия. Путем между пикселами p1 и pn называется последовательность пикселов р1, р2, …, рn, такая, что рк является смежным для рк+1 при к=1, 2, …, n – 1. Пусть может быть 4-связным или 8-связным, в зависимости от используемого определения смежности пикселов.
Два пиксела переднего плана p и q называются 4-связными, если существует 4-связный путь между ними, который целиком состоит из пикселов переднего плана [рис. 18е)]. Пикселы p и q называются 8-связными, если между ними имеется 8-связный путь [см. рис. 18ж)]. Для любого пиксела переднего плана p множество всех связанных с ним пикселов переднего плана называется компонентой связности, содержащий p.
Понятие компоненты связности было определено в терминах путей, а понятие пути, в свою очередь, зависит от определения смежности. Это означает, что природа связных компонент зависит от понятия смежности, из которых наиболее употребительным являются 4-связность и 8-связность. Рис. 19 иллюстрирует влияние, которое определение смежности может произвести при подсчете числа компонент связности изображения. На рис. 19а) приведено маленькое двоичное изображение с четырьмя
4-компонентами связности. Рис. 19б) показывает, что выбор 8-смежности сокращает число компонент 8-связности до 2.
Рисунок 19 – Компоненты связности. а) Четыре 4-связные компоненты. б) Две 8-связные компоненты. в) Размечающая матрица, полученная для 4-связности. г) Размечающая матрица, полученная для 8-связности
Функция bwlabel из ITP находит все компоненты связности двоичного изображения. Форма ее вызова имеет вид
[ L , num ] = bwlabel ( f , conn ) ,
где f – это входное двоичное изображение, а параметр conn обозначает желаемую связность (по 4- или 8-смежности). Выход L называется размечающей матрицей, а в (необязательный) выходной параметр num записывается общее число обнаруженных компонент связности. Если параметр conn опущен, то он по умолчанию считается равным 8. На рис. 19, в) показана размечающая матрица, отвечающая рис. 19а) и вычисленная командой bwlabel ( f , 4 ). Пикселам каждой отдельной компоненты связности присваивается одинаковое число от 1 и до общего числа компонент связности. Другими словами, пикселы, помеченные 1, принадлежат первой компоненте связности, пикселы, помеченные 2, - второй компоненте, и т.д. Фоновые пикселы помечены 0. На рис. 19г) показана размечающая матрица, соответствующая рис. 19а), которая построена командой
bwlabel ( f , 8 ).
Пример 7. Нахождение центров масс компонент связности.
В этом примере показано, как можно найти центр масс каждой компоненты связности рис. 17а). Прежде всего, мы воспользуемся функцией bwlabel для вычисления 8-связных компонент:
>> f = imread ( ‘ objects. tif ’ ) ;
>> [ L , n ] = bwlabel ( f ) ;
Функция find может быть полезной при работе с размечающими матрицами. Например, следующий вызов функции find возвращает индексы строк и столбцов всех пикселов, принадлежащих третьему объекту:
>> [ r , c ] = find ( L == 3 ) ;
Функция mean с выходами r и c вычисляет центр масс этого объекта.
>> rbar = mean ( r ) ;
>> cbar = mean ( c ) ;
Для нахождения центров масс всех объектов изображения можно воспользоваться циклом. Чтобы сделать центры масс объектов видимыми на изображении, мы их обозначим символом «*» белого цвета, который разместим в центр черного кружка. Для этого выполним следующую серию команд:
>> imshow ( f )
>> hold on
>> for k = 1: n
[ r , c ] = find ( L == k ) ;
rbar = mean ( r ) ;
cbar = mean ( c ) ;
plot ( cbar , rbar , ‘ Marker ’ , ‘ o ’ , ‘ MarkerEdgeColor ’ , ‘ k ’ , …
‘ MarkerFaceColor ’ , ‘ k ’ , ‘ MarkerSize ’ , 10 )
plot ( cbar , rbar , ‘ Marker ’ , ‘*’ , ‘ MarkerEdgeColor ’ , ‘ w ’ )
end
Рис. 20 показывает результат этого программного кода.
Рисунок 20 – Центры масс (белые звездочки), наложенные на соответствующие компоненты связности
