Научная статья на тему 'Computer modeling of human femur'

Computer modeling of human femur Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
179
150
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ / БЕДРЕННАЯ КОСТЬ / ПЕРСОНАЛЬНЫЙ КОМПЬЮТЕР / 3D-МОДЕЛЬ / МЕХАНИКА / COMPUTER MODELING / FEMUR / PERSONAL COMPUTER / 3D-MODEL / MECHANICS

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Ямщиков Олег Николаевич, Норкин Игорь Алексеевич, Марков Дмитрий Александрович, Абдулнасыров Радик Казыевич, Перегородов Дмитрий Николаевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Ямщиков Олег Николаевич, Норкин Игорь Алексеевич, Марков Дмитрий Александрович, Абдулнасыров Радик Казыевич, Перегородов Дмитрий Николаевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Computer modeling of human femur»

УДК 616.6

КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ БЕДРЕННОЙ КОСТИ ЧЕЛОВЕКА

© О.Н. Ямщиков, И.А. Норкин, Д.А. Марков, Р.К. Абдулнасыров,

Д.Н. Перегородов, А.Ю. Заигралов

Ключевые слова: компьютерное моделирование; бедренная кость; персональный компьютер; ЭЭ-модель; механика.

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

1. ВВЕДЕНИЕ

Задача получения 3Б-модели бедренной кости человека из слайсов - это задача обратного инжиниринга, т. е. создания трехмерной модели анатомической структуры с помощью «оцифровки» физического прототипа с использованием медицинского изображения. Задачи такого класса усложняются еще и дополнительными условиями, а именно необходимостью построения 3Б-модели не в т. н. mesh-формате, в котором модель представляется сеткой, состоящей из треугольников, а в виде CAD-модели (модели в виде деформируемого твердого тела или в виде поверхностей). Это условие необходимо для создания системы «отломки кости - фиксатор» и последующего решения задачи математического моделирования травматологических и операционных процессов. Для создания такой 3D-модели на основе «оцифрованных» данных DICOM стандарта можно использовать три основных программных продукта: Slicer 3 (получение сетки из треугольных граней), MeshLab (обработка и упрощение треугольной сетки) и Salome (построение твердотельной модели). Кроме того, необходимо еще две вспомогательных программы преобразования формата 3D изображения: ParaViewer и Программа импорта геометрических примитивов ANSISTLtoSALOMEpy [1-5].

Программа функционирует под управлением операционных систем Windows XP SP3 и Linux RedHat release 4.

Программа написана на языке C++ с использованием фреймворка QT и компилятора MinGW C++.

2. ФУНКЦИОНАЛЬНОЕ НАЗНАЧЕНИЕ

Программа импорта геометрических примитивов ANSISTLtoSALOMEpy предназначена для использования в качестве вспомогательного средства при построении CAD-моделей из файлов формата STL и может быть использована при обратной инженерии данных, полученных с компьютерного томографа. Программа может выполнять преобразование файла формата ANSI STL в формат, понятный интерпретатору SALOME. Пользователь имеет возможность проимпор-тировать файл в формате STL и, в зависимости от поставленной задачи, произвести либо экспорт точек,

либо экспорт треугольников, либо экспорт построенных по срезам кривых [6-9].

3. ОПИСАНИЕ ЛОГИЧЕСКОЙ СТРУКТУРЫ

3.1. Описание структуры программы и ее основных частей. Программа состоит из модуля пользовательского интерфейса (ему соответствуют файлы mainwindow.h - определение основных структур данных, использованных в графическом интерфейсе программы, и mainwindow.cpp - реализация пользовательского интерфейса) и основного модуля импорта геометрических примитивов (ему соответствуют файлы modelconverter.h - определение основных структур данных, использованных в основных алгоритмах программы, и modelconverter.cpp - реализация функций, необходимых для основных алгоритмов программы).

Условно основной модуль делится на четыре блока, обеспечивающих выполнение следующих функций:

1) импорт файлов в формате ANSI STL;

2) экспорт точек в формат интерпретатора SALOME;

3) экспорт треугольников в формат интерпретатора SALOME;

4) построение кривых по срезам и их экспорт в формат интерпретатора SALOME.

3.2. Описание функций составных частей и связей между ними. Программа состоит из двух модулей: модуль интерфейса и модуль экспорта-импорта.

Интерфейс пользователя представлен на рис. 1.

В окне интерфейса пользователю доступны следующие кнопки:

- кнопка «Загрузить STL»;

- кнопка «Экспортировать точки»;

- кнопка «Экспортировать треугольники»;

- кнопка «Рассчитать кривые»;

- кнопка «Экспортировать кривые».

Пользователю также доступны окна для введения

параметров алгоритма: «Округление», «Порог», «Угол поворота», «Уровни по оси z».

В центре интерфейсного окна расположен индикатор количества проимпортированных точек.

Слева расположено окно визуализации работы программы. Под ним расположен индикатор уровня z.

Рис. 1. Окно интерфейса пользователя

Модуль импорта-экспорта условно делится на четыре части, соответствующие структуре программы:

1) импорт файлов в формате ANSI STL. Данный блок отвечает за импорт точек и треугольников из файла STL в базу данных SQLite. Треугольники и точки хранятся в нормализованной базе данных, состоящей из двух таблиц. В первой таблице points для каждой точки хранится ее идентификатор и координаты в трехмерном пространстве. В таблице triangles для каждого треугольника хранится его идентификатор и идентификаторы его вершин [5, 10-11];

2) экспорт точек в формат интерпретатора SALOME. Данный блок позволяет сохранить точки, хранящиеся в таблице points, в формат интерпретатора SALOME;

3) экспорт треугольников в формат интерпретатора SALOME. Данный блок позволяет сохранить треугольники, хранящиеся в таблице triangles, в формат интерпретатора SALOME;

4) построение кривых по срезам и их экспорт в формат интерпретатора SALOME. В данном блоке анализируются срезы по уровням z, в каждом срезе находятся точки, которые задают контур тела, по ним строится кривая. Затем обеспечивается возможность экспорта кривых в формат интерпретатора SALOME.

3.3. Алгоритм работы программы

3.3.1. Модуль интерфейса пользователя. В начале работы пользователю доступна только кнопка «Загрузить STL» и меню «Файл», позволяющее указать конкретный файл для загрузки.

Перед загрузкой файла необходимо задать параметр «Округление», который позволяет задать шаг, с которым работал томограф, чтобы пропустить пустые уровни в .stl-файле.

Выбрав и загрузив файл, пользователь имеет возможность выбора одной из функций импорта-экспорта с помощью соответствующей кнопки («Экспортиро-

вать точки», «Экспортировать треугольники», «Экспортировать кривые»).

В центре окна после импорта файла в формате STL отображается количество проимпортированных точек.

Если пользователь решает задачу экспорта кривых, то ему необходимо их рассчитать.

Для этого внизу интерфейсного окна находится кнопка «Рассчитать кривые», которая становится активной после выполнения загрузки файла в формате STL.

До расчета необходимо установить параметры алгоритма («Порог», «Угол поворота», «Уровни по оси z»).

Параметр «Порог» - это длина вектора, который ограничивает область поиска точек.

Параметр «Угол поворота» - величины начального и конечного углов, с помощью которых ограничивается сектор поиска точек.

Параметр «Уровни по оси z» - те начальные и конечные координаты z, по которым будут строиться кривые.

Слева в диалоговом окне визуализируется процесс работы программы.

После загрузки .stl-файла здесь отображаются про-импортированные точки для каждого уровня z. Номер нужного уровня можно задать либо числом в окне, расположенном ниже рисунка, либо с помощью бегунка, расположенного слева от этого окна.

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

Из файла в формате ANSI STL, который описывает поверхностную геометрию модели с помощью треугольной сетки, треугольники и точки импортируются в нормализованную базу данных SQLite, состоящую из двух таблиц. В первой таблице points для каждой точки

хранится ее идентификатор в поле pid и координаты в трехмерном пространстве соответственно в полях: x, у, z. В таблице triangles для каждого треугольника хранится идентификаторы его вершин соответственно в полях: f, s, t.

В тексте программы этому блоку соответствует функция importModel (проимпортировать модель), которая вызывается в ответ на нажатие соответствующей кнопки пользователем. Функция не содержит явных параметров. В качестве вспомогательных функций функция importModel использует функции: addPoint (добавить точку), addTraingle (добавить треугольник), saveToDb (сохранить в базу данных). Функции addPoint в качестве параметра передается структура типа «точка», а функции addTraingle структура типа «треугольник». У функции saveToDb нет явных параметров.

Также в этом блоке вызывается функция exportVertex. В качестве параметров функция принимает два флага. Первый отвечает за то, будут ли точки видны в SALOME (в данном случае флаг принимает значение false), а второй отвечает за построение срезов, которые участвуют в построении кривых (в данном случае принимает значение true).

3.3.2. Экспорт точек в формат интерпретатора SALOME. Данный блок позволяет сохранить точки, хранящиеся в таблице points, в формат интерпретатора SALOME. Выходной файл формируется следующим образом:

В качестве первых двух строк в файл добавляются: import salome (импорт модуля SALOME); import geompy (импорт модуля работы с геометрическими примитивами).

Каждая точка из таблицы points задается строкой следующего вида:

OOpid = geompy.MakeVertex(x, у, z); geompy.addToStudy(OOpid, «label»), где pid - идентификатор точки; x, у, z - координаты точки; label - произвольное название точки в SALOME.

В тексте программы этому блоку соответствует функция exportVertex. В качестве параметров функция принимает два флага. Первый отвечает за то, будут ли точки видны в SALOME (в данном случае флаг принимает значение true), а второй отвечает за построение срезов, которые участвуют в построении кривых (в данном случае принимает значение false).

3.3.3. Экспорт треугольников в формат интерпретатора SALOME. Данный блок позволяет сохранить треугольники, хранящиеся в таблице triangles, в формат интерпретатора SALOME. Выходной файл формируется следующим образом:

В качестве первых двух строк в файл добавляются: import salome (импорт модуля SALOME); import geompy (импорт модуля работы с геометрическими примитивами).

Каждая точка, участвующая в построении треугольника из таблицы triangles, задается строкой следующего вида:

OOpid = geompy.MakeVertex(x, у, z), где pid - идентификатор точки; x, у, z - координаты точки, взятые из таблицы points по идентификатору точки.

Для каждого треугольника задается шесть строк описания:

w1 = geompy.MakeLineTwoPnt(OOpid1, OOpid2); w2 = geompy.MakeLineTwoPnt(OOpid2, OOpid3); w3 = geompy.MakeLineTwoPnt(OOpid3, OOpid1);

wire = geompy.MakeWire([w1, w2,w3]);

face168 = geompy.MakeFace(wire, 0);

geompy .addT oStudy(face 168, "face168").

Первые три строки строят грани треугольника, четвертая строка объединяет их, пятая строка задает поверхность в виде этого треугольника, а последняя строка делает этот треугольник видимым в SALOME.

В тексте программы этому блоку соответствует функция exportTraingle. В качестве вспомогательной используется функция exportVertex, которая в качестве параметров принимает два флага. Первый отвечает за то, будут ли точки видны в SALOME (в данном случае флаг принимает значение false), а второй отвечает за построение срезов, которые участвуют в построении кривых (в данном случае принимает значение false).

3.3.4. Построение кривых по срезам и их экспорт в формат интерпретатора SALOME. Построение кривых происходит по следующему алгоритму (этому шагу соответствует вызов функции calculateCurves).

На первом шаге необходимо найти точки, которые будут составлять первый вектор. Для этого вычисляется центр масс выбранной области точек и, используя такой параметр алгоритма, как «порог», ограничивается область, равная половине значения порога слева и справа от центра масс по оси Oy. Затем выбираются точки слева и справа из ограниченной области с максимальной высотой (координатой по оси Oy), они и будут составлять первый вектор. Точки выбираются слева направо по часовой стрелке. Обе они запоминаются как точки, составляющие кривую. Этому шагу в тексте программы соответствует функция findFirstVec-tor с параметром z (координата). В качестве вспомогательных используются функции calcCenterMass с параметром z, вычисляющие координаты центра масс и возвращающие структуру типа «точка» и findFirstPoin-tInTreshold с параметрами: ^уктура типа «точка» с координатами центра масс, уровень z и флаг, принимающий значения -1 (когда ищем точку слева от центра масс) и 1 (когда ищем точку справа от центра масс).

Затем, начиная с последней точки, делается следующее.

Из последней добавленной точки проводится линия, равная по длине величине порога, и поворачивается по часовой стрелке от параметра, задаваемого начальным углом, и до параметра, задаваемого конечным углом. Первая точка, которая встречается на пути, добавляется в кривую. Алгоритм останавливается в случае, если встречается точка, которая уже была добавлена, либо не встретилось ни одной новой точки. Этому шагу в тексте программы соответствует функция selectPointsInCircle с параметром z, ограничивающая область поиска точек. Далее используется функция findNextPoint, определяющая следующую точку в строящейся кривой. В качестве первого параметра ей передается результат работы функции findFirstVector, вторым параметром координата z, третьим - результат работы функции selectPointsInCircle. В качестве вспомогательной эта функция использует функцию calcAn-gleVectors, которая считает угол между векторами. В качестве параметров она использует два вектора, представленных стандартной структурой QT QMap <QString, float> .

После построения кривых на всех выбранных уровнях по оси z (параметры алгоритма «Уровни z») создается файл в формате интерпретатора SALOME, по ко-

торому в дальнейшем строится поверхность. Выходной файл формируется следующим образом.

В качестве первых двух строк в файл добавляются:

import salome (импорт модуля SALOME);

import geompy (импорт модуля работы с геометрическими примитивами).

Каждая точка, участвующая в построении кривой, задается строкой следующего вида:

OOpid = geompy.MakeVertex(x, y, z), где pid - идентификатор точки; x, y, z - координаты точки, взятые из таблицы points по идентификатору точки;

e = geompy.MakeInterpol([OOpid1, OOpid2, OOpid3, ..., OOpidn],True);

geompy.addToStudy(e, «lable»), где n - количество точек, участвующих в построении кривой; pid« - идентификатор и-й точки; lable - название кривой в SALOME.

В тексте программы этому блоку соответствует функция exp.

4. ИСПОЛЬЗУЕМЫЕ ТЕХНИЧЕСКИЕ СРЕДСТВА

Программа функционирует под управлением операционных систем Windows XP SP3 и Linux RedHat release 4 на клиентской персональной ЭВМ не хуже ADM Phenom II X4 810/DDR3 2048 Mb/SVGA 896 Mb nVidia 260GT/HDD 500 Gb.

5. ВЫЗОВ И ЗАГРУЗКА

Для запуска программы необходимо из корневой директории запустить файл «modelConvertor», после чего на дисплее появится окно интерфейса пользователя (рис. 1).

6. ВХОДНЫЕ ДАННЫЕ

Входными данными для программы является файл в формате ANSI STL, который описывает поверхностную геометрию модели с помощью треугольной сетки. Таким образом, файл содержит координаты множества треугольников, из которых состоит модель. Имя файла должно иметь вид nem.stl, где nem - имя файла.

Также входными данными программы являются параметры, которые задаются пользователем в интерфейсном окне.

Параметр «Округление» позволяет задать шаг, с которым работал томограф, чтобы пропустить пустые уровни в .stl-файле, задается положительным целым числом в мм.

Параметр «Порог» - это длина вектора, который ограничивает область поиска точек, задается положительным целым числом в мм.

Параметр «Угол поворота» - величины начального и конечного углов, с помощью которых ограничивается сектор поиска точек, задаются положительными целыми числами от 0 до 360 в градусах.

Параметр «Уровни по оси z» - те начальные и конечные координаты z, по которым будут строиться кривые, задается положительным целым числом в мм.

Входными данными также являются команды пользователя на выполнение одной из функций программы: «Загрузить STL», «Открыть файл», «Экспортировать точки», «Экспортировать треугольники», «Рассчитать кривые», «Экспортировать кривые».

7. ВЫХОДНЫЕ ДАННЫЕ

Выходными данными является файл в формате интерпретатора SALOME, содержащий в зависимости от выбранной задачи информацию либо о точках модели, либо о треугольниках, либо о построенных кривых. Имя файла имеет вид namel.py, где namel - имя файла, вводимое пользователем при сохранении (по умолчанию оно равно name - имени вводимого файла).

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

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

ЛИТЕРАТУРА

1. Embrechts, P., Lindskog F., McNeil A. Modelling Dependence with Copulas and Applications to Risk Management (Ch. 8) // Handbook of Heavy Tailed Distributions in Finance. Amsterdam: Elsevier, 2003. P. 329-384.

2. Hernandez-Campos F., Jeffay K.F., Park C., Marron J.S., Resnick S.I. Extreme dependence: Internet traffic applications // Stochastic Models. Taylor, Taylor & Francis, 2005. V. 22 (1). P. 1-35.

3. Kun Ch.L., Hedemann J. On the correlation of Internet flow characteristics: Technical report ISI-TR-574, USC / Information Sciences Institute. 2003. July.

4. Nelsen R.B. An Introduction to Copulas. 2-nd ed. N. Y.: Springer,

2006. 270 p.

5. Zhang Y., Breslay L., Paxson V., Shenker S. On the Characteristics and Origins of Internet Flow Rates. Pittsburgh, 2002.

6. Abega F., Naik-Nimbalkar U.V. Modelling statistical dependence of Markov chains via copula models // Journal of statistical planning and inference. 2008. V. 138 (4). P. 1131-1146.

7. Breymann, W., Dias A., Embrechts P. Dependence structures for multivariate high-frequency data in finance // Quantitative Finance. 2003. V. 3 (1). P. 1-16.

8. Embrechts P., Hoeing A., Juri A. Using Copulae to bind the Value-at-Risk for function of dependent risk // Finance & Stochastic. 2003. V. 7 (2). P. 145-167.

9. Embrechts P., Pucetti G. Bounds for function of dependent risk // Finance & Stochastic. 2006. V. 10. P. 341-352.

10. Pettere G. Stochastic Risk Capital Model for Insurance Company // Applied Stochastic Models and Data Analysis: Proceedings of the XIIth International Conference (Chania, Crete, Greece. May 29, 30, 31 and June 1, 2007). Chania, 2007.

11. Dudin A.N., Klimenok V.I. Queueing Systems with Correlated Flow. Minsk: Belarusian State University, 2000. 175 p. (In Russian).

Поступила в редакцию 14 мая 2012 г.

Yamshikov O.N., Norkin I.A., Markov D.A., Abdulnasi-rov R.K., Peregorodov D.N., Zaigralov A.Yu. COMPUTER MODELING OF HUMAN FEMUR

The article discusses the possibility of computer simulation of a human femur with a detailed description of the software.

Key words: computer modeling; femur; personal computer; 3D-model; mechanics.

i Надоели баннеры? Вы всегда можете отключить рекламу.