- •1. Программные системы и методы 3D-реконструкции биомедицинских данных
- •1.1. Обзор программных комплексов
- •1.2. Обзор основных подходов
- •1.2.1. Структуры визуализируемых объёмов
- •1.2.2. Сегментация и идентификация объектов
- •1.2.3. Построение поверхностей объектов
- •2. Модели, методы и алгоритмы, положенные в основу сегментации и поиска объектов
- •2.1. Формальная постановка задачи и основные этапы её решения
- •2.2. Сегментация данных компьютерной томографии и электронной микроскопии
- •2.3. Повышение производительности вычислений в методе k-средних
- •2.4. Метод иерархической декомпозиции сегментов
- •2.5. Морфологическая фильтрация сегментов
- •2.6. Построение признакового описания сегмента
- •2.7. Поиск объектов методом динамического программирования
- •3. Описание реализации программной системы
- •3.1. Основные классы, структуры и методы
- •3.2. Организация пользовательского интерфейса
- •Заключение
- •Список литературы
- •Приложение А. Примеры результатов сегментации и идентификации объектов
- •Приложение Б. Классы, реализующие семейство методов k-средних
- •Приложение В. Исходные коды базовых компонентов программной системы
- •В.1. Основные классы и структуры для хранения и обработки данных
- •В.2. Методы вычисления атрибутов сегментов
- •В.3. Поиск объектов по найденным сегментам
Приложение А. Примеры результатов сегментации и идентификации объектов
Пример А1. Параметры сегментации: режим: 2D, максимальное число сегментов – 7, количество итераций алгоритма – 50, диапазон значений плотности: [0; 22351], последовательность слоёв: 1-5, иерархическая декомпозиция не используется. На рис. А1 показаны слои компьютерной томограммы, а также таблицы найденных сегментов.
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
95499,16 |
0 |
28 |
(36, 36, 36) |
36 |
True |
1 |
6368,192 |
29 |
84 |
(72, 72, 72) |
72 |
True |
2 |
5250,688 |
85 |
158 |
(109, 109, 109) |
109 |
True |
3 |
6042,304 |
159 |
241 |
(145, 145, 145) |
145 |
True |
4 |
15849,95 |
242 |
308 |
(182, 182, 182) |
182 |
True |
5 |
28443,46 |
309 |
391 |
(218, 218, 218) |
218 |
True |
6 |
1929,792 |
392 |
22351 |
(255, 255, 255) |
255 |
True |
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
78181,5 |
0 |
8 |
(36, 36, 36) |
36 |
True |
1 |
23381,86 |
9 |
49 |
(72, 72, 72) |
72 |
True |
2 |
8168,48 |
50 |
127 |
(109, 109, 109) |
109 |
True |
3 |
6769,472 |
128 |
215 |
(145, 145, 145) |
145 |
True |
4 |
10898,4 |
216 |
292 |
(182, 182, 182) |
182 |
True |
5 |
29965,89 |
293 |
373 |
(218, 218, 218) |
218 |
True |
6 |
2017,952 |
374 |
22351 |
(255, 255, 255) |
255 |
True |
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
72652,96 |
0 |
6 |
(36, 36, 36) |
36 |
True |
1 |
32370,53 |
7 |
46 |
(72, 72, 72) |
72 |
True |
2 |
9124,256 |
47 |
116 |
(109, 109, 109) |
109 |
True |
3 |
7663,232 |
117 |
191 |
(145, 145, 145) |
145 |
True |
4 |
8014,656 |
192 |
265 |
(182, 182, 182) |
182 |
True |
5 |
13312,77 |
266 |
324 |
(218, 218, 218) |
218 |
True |
6 |
16245,15 |
325 |
22351 |
(255, 255, 255) |
255 |
True |
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
76520,45 |
0 |
6 |
(36, 36, 36) |
36 |
True |
1 |
34399,42 |
7 |
47 |
(72, 72, 72) |
72 |
True |
2 |
9811,903 |
48 |
115 |
(109, 109, 109) |
109 |
True |
3 |
7453,472 |
116 |
184 |
(145, 145, 145) |
145 |
True |
4 |
6714,144 |
185 |
256 |
(182, 182, 182) |
182 |
True |
5 |
8626,912 |
257 |
320 |
(218, 218, 218) |
218 |
True |
6 |
15857,25 |
321 |
22351 |
(255, 255, 255) |
255 |
True |
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
81479,9 |
0 |
6 |
(36, 36, 36) |
36 |
True |
1 |
37006,53 |
7 |
48 |
(72, 72, 72) |
72 |
True |
2 |
8809,312 |
49 |
116 |
(109, 109, 109) |
109 |
True |
3 |
8189,76 |
117 |
184 |
(145, 145, 145) |
145 |
True |
4 |
7408,48 |
185 |
257 |
(182, 182, 182) |
182 |
True |
5 |
7224,256 |
258 |
329 |
(218, 218, 218) |
218 |
True |
6 |
9265,312 |
330 |
22351 |
(255, 255, 255) |
255 |
True |
Рис. А1. 2D-сегменты, найденные на слоях исходных данных
53
При поиске соответствий между сегментами соседних слоёв использовались все атрибуты, описанные в разделе 2.6, а также условие полной смежности сегментов, образующих соответствие, по диапазонам значений плотности вокселов.
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
95499,16 |
0 |
28 |
(36, 36, 36) |
36 |
False |
1 |
6368,192 |
29 |
84 |
(72, 72, 72) |
72 |
False |
2 |
5250,688 |
85 |
158 |
(128, 0, 128) |
255 |
True |
3 |
6042,304 |
159 |
241 |
(0, 255, 255) |
255 |
True |
4 |
15849,95 |
242 |
308 |
(255, 0, 0) |
255 |
True |
5 |
28443,46 |
309 |
391 |
(255, 255, 0) |
255 |
True |
6 |
1929,792 |
392 |
22351 |
(0, G = 0, 255) |
255 |
True |
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
78181,5 |
0 |
8 |
(36, 36, 36) |
36 |
False |
1 |
23381,86 |
9 |
49 |
(72, 72, 72) |
72 |
True |
2 |
8168,48 |
50 |
127 |
(72, 72, 72) |
72 |
False |
3 |
6769,472 |
128 |
215 |
(128, 0, 128) |
255 |
True |
4 |
10898,4 |
216 |
292 |
(255, 0, 0) |
255 |
True |
5 |
29965,89 |
293 |
373 |
(255, 255, 0) |
255 |
True |
6 |
2017,952 |
374 |
22351 |
(0, 0, 255) |
255 |
True |
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
72652,96 |
0 |
6 |
(36, 36, 36) |
36 |
False |
1 |
32370,53 |
7 |
46 |
(72, 72, 72) |
72 |
True |
2 |
9124,256 |
47 |
116 |
(72, 72, 72) |
72 |
False |
3 |
7663,232 |
117 |
191 |
(128, 0, 128) |
255 |
True |
4 |
8014,656 |
192 |
265 |
(182, 182, 182) |
182 |
True |
5 |
13312,77 |
266 |
324 |
(255, 0, 0) |
255 |
True |
6 |
16245,15 |
325 |
22351 |
(255, 255, 0) |
255 |
True |
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
76520,45 |
0 |
6 |
(36, 36, 36) |
36 |
False |
1 |
34399,42 |
7 |
47 |
(72, 72, 72) |
72 |
True |
2 |
9811,903 |
48 |
115 |
(72, 72, 72) |
72 |
False |
3 |
7453,472 |
116 |
184 |
(128, 0, 128) |
255 |
True |
4 |
6714,144 |
185 |
256 |
(182, 182, 182) |
182 |
True |
5 |
8626,912 |
257 |
320 |
(255, 0, 0) |
255 |
True |
6 |
15857,25 |
321 |
22351 |
(255, 255, 0) |
255 |
True |
Index |
Volume |
Min. density |
Max. density |
Color (RGB) |
Opacity |
Visible |
0 |
81479,9 |
0 |
6 |
(36, 36, 36) |
36 |
False |
1 |
37006,53 |
7 |
48 |
(72, 72, 72) |
72 |
True |
2 |
8809,312 |
49 |
116 |
(72, 72, 72) |
72 |
False |
3 |
8189,76 |
117 |
184 |
(128, 0, 128) |
255 |
True |
4 |
7408,48 |
185 |
257 |
(182, 182, 182) |
182 |
True |
5 |
7224,256 |
258 |
329 |
(255, 0, 0) |
255 |
True |
6 |
9265,312 |
330 |
22351 |
(255, 255, 0) |
255 |
True |
Рис. А2. Наследование атрибутов цвета и непрозрачности с начального слоя 1 на слои 2-5
54
Наследование атрибутов цвета и непрозрачности сегментами последующих слоёв (2 – 5), образующими те или иные соответствия, показано на рис. А2, а примеры найденных соответствий, образующих объекты томограммы, представлены в таблице А1.
Таблица А1. Некоторые соответствия между сегментами из примера А1
Соответствие между сегментами |
Цвет объекта (RGB) |
|
|
(2, 3, 3, 3, 3) |
(128, 0, 128) |
(4, 4, 5, 5, 5) |
(255, 0, 0) |
(5, 5, 6, 6, 6) |
(255, 255, 0) |
Пример А2. Параметры сегментации: режим: 3D, максимальное число сегментов: 7, количество итераций алгоритма: 50, диапазон значений плотности: [0; 500], последовательность слоёв: 0-9. Результаты приведены на рис. А3 и рис. А4.
Index |
Volume |
Min. |
Max. |
Color (RGB) |
Opacity |
Visible |
||
density |
density |
|||||||
|
|
|
|
|
|
|||
0 |
106393 |
40 |
108 |
(255, 0, 255) |
255 |
True |
||
|
|
|
|
|
|
|
|
|
1 |
188425 |
177 |
238 |
(128, 128, |
255) |
255 |
True |
|
2 |
1554383 |
0 |
39 |
(109, 109, |
109) |
109 |
False |
|
3 |
308238 |
239 |
292 |
(0, 0, 255) |
255 |
True |
||
4 |
139795 |
109 |
176 |
(255, 255, 0) |
255 |
True |
||
5 |
79824 |
365 |
500 |
(0, 255, |
0) |
255 |
True |
|
6 |
236162 |
293 |
364 |
(255, 0, |
0) |
255 |
True |
Рис. А3. Пример результатов сегментации в 3D-режиме: все видимые сегменты – непрозрачные
Index |
Volume |
Min. |
Max. |
Color (RGB) |
Opacity |
Visible |
||
density |
density |
|||||||
|
|
|
|
|
|
|||
0 |
106393 |
40 |
108 |
(255, 0, 255) |
255 |
True |
||
1 |
188425 |
177 |
238 |
(128, 128, |
255) |
255 |
True |
|
2 |
1554383 |
0 |
39 |
(109, 109, |
109) |
109 |
False |
|
3 |
308238 |
239 |
292 |
(0, 0, 255) |
0 |
True |
||
4 |
139795 |
109 |
176 |
(255, 255, 0) |
255 |
True |
||
5 |
79824 |
365 |
500 |
(0, 255, |
0) |
255 |
True |
|
6 |
236162 |
293 |
364 |
(255, 0, |
0) |
0 |
True |
Рис. А4. Пример результатов сегментации в 3D-режиме: 2 прозрачных сегмента
55
Приложение Б. Классы, реализующие семейство методов k-средних
В таблице Б1 приведён список всех классов, предназначенных для реализации последовательных и параллельных алгоритмов, основанных на методе k-средних.
Таблица Б1. Классы, реализующие семейство методов k-средних
Имя класса, реализующего метод |
Описание реализуемого метода |
|
|
|
|
KMeansMethod |
Базовый шаблонный класс для всех реализуемых |
|
методов k-средних |
||
|
||
|
|
|
KMeansDensityMethod |
Метод безусловной сегментации по значениям |
|
плотности вокселов |
||
|
||
|
|
|
KMeansSpatialMethod |
Метод безусловной сегментации по расстояниям |
|
между вокселами |
||
|
||
|
|
|
KMeansDensitySpatialMethod |
Метод безусловной сегментации по значениям |
|
плотности и расстояниям между вокселами |
||
|
||
|
|
|
|
Базовый шаблонный класс для методов условной |
|
KMeansConditionalMethod |
сегментации в ограниченном диапазоне значений |
|
|
плотности вокселов |
|
|
|
|
KMeansConditionalDensityMethod |
Метод условной сегментации по значениям |
|
плотности вокселов |
||
|
||
|
|
|
KMeansConditionalSpatialMethod |
Метод условной сегментации по расстояниям |
|
между вокселами |
||
|
||
|
|
|
KMeansConditionalDensitySpatialMethod |
Метод условной сегментации по значениям |
|
плотности и расстояниям между вокселами |
||
|
||
|
|
|
KMeansMaskMethod |
Базовый шаблонный класс для методов |
|
сегментации по маске вокселов |
||
|
||
|
|
|
KMeansMaskDensityMethod |
Метод сегментации по значениям плотности |
|
вокселов, использующий маску |
||
|
||
|
|
|
KMeansMaskSpatialMethod |
Метод сегментации по расстояниям между |
|
вокселами, использующий маску |
||
|
||
|
|
|
|
Метод сегментации по значениям плотности и |
|
KMeansMaskDensitySpatialMethod |
расстояниям между вокселами, использующий |
|
|
маску |
|
|
|
|
|
Базовый шаблонный класс для методов |
|
KMeansOpenCLMethod |
параллельной безусловной сегментации с |
|
|
использованием OpenCL |
|
|
|
|
KMeansOpenCLDensityMethod |
Метод параллельной безусловной сегментации по |
|
значениям плотности вокселов |
||
|
||
|
|
|
KMeansOpenCLSpatialMethod |
Метод параллельной безусловной сегментации по |
|
расстояниям между вокселами |
||
|
||
|
|
56
Имя класса, реализующего метод |
Описание реализуемого метода |
|
|
|
|
|
Метод параллельной безусловной сегментации по |
|
KMeansOpenCLDensitySpatialMethod |
значениям плотности и расстояниям между |
|
|
вокселами |
|
|
|
|
|
Базовый шаблонный класс для методов |
|
KMeansConditionalOpenCLMethod |
параллельной условной сегментации в |
|
ограниченном диапазоне значений плотности |
||
|
||
|
вокселов с использованием OpenCL |
|
|
|
|
KMeansConditionalOpenCLDensityMethod |
Метод параллельной условной сегментации по |
|
значениям плотности вокселов |
||
|
||
|
|
|
KMeansConditionalOpenCLSpatialMethod |
Метод параллельной условной сегментации по |
|
расстояниям между вокселами |
||
|
||
|
|
|
|
Метод параллельной условной сегментации по |
|
KMeansConditionalOpenCLDensitySpatialMethod |
значениям плотности и расстояниям между |
|
|
вокселами |
|
|
|
|
|
Базовый шаблонный класс для методов |
|
KMeansMaskOpenCLMethod |
параллельной сегментации по маске вокселов с |
|
|
использованием OpenCL |
|
|
|
|
KMeansMaskOpenCLDensityMethod |
Метод параллельной сегментации по значениям |
|
плотности вокселов, использующий маску |
||
|
||
|
|
|
KMeansMaskOpenCLSpatialMethod |
Метод параллельной сегментации по расстояниям |
|
между вокселами, использующий маску |
||
|
||
|
|
|
|
Метод параллельной сегментации по значениям |
|
KMeansMaskOpenCLDensitySpatialMethod |
плотности и расстояниям между вокселами, |
|
|
использующий маску |
|
|
|
Иерархия, образуемая при наследовании базовых классов производными, приведена на рис. Б1. В угловых скобках после названия базового шаблонного класса указан тип центров тяжести, используемый в производном классе (float – вещественные числа с плавающей точкой, Point2f – точка на плоскости с вещественными координатами, Point3f – вещественная точка в трёхмерном пространстве).
57
|
KMeansMethod |
|
|
KMeansConditionalMethod |
KMeansMaskMethod |
KMeansOpenCLMethod |
|
|
KMeansConditionalOpenCLMethod |
KMeansMaskOpenCLMethod |
|
KMeansMethod <float> |
KMeansMethod <Point2f> |
KMeansMethod <Point3f> |
|
KMeansDensityMethod |
KMeansSpatialMethod |
KMeansDensitySpatialMethod |
|
KMeansConditionalMethod <float> |
KMeansConditionalMethod <Point2f> |
KMeansConditionalMethod <Point3f> |
|
KMeansConditionalDensityMethod |
KMeansConditionalSpatialMethod |
KMeansConditionalDensitySpatialMethod |
|
KMeansMaskMethod <float> |
KMeansMaskMethod <Point2f> |
KMeansMaskMethod <Point3f> |
|
KMeansMaskDensityMethod |
KMeansMaskSpatialMethod |
KMeansMaskDensitySpatialMethod |
|
KMeansOpenCLMethod <float> |
KMeansOpenCLMethod <Point2f> |
KMeansOpenCLMethod <Point3f> |
|
KMeansOpenCLDensityMethod |
KMeansOpenCLSpatialMethod |
KMeansOpenCLDensitySpatialMethod |
|
KMeansConditionalOpenCLMethod <float> |
KMeansConditionalOpenCLMethod <Point2f> |
KMeansConditionalOpenCLMethod <Point3f> |
|
KMeansConditionalOpenCLDensityMethod |
KMeansConditionalOpenCLSpatialMethod |
KMeansConditionalOpenCLDensitySpatialMethod |
|
KMeansMaskOpenCLMethod <float> |
KMeansMaskOpenCLMethod <Point2f> |
KMeansMaskOpenCLMethod <Point3f> |
KMeansMaskOpenCLDensityMethod |
KMeansMaskOpenCLSpatialMethod |
KMeansMaskOpenCLDensitySpatialMethod |
Рис. Б1. Иерархия наследования классов, реализующих семейство алгоритмов k-средних
58