Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Магистерская диссертация.pdf
Скачиваний:
63
Добавлен:
27.03.2015
Размер:
2.77 Mб
Скачать

2.4. Метод иерархической декомпозиции сегментов

В некоторых томограммах вокселы, соответствующие одному и тому же объекту (или группе объектов), близки друг к другу не только по своей плотности, но также и по взаимному расположению. В этом случае их можно успешно локализовать, сегментировав томограмму без использования каких бы то ни было пространственных связей, что как раз позволяет сделать метод центров тяжести, описанный в разделе 2.2. Однако так бывает далеко не всегда, особенно в условиях сильной зашумлённости исходных данных. Поэтому в большинстве случаев приходится учитывать разницу вокселов не только по их плотности, но и по расстоянию между ними.

Для более детального представления сегментов, относящихся к разным объектам, в данной работе предлагается использовать один из возможных нисходящих методов иерархической сегментации. Его суть состоит в том, что после сегментации исходных данных по значениям плотности можно ввести в рассмотрение сегменты более высокого уровня детализации, а именно, сегменты по расстоянию между вокселами и связные области (в пространственном смысле). Указанные сегменты в общем случае образуют иерархическую структуру, изображённую на рис. 9. При этом сегментацию по расстоянию можно осуществить итеративным алгоритмом, основанным на методе k-средних, рассматривая в качестве объектов пары индексов {(i, j)}, описывающих положение вокселов на одном и том же слое. В качестве меры рассогласования между вокселами x1 и x2 используется обычное евклидово расстояние, порождённое парой точек на плоскости:

d (x , x

 

)=

 

 

 

 

 

 

 

 

 

 

 

2

(i

x

i

x

)2

+ (j

x

j

x

)2

(2.4.1)

1

 

 

 

2

 

 

2

 

 

 

 

 

1

 

 

 

1

 

 

 

Связные области

Сегменты по расстоянию

Сегменты по плотности

Слой исходных данных

Рис. 9. Наглядное представление иерархической декомпозиции сегментов

25

Связные области являются самым высоким уровнем детализации исходных данных. Для их поиска в данной работе используется итеративный алгоритм разметки областей [57, 58] в рамках конкретного сегмента по признаку 8-связности4 пикселов. Данный алгоритм включает в себя 3 основных этапа: начальную разметку областей, их повторную переразметку и восстановление разметки областей для других сегментов. Опишем подробнее данный алгоритм. При этом будем использовать следующие обозначения:

-Label – текущий максимальный индекс связной области;

-nRegions – количество найденных связных областей;

-distance – вспомогательный массив, хранящий количество связных областей с номерами после заданного каждого индекса от 0 до nRegions-1, удалённых в процессе поиска;

-Z – номер текущего слоя данных;

-Length, Width – длина и ширина бинарного изображения сегмента соответственно;

-reducedIndex – приведённый индекс текущего рассматриваемого воксела на слое данных;

-ComponentIndex, TmpComponentIndex – массивы индексов связных областей для каждого воксела на слое Z (в массив TmpComponentIndex сохраняются индексы связных областей других сегментов, для их последующего восстановления);

-flag – вспомогательная булева переменная.

Шаг 0. Полагаем Label = -1.

Шаг 1. В цикле по всем вокселам слоя копируем текущие значения массива

ComponentIndex в массив TmpComponentIndex.

Шаг 2. В двойном цикле по переменным I от 0 до Length-1 и J от 0 до Width-1 выполняем Шаг 3 – Шаг 4. По окончании цикла переходим на Шаг 12.

Шаг 3. Полагаем reducedIndex = I + Length*J + Length*Width*Z.

Шаг 4. Если воксел с приведённым индексом reducedIndex принадлежит рассматриваемому сегменту, выполняем Шаг 5 – Шаг 6. Иначе переходим на Шаг 2.

Шаг 5. Полагаем flag = false.

Шаг 6. В двойном цикле по переменным x и y от -1 до 1, если пара (x, y) принадлежит множеству { (-1, 0); (0, -1); (1, -1); (-1, -1) } и выполняется условие (1 <= I+x <= Length) & (1 <= J+y <= Width), выполняем Шаг 7 – Шаг 8. По окончании цикла переходим на Шаг 9.

Шаг 7. Полагаем ComponentIndex[I, J] = ComponentIndex[I+x, J+y], flag = true.

Шаг 8. Выходим из цикла и переходим на Шаг 9.

Шаг 9. Если flag == false, выполняем Шаг 10 – Шаг 11. Иначе переходим на Шаг 2. Шаг 10. Увеличиваем значение Label на 1.

Шаг 11. Полагаем ComponentIndex[I, J] = Label и переходим на Шаг 2.

4 Аналогично можно рассмотреть случай 4-связности пикселов, который в данной работе не используется.

26

Шаг 12. Сохраняем найденное количество связных областей: nRegions = Label+1.

Шаг 13. Формируем массив distance из nRegions элементов и инициализируем его нулями. Шаг 14. В двойном цикле по переменным I от 0 до Length-1 и J от 0 до Width-1 выполняем Шаг 15 – Шаг 16. По окончании цикла переходим на Шаг 22.

Шаг 15. Вычисляем приведённый индекс воксела аналогично Шагу 3. Шаг 16. Если воксел с приведённым индексом reducedIndex принадлежит

рассматриваемому сегменту, выполняем Шаг 17. Иначе переходим на Шаг 14.

Шаг 17. В двойном цикле по переменным x и y от -1 до 1, если пара (x, y) принадлежит множеству { (-1, 1); (0, 1); (1, 1); (1, 0) } и выполняется условие (1 <= I+x <= Length) & (1 <= J+y <= Width) & (ComponentIndex[I+x, J+y] != ComponentIndex[I, J]), выполняем Шаг 18

– Шаг 21. По окончании цикла переходим на Шаг 14.

Шаг 18. Для всех вокселов слоя с координатами (k, l), если выполняется условие

ComponentIndex[k, l] == ComponentIndex[I+x, J+y], полагаем ComponentIndex[k, l] = ComponentIndex[I, J].

Шаг 19. В цикле по m от ComponentIndex[I+x, J+y]+1 до nRegions-1 увеличиваем значение distance[m] на 1 (используем тот факт, что при установленном порядке обхода вокселов на слое – слева направо и сверху вниз – справедливо неравенство ComponentIndex[I+x, J+y] >= ComponentIndex[I, J]).

Шаг 20. Уменьшаем значение переменной Label на 1. Шаг 21. Выходим из цикла и переходим на Шаг 14.

Шаг 22. В двойном цикле по переменным I от 0 до Length-1 и J от 0 до Width-1, если

TmpComponentIndex[I, J] >= 0, полагаем ComponentIndex[I, J] = TmpComponentIndex[I, J], в противном случае, если ComponentIndex[I, J] >= 0, то уменьшаем значение

ComponentIndex[I, J] на величину distance[ComponentIndex[I, J]].

Конец алгоритма

2.5. Морфологическая фильтрация сегментов

Преобразования сегментов, полученных методом k-средних и иерархической декомпозицией, могут быть осуществлены с целью либо соединить близкие, но несвязные между собой детали в единое целое, либо устранить шум, мешающий идентификации объектов из сегментов, расположенных на разных слоях исходных данных. Для этого лучше всего подходят разнообразные фильтры математической морфологии (расширение, сужение, размыкание, замыкание) [58]. В них обрабатываемый сегмент рассматривается как бинарное

27

изображение, в котором белые пикселы соответствуют сегменту, а чёрные (фоновые) – остальной части слоя данных.

Фильтры морфологического расширения и замыкания предназначены для объединения близко расположенных друг к другу связных областей, а фильтры сужения и размыкания – для устранения шума или, наоборот, более чёткого обособления не связных друг с другом деталей. Для адаптивного использования информации из окрестности каждого пиксела в общем случае используется битовая маска M {0, 1}m×n ( m число строк, n число столбцов), в которой элементы со значением 1 (true) соответствуют пикселам, образующим на исходном изображении несвязные участки и другие нежелательные артефакты, а нулевые элементы (со значением false) – пикселам, не участвующим в подобных искажениях.

Рассмотрим примеры применения некоторых фильтров математической морфологии к одному из сегментов (рис. 10). Ширина и высота изображения с сегментом – 512 пикселов.

а) б) в)

Рис. 10. а) – обрабатываемый сегмент, б) – сегмент после применения к нему морфологического расширения, в) – морфологическое сужение сегмента

Как видно из приведённого примера, в случае, если к сегменту применяется морфологическое расширение, границы его фрагментов становятся более чёткими, а при использовании морфологического сужения некоторые детали становятся менее заметными, либо полностью удаляются.

2.6. Построение признакового описания сегмента

Вслучае послойной сегментации исходных данных (каждого слоя как 2D-изображения

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

28

 

Пусть

S T

рассматриваемый

сегмент,

 

представляющий собой

множество

приведённых индексов вокселов, входящих в него.

 

 

 

 

 

 

 

 

 

 

В данной работе для построения дескриптора сегмента использовались следующие его

атрибуты:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1)

среднее значение плотности:

 

 

=

 

 

1

 

 

 

µi

,

 

 

 

 

 

 

 

 

 

 

 

 

 

(2.6.1)

µ

 

 

 

 

 

 

 

 

 

 

S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где µi – значение плотности воксела с индексом i ;

 

 

 

 

 

 

 

 

 

2)

среднеквадратическое отклонение плотности: σµ =

1

 

 

 

(µi

 

)2 ;

(2.6.2)

 

 

µ

 

S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i S

 

3)

геометрический центр масс

(

 

 

,

 

):

 

=

 

 

1

 

 

xi ,

 

=

 

 

 

1

 

 

 

yi ,

(2.6.3)

x

y

x

y

 

 

 

 

 

S

 

 

 

 

 

S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i S

 

 

 

 

 

i S

 

 

где (xi , yi

) – координаты воксела с индексом i ;

 

 

 

 

 

 

 

 

 

4)

дисперсии координат вокселов (X и Y):

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

σX =

 

1

 

(xi

 

)2 ,

σY =

 

 

1

 

(yi

 

)2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(2.6.4)

 

 

 

x

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S

 

 

 

S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i S

 

 

 

 

i S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5)

Объём сегмента в используемых кубических единицах:

 

 

V =

 

S

 

ScaleX ScaleY ScaleZ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(2.6.5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Атрибуты, вычисляемые по формулам (2.6.1 – 2.6.5), образуют признаковое описание

сегмента S ,

или, по-другому,

его дескриптор, который далее будем обозначать d (S). На

рис. 11. и в таблице 1 приведены примеры 2D-сегментов, а также их признаковые описания, полученные в соответствии с формулами (2.6.1 – 2.6.5). Размеры слоя (изображения), с которого получены сегменты, – 512 ×512 .

Рис. 11. Примеры 2D-сегментов, полученных по алгоритму k-средних и с помощью иерархической декомпозиции на связные области

Таблица 1. Значения атрибутов сегментов, представленных на рис. 11

Атрибут

Сегмент

1

2

3

4

5

6

 

 

 

 

 

 

 

 

V

 

613,472

1183,776

1340,032

286,976

412,832

350,208

 

 

 

75,41427

82,74319

86,25182

81,24152

90,08542

78,24306

µ

 

29