Передача информации из компьютерного рентгеновского томографа TOMOSCAN SR7000

 

Аннотация

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

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

Система прошла опытную эксплуатацию в институте хирургии им А. В. Вишневского в рамках проекта «телемедицина». Отчетные материалы к дипломному проекту включают пояснительную записку, 3 приложения и графический материал.

Содержание.

Аннотация______________________________________ 1

Введение_______________________________________ 4

Обзор литературы______________________________ 7

Разработки телемедицины в мире________________________ 7

Необходимость “телемедицины” в России_________________ 9

Задачи здравоохранения, решаемые с применением телемедицинских технологий 12

Формы применения телемедицинских технологий для решения задач здравоохранения______________________________________ 15

Приложения телемедицины в клинической практике______ 16

Требования к передаче телемединформации______________ 17

Анализ возможности передачи медицинских данных существующими программно – аппаратными средствами 20

Подключение компьютерного рентгеновского томографа TOMOSCAN SR7000_______________________________ 23

Компьютерный рентгеновский томограф_________________ 25

Общие характеристики устройства________________________ 25

Принцип построения выходного сигнала__________________ 27

Устройство согласования КТ с персональным компьютером первичной обработки данных______________________________________________ 28

Формат файла получаемого изображения________________ 29

Персональный компьютер первичной обработки__________ 31

Локальная вычислительная сеть________________________ 34

Программное обеспечение и сетевое оборудование__________ 39

Персональный компьютер консультанта_________________ 41

Построение 3х мерного изображения__________ 42

Пакет срезов для восстановления 3х мерного изображения_ 45

Восстановленное трехмерное изображение с одноплоскостным срезом 51

Восстановленное трехмерное изображение с двухплоскостным вырезом 52

Восстановленное трехмерное изображение с трехплоскостным вырезом 53

Восстановленное трехмерное изображение с трехплоскостным вырезом без восстановления рельефа_______________________________ 54

Использование расчетной проекции трехмерного изображения для расчета ввода катетера_____________________________________________ 55

Заключение____________________________________ 56

Выводы и результаты:_________________________________ 57

Список литературы____________________________ 58

Приложение 1__________________________________ 60

Формат информационного поля файла изображения_______ 60

Приложение 2__________________________________ 65

Модуль формирования трехмерных изображений (С++)_____ 65

Приложение 3__________________________________ 95

Описание программы обработки изображений Ctsoft_______ 95

 

Введение

Изменение социально – экономических и экологических условий жизни с начала 90-х годов повлекло за собой ухудшение основных показателей здоровья населения. За последние 5 лет состояние здоровья характеризуется следующими негативными тенденциями:

Ø Рост в 3.5 раза насильственных и неёстественных причин смерти;

Ø Значительный уровень социально опасных и социально значимых заболеваний (онкология, туберкулез, алкоголизм, наркомания, венерические болезни, ВИЧ – инфекция грозит стать угрозой национальной безопасности);

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

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

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

Экономическая ситуация в стране изменилась таким образом, что диагностическая помощь населению регионов со стороны центральных клиник становится практически недоступной, при том, что ресурсы ведущих медицинских центров вполне позволяют оказывать эту помощь. Затраты на приезд в Москву становятся сравнимыми, а подчас и превосходят саму стоимость диагностики и лечения. Как показывает статистика широкопрофильного медицинского центра (Института хирургии им. А.В. Вишневского РАМН) до 1995 года за диагностической помощью обращалось порядка 10-12 тыс. пациентов в год из различных регионов страны, сейчас это количество упало до 1 тыс., при этом Институт в год проводит обследования до 70 тыс. пациентов (москвичи) и в состоянии довести это число до 120-150 тыс.

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

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

Выполнение перечисленных выше задач невозможно без технической базы, которая должна быть реализована в каждом медицинском учреждении, входящим в проект «телемедицина». Эта техническая база должна включать в себя парк персональных компьютеров, объединенных в единую сеть с централизованной базой данных, подключением к медицинским диагностическим установкам и иметь выход на внешние линии связи.

Ø Темой нашего дипломного проекта была разработка: компьютерной сети для института хирургии им. Вишневского;

Ø подключение диагностического оборудования к этой сети;

Ø организация видеоконференций;

Ø программного обеспечения для передачи данных с медицинских установок (УЗИ, томограф и т.п.).

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


Обзор литературы

Разработки телемедицины в мире

Первой страной, поставившей телемедицину на практические рельсы стала Норвегия, где имеется большое количество труднодоступных для традиционной медицинской помощь мест. Второй проект был осуществлен во Франции для моряков гражданского и военного флотов. А сегодня уже трудно назвать западно — европейскую и американскую страну, где бы не развивались телемедицинские проекты, причем особый размах нарастание сеансов «телемедицины» получило в США.[8]

Получают развитие и международные сети медицинских телекоммуникаций, направленных на разные цели: система “Satellife” для распространения медицинских знаний в развивающихся странах и подготовки кадров, “Planet Heres” — предложенная ВОЗ система глобальных научных телекоммуникаций, международной научной экспертизы и координации научных программ, другие системы и сети.

Толчком к развитию телемедицины стало и то, что быстрый прогресс современных методов исследования привел реально к социально неприятному следствию: отставанию уровня диагностики в учреждениях практического здравоохранения в регионах сколь угодно развитой страны от центральных исследовательских и клинических медицинских центров. И по мере бурного развития медицинской науки этот разрыв не сокращается, а увеличивается. Поэтому стратегически важной задачей во многих странах стала организация принципиально нового взаимодействия работников практического здравоохранения с центральными научно—диагностическими учреждениями, направленного на обеспечение эффективной, высококвалифицированной и эшелонированной медико — санитарной помощи.[5]



Необходимость “телемедицины” в России

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

1. Разрыв между уровнем диагностики в сети практического здравоохранения и в ведущих медицинских центрах России больше, чем в Германии, Франции или США. Десять лет назад это было связано с большой разницей в уровне оснащения, сегодня – с системным кризисом здравоохранения, резким сокращением финансирования, буквальным «отрывом» периферии от центра.

2. Социально—экономические изменения в стране сделали диагностическую и консультативную помощь населению регионов со стороны центральных клиник практически недоступной, при том, что ресурсы ведущих медицинских центров вполне позволяют оказывать эту помощь. Затраты на приезд в Москву становятся сравнимыми, а подчас и превосходят саму стоимость диагностики и лечения. Социальное напряжение в регионах и их претензии к центру растут, способствуя и росту центробежных тенденций.

3. В случае, если заболевание попадает в разряд бюджетной или страховой медицины и обходится больному бесплатно, пациент обычно находится в региональной клинике 10—15 дней и в результате диагностики устанавливается, что ему могут помочь только в центре. Он направляется в центр, госпитализируется, и процесс диагностики повторяется в течение тех же 10 — 15 дней. Это неоправданное расходование ресурсов может быть предотвращено за счет дистанционного консилиума при унификации диагностических процедур на базе современной техники и полноценной передачи диагностической информации.

4. Между тем страна связывалась воедино разными способами, в т.ч. и эшелонированной системой медицинской помощи как в годы мира. так и войны. Это было основой военно — медицинской доктрины периода ВОВ, специализированной помощи в послевоенные годы. Эта психология воспринята народом. Сегодня эта доктрина разрушена, управленческая вертикаль разрушена. Но разрушена и методологическая вертикаль медицинской помощи, разрушено единство научного сообщества.[7]

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

Это скачок в новую информационную эпоху, причем вполне вероятно, что в России телемедицина даст даже больший эффект, чем за рубежом, именно в силу наших традиций и менталитета. При этом могут быть использованы традиционные преимущества системы здравоохранения, при которой звенья первичной медико—санитарной помощи (ПМСП) выдвигаются как можно ближе к населению, туда, где люди живут и работают, а специализированная и высококвалифицированная помощь оказывается в тех городах, где для организации такой помощи имеются финансовые и техническое возможности и где численность населения обеспечивает достаточное количество сложных клинических случаев заболеваний.

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

Реализация проекта “Телемедицина” позволит повысить уровень медико—санитарной помощи населению, обеспечить ускоренный рост научно—практического потенциала медицинских учреждений регионов.[17]



Задачи здравоохранения, решаемые с применением телемедицинских технологий

Возможности использования телемедицины разнообразны и раскрываются по мере накопления опыта, они, несомненно, могут оказать значительное воздействие на решение всех функций системы здравоохранения: на развитие и координацию науки, профилактику заболеваний, экстренную и плановую помощь при заболеваниях, подготовку и усовершенствование кадров, маневрирование материально—техническими ресурсами, управление системой и повышение эффективности ее функционирования как в чрезвычайных ситуациях, так и при решении типовых задач в плановом порядке.[18]

В самом общем виде можно сказать, что здравоохранение нуждается в обработке больших массивов информации и телекоммуникациях для:

Ø Мониторинга и оценки состояния и динамики здоровья населения, в т.ч. наиболее угрожаемых групп и отдельных людей, а также факторов внешней природной и социальной Среды, влияющих на здоровье населения;

Ø Мониторинга состояния системы здравоохранения, ее резервов и готовности к решению текущих и экстренных проблем;

Ø Обеспечения эффективной первичной медико—санитарной помощи (ПМСП) для всех (в любое время, в удаленных и труднодоступных местах)

Ø Обеспечения высоквалифицированной немедленной медико—санитарной помощи (МСП) в экстренных ситуациях (повсеместно).

Ø Обеспечения плановой методологической поддержки региональным и местным органам и учреждениям здравоохранения со стороны центральных (федеральных и других) научно—исследовательских, клинических и организационных центров в решении сложных проблем диагностики, лечения и профилактики заболеваний.

Ø Подготовки и усовершенствования медицинских кадров.[13]







Станции глобальной связи

 

Локальный сервер клиники

 

Локальные рабочие станции

 
 





Формы применения телемедицинских технологий для решения задач здравоохранения

Ø Телеконференции (научные и научно—практические, методологические и др.)

Ø Телеконсилиумы (двух— и многосторонние)

Ø Консультации и организационная помощь при экстренных и чрезвычайных ситуациях (бедствия, аварии, травмы, эпидвспышки и др.)

Ø Дистанционный мониторинг больных (ЭКГ и пр.)

Ø Автоматизированные истории болезни (что особенно важно в страховой медицине). При необходимости может осуществляться передача содержащейся в них информации (при переезде пациента в другой город, при заочных консультациях и пр.), включая передачу неискаженных изображений (ЭКГ, рентгенограммы, УЗИ, лабораторные данные, др.)

Ø Теледоступ в научные Базы данных в центральных учреждениях России, стран СНГ и в зарубежных научных центрах.

Ø Взаимодействие с Международными сетями и системами телемедицины и телекоммуникаций (ВОЗ, НИЗ, др.).[12]


Приложения телемедицины в клинической практике

 


 


Требования к передаче телемединформации

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

Поэтому системы телемедицины (СТМ) должны быть готовы к передаче (без потери качества) следующих видов информации: изображения, получаемые с диагностической аппаратуры, аналоговые сигналы, таблицы закодированной информации и/или свободный текст.[16]

Необходимы единые стандарты для объединения разнородных форматов изображений и создания единого цифрового набора для его дальнейшей пересылки. Существующие в Германии "Sienet", в США "PAКS" и другие еще не удовлетворительны по "интеллектуальной" наполненности , поэтому аналогичные подходы развиваются в России (в МГУ, ИКИ и др.) на уровне, заметно превосходящем упомянутые коммерческие системы.

Требования к аппаратуре для передачи и воспроизведения изображений высоки. При воспроизведении компьютерно—томографических, рентгеновских и ультразвуковых изображений необходимы не менее 256 градаций "серого" цвета. Высокой должна быть и скорость передачи изображений. Поэтому во избежание быстрого морального старения системы необходимо закладывать скорость передачи порядка 2,048 мБит/с.

Существенную часть информации о больном составляют аналоговые сигналы (ЭКГ, ЭЭГ, реограммы и др.), которые практически повсеместно эти кривые оцифровываются до введения в компьютер. Частотный диапазон всех физиологических сигналов не превышает 1 кГц, обычно у одного пациента регистрируется несколько (от 2 до 5) аналоговых кривых. Здесь будет требоваться разработка протоколов обмена информацией и стандартов на форматы передачи данных.

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

Передача свободных текстов не предъявляет особых требований к системе передачи информации, но избежать передачи свободных текстов не удастся, т.к. не вся медицинская информация может быть формализована и закодирована.[15]

Для эффективной диагностики заболеваний (особенно хирургических) на одного пациента требуется получение от 3 до 20 изображений разного характера. Так, например, для диагностики опухолей печени и поджелудочной железы требуются компьютерно—томографическое, ультразвуковое, ангиографическое исследования одновременно. Для диагностики сердечных и сосудистых заболеваний необходимы рентгеновские, магниторезонансные, ангиографические исследования.


Анализ возможности передачи медицинских данных существующими программно – аппаратными средствами

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

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

2. Проблема сопряжения диагностического оборудования с системами передачи информации.

3. Проблема передачи полученной информации к «удаленным» пользователям.

Первая проблема связана в первую очередь с психологией восприятия специалистами – врачами результатов получаемых от медицинских диагностических установок, т.е. они чаще всего, не подготовлены к работе с альтернативными вариантами предоставления медицинской, такими как, например, изображение на мониторе персонального компьютера. В связи с этим информация, с которой предполагается работать на персональных компьютерах, должна быть предоставлена в «привычном» для специалистов виде. Кроме того, программа обработки информации, должна быть простой в использовании и интуитивно понятной, что позволит сократить время адаптации и обеспечить быструю возможность перехода к работе с новыми методами предоставления медицинских данных.

Вторая проблема связана с тем, что не существует единого стандарта формата предоставления и хранения медицинских данных. Фирмы – разработчики медицинского оборудования основываются на собственных стандартах, которые закрыты, зачастую несовместимы с аналогичными системами других фирм, и могут изменяться в последующих разработках и модификациях уже существующего оборудования. Попытки стандартизирования форматов хранения и отображения медицинских данных привели к появлению нескольких стандартов, наиболее известным из которых является DICOM3, но которые всеобщего распространения не получили. Исходя из всего выше сказанного, можно заключить, что каждая медицинская диагностическая установка требует индивидуального подхода для обеспечения возможности передачи информации.

Также существует ряд проблем возникающих при попытках обеспечения высокого качества передаваемой медицинской информации, связанных с тем, что современные программно – аппаратные средства не специализированы для передачи данных подобного рода. Это накладывает определенные требования к подбору оборудования для передачи информации из медицинской диагностической аппаратуры на персональные ЭВМ. Специализированных (стандартных) программных средств, предназначенных для обработки медицинской информации (изображений) на персональных ЭВМ на данный момент практически не существует. Использование программ общего назначения, для работы с медицинскими данными, практически невозможно. Это связано с тем, что требуется высокий уровень специальной подготовки специалистов – врачей, и требования, предъявляемые к персональным ЭВМ, для установки программ такого класса, неоправданно высоки, что практически невозможно из-за неоправданно высоких материальных и временных затрат.

Третья проблема связана с ограничениями, накладываемыми на передаваемую информацию, современными средствами связи. Медицинские данные (изображения, звук, видео) невозможно передавать в «реальном времени» по современным каналам связи, с тем качеством, которое требуется для удовлетворительной работы специалиста. Объемы информации требуют разработки специальных алгоритмов сжатия данных и выработки новых методик передачи информации.

Предлагаемые методы решения вышеперечисленных проблем описаны в настоящем дипломном проекте на базе подключения для передачи данных компьютерного рентгеновского томографа TOMOSCAN SR7000 к персональному компьютеру с последующей передачей данных по компьютерной сети.



Подключение компьютерного рентгеновского томографа TOMOSCAN SR7000

В связи с тем, что для осуществления удаленных консультаций необходимо качественная передача данных от медицинских установок к специалистам, к оборудованию захвата, передачи и отображения информации предъявляются определенные требования, которые будут рассмотрены ниже. Общая схема передачи изображения от компьютерного рентгеновского томографа к врачу – консультанту представлена на рис 1.

рис. 1 Общая схема передачи изображения от КТ к врачу - консультанту.

Исходя из схемы, можно выделить основные рабочие блоки:

1. Компьютерный рентгеновский томограф.

2. Устройство согласования компьютерного томографа с персональным компьютером первичной обработки данных.

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

4. Устройства передачи данных по компьютерной сети.

5. Персональный компьютер конечного пользователя (консультанта).

Основными предпосылками для создания данной схемы послужило то, что захват изображения с медицинских установок (в данном дипломе – компьютерного томографа (в дальнейшем КТ)), осуществляется через сетевой адаптер (NE2000). Сетевой адаптеры установлены в компьютере первичного пользователя и специализированной графической станцией КТ. Первичный пользователь, осуществляющий управление КТ, обеспечивает захват изображения с КТ и передачу его на персональный компьютер. Далее с персонального компьютера первичного пользователя осуществляется передача изображения по сети до конечного пользователя. В случае необходимости, через сеть может быть организована телеконференция между первичным и конечным пользователями. Предусматривается также передача изображения в базу данных локальной сети первичного пользователя с последующей дальнейшей пересылкой в базу данных сети конечного пользователя, если осуществляется консультация специалистов в различных медицинских учреждениях. Или в общую базу данных локальной сети одного медицинского учреждения, в том случае, когда первичный и конечный пользователь работают в рамках одного медицинского учреждения.

Далее будут рассмотрены отдельные блоки данной схемы.


Компьютерный рентгеновский томограф

Общие характеристики устройства

В данном дипломном проекте описан процесс передачи изображения с компьютерного рентгеновского томографа, фирмы PHILIPS TOMOSCAN SR7000, имеющего следующие характеристики:

Технические характеристики:

Скорость сканирования:

Частичный поворот (2300)

0.6 сек.


Полный поворот

1.0; 2.0 и 4.0 сек.


Режимы сканирования:

Одинарный режим сканирования.


Последовательный режим сканирования.


Режим быстрого сканирования.


Режим динамического сканирования.


Режим объемного сканирования.


Время цикла сканирования:

Время сканир.

Время цикла сканирования


Серия

Быстрое

Динамическое


0мм

10мм


0.6 сек.

7 сек.

4 сек.




1.0 сек.

6 сек.

4 сек.

1 сек.

4 сек.


2.0 сек.

12 сек.

5 сек.

2 сек.

5 сек.


4.0 сек.

14 сек.

7 сек.

4 сек.

7 сек.


Толщина среза:

1.5; 3; 5 и 10 мм.


Видимое поле сканирования:

160; 200; 250; 300; 350; 420; 480 мм.


Разрешающая способность:

0.03 в 1.5 мм.


Напряжение на трубке

100; 120 и 140 кВ.


Время сканирования

Максимальный ток в мА.

Малый фокус; 1.5 мм

Большой фокус; 3, 5, 10 мм

100 кВ

120 кВ

140 кВ

100 кВ

120 кВ

140 кВ

£2 сек.

250

200

175

400

400

300

4 сек.

200

175

150

400

400

300


Объем операций

Время сканирования

Количество расчетов

Объем отображений

0.6 сек.

364,000

480

1.0 сек.

570,000

750

2.0 сек.

1,140,000

1500

4.0 сек.

2,280,000

3000


Система расчета:

Многопроцессорная система для системы контроля, отображения и архивирования; 68020 микроконтроллеров в шине VME, 3 процессора обработки изображений обслуживаются 68000 микроконтроллеров.


Память:

56 Мбайт оперативной памяти; 8 Мбайт памяти процессора; 4 Мбайт видеопамяти; 64 Мбайт буферной памяти.


Матрица реконструкции:

3202; 5122;



Принцип построения выходного сигнала

Основной принцип построения изображения КТ осуществляется сканирования излучения рентгеновской трубки детекторами. Характерное число детекторов 512 (1024). Система трубка – детекторы, вращаются на 3600 вокруг исследуемого объекта. При это происходит сканирование 360 – 1200 проекций (ракурсов), с шагом соответственно 1 – 0,30. В процессе поворота рентгеновская трубка стреляет с длительностью 5 – 10 мс. Время полного поворота системы 2 – 10 сек. Полученные сигналы поступают на коммутатор, с которого подаются на АЦП, и передаются в специализированную компьютерную систему. Переданные сигналы проходят специальную обработку, в результате которой получаются изображения, которые и подаются на монитор КТ и сохраняются на диске компьютерной системы. Из данной системы можно осуществить передачу полученных изображений в персональный компьютер для дальнейшей обработки и передачи по сети. Это можно осуществить следующими способами:

Ø Осуществить захват через видео выход монитора КТ с помощью frame grabber’а. (Способ, использующийся, только в крайнем случае, т.к. происходит потеря информации);

Ø Через компьютерную сеть, подключая специализированный компьютер КТ через Ethernet выход, к ПК или, для «старых» томографов, через специально разработанные сетевые платы.

Сетевая плата, через которую осуществляется подключение КТ и передача изображения, описана ниже.


Устройство согласования КТ с персональным компьютером первичной обработки данных

Для согласования КТ с персональным компьютером первичного пользователя используется сетевой адаптер (сетевая карта), которой предъявляются определенные требования по совместимости и скорости передачи данных. Сетевой адаптер должен быть совместим с системами SUN station и совместим с сетями, работающими под управлением Windows NT 4.0. А также сетевой адаптер должен обеспечивать скорость передачи данных не менее 3Мбит/сек. Это обусловлено размером картинки 1024 * 1280 пикселей и 256 градаций серого, что требует скорости передачи пакета изображений – 2,048 Мбит/сек. Учитывая, что по сети также проходят протоколы проверки минимальная скорость передачи, как указывалось выше, должна составлять 3Мбит/сек. Данным требованиям удовлетворяет сетевая карта NE2000, характеристики которой представлены ниже:

Изготовитель:

NOVELL
INCORPORATED

Протокол,
Скорость

Ethernet,
10 Мбит/сек

Топология

шина

Тип шины,
Разрядность

ISA, 16 бит

Тип выхода

RG – 58A/U (BNC)
DB – 15 (AUI)

Удаленная
загрузка

возможна


Формат файла получаемого изображения

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

рис. 2 Формат файла изображения.

Два килобайта в данном файле выделяются под информационное поле. В этом поле содержится:

Ø Идентификация пациента;

Ø Режимы, в которых было получено изображение;

Ø Размер матрицы изображения Nx, Ny;

Ø Дата исследования;

Ø Разрешение изображения (бит/пиксель);

Ø Индивидуальный номер изображения;

(Полная информация о содержании информационного поля представлена в приложении 1).

Далее следует матрица значений, содержащая в себе само изображение в специализированном формате.

Имя файла изображения, тоже имеет специализированный формат, показанный на рис. 3.

рис. 3 Формат заголовка файла изображения.

В имени файла, первый символ ( i или p ) указывает на метод сохранения файла. ( p – с сжатием, i – без сжатия ). Последующие 7 символов являются уникальным номером пациента или исследования (в зависимости от того, где применяется данная программа). В расширении файла, первый символ указывает на номер исследования, последующие две указывают на номер среза (измерения).


Персональный компьютер первичной обработки

Основные требования, предъявляемые к персональным компьютерам, осуществляемым первичную обработку данных, с дальнейшей их пересылкой по сети можно разделить на 3 группы:

1. Осуществление быстрой и качественной передачи данных из компьютерного томографа в персональный компьютер.

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

3. Осуществление быстрой передачи данных в компьютерную сеть для осуществления дальнейшей обработки.

В компьютере должна быть установлена система, обеспечивающая возможность организации телеконференции с удаленным пользователем в реальном времени. Обеспечена возможность подключения печатающего устройства и устройства архивации данных. Очень высокие требования выдвигаются к визуализации изображения, полученного с компьютерного рентгеновского томографа. Разрешение картинки должно быть не менее 1280 х 1024, и цветностью в 16 тыс. цветов (256 градаций серого). Для обеспечения возможности быстрого отображения, видеокарта должна содержать не менее 8 Мбайт памяти. Монитор должен поддерживать данное разрешение и обеспечивать частоту развертки не менее 75 гц. Размер зерна не более 0.26 dpi, и иметь размер диагонали не менее 15 дюймов. Необходимость обеспечения быстрой обработки данных должно быть обеспечено за счет высокопроизводительной системы на базе микропроцессора Pentium II, с тактовой частотой не менее 500 МГц, наличие 128 и более Мбайт памяти. Для временного хранения информации в персональном компьютере должен быть установлен жесткий диск размером не менее 3.2 Гбайта, поддерживающий стандарт Ultra SCSI2. Для обеспечения надежности передачи и сохранности информации к персональному компьютеру должен быть подключен источник бесперебойного питания. Для высокоскоростной передачи данных по сети, в персональном компьютере должна быть установлена сетевая карта со скоростью передачи не менее 10 Мбит/сек. Для обеспечения телеконференции в компьютере должен быть установлен frame grabber с поддержкой формата сжатия видео сигнала MJPEG и встроенным звуком. Для обеспечения возможности архивации данных в нештатных ситуациях в ПК должно быть предусмотрено подключение ZIP драйвера, для сохранения информации на магнитном ленточном носителе. Исходя из всего вышесказанного, приблизительная конфигурация ПК первичной обработки информации представлена в таблице 1.

Для обеспечения работы ПК на нем устанавливается операционная система WindowsNT Workstation. А так же программное обеспечение управления видеоконференциями (Microsoft NetMeteeng или подобная). А также специализированна независимая сервисно – диагностическая консоль для управления и обработки поступающей медицинской информации.


Таблица 1 Комплектация компьютера первичного пользователя.

Корпус

ATX 80List (InWin A500)

Processor

Pentium II 400

Matherboard

ASUS P2B - D

Ram

256 Mb

HDD first

SCSI WDE 4550 – 0025

HDD second

SCSI Wde 18300 – AV0038

SCSI controller

ADAPTEC AHA – 8945

VideoCard

I740

Network Card

Fast EthernLink XL PCI TX – 3C9005B – TX

Monitor

ViewSonic “GA655”

Mouse

Стандартная мышь PS/2



Видеоконференции:

 

Плата

miroVideo DC30 plus

Камера

MUSTEK VidCam


Локальная вычислительная сеть

Локальная вычислительная сеть представляет собой высокоскоростное соединение различных устройств, таких как сервера, рабочие станции и периферийные устройства (принтеры, модемы и т.п.), с общей средой передачи. Что позволяет распределять информацию и ресурсы ЛВС между пользователями.

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

Локальная сеть института предназначена для:

Ø Обеспечения общего доступа к базам данных и другой медицинской информации;

Ø Передача и обработка видеоинформации;

Ø Обеспечение аудиовизуального взаимодействия сотрудников института в реальном времени. с помощью системы видеоконференций;

Ø Предоставление доступа к ресурсам Интернет;

Ø Предоставление услуг электронной почты.

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

Изображение в аналоговом видео состоит из 625 для PAL/SECAM (525 для NTSC) строк и состоит из 2 полей по 312,5 (262,5). За 1 секунду передаются 25 (30) кадров или 50 (60) полей. Полоса, занимаемая видеосигналом достигает, 6 МГц.

В цифровом ТВ принято разбиение одного ТВ кадра на picsели, что наиболее удобно для дальнейшей цифровой обработки. Каждый ТВ кадр разбивается на 768 точек по горизонтали и 576 точек по вертикали для сигналов PAL/SECAM (640 на 480 для NTSC) при стандартном для ТВ соотношении ширины к высоте изображения равным 4:3. Таким образом, получается два полукадра (поля) с разрешением 384Х288 (320Х240 для NTSC) при частоте 50(60) полей или 25(30) кадров в секунду. Для передачи цвета используется принцип сложения основных цветов: красного(R), синего(B) и зеленого(G) цветов. Цветной ТВ сигнал состоит из яркостной (Y) и двух цветоразностных (R-Y и B-Y) составляющих. Для этого используя специальные схемы суммирования из трех составляющих (Y, R-Y и B-Y) восстанавливают исходные составляющие цвета красный (R), синий (B) и зеленый (G) цвета, которые подаются на соответствующие электронные пушки кинескопа.

Для полного восприятия информации о яркости и цвете необходимо каждую точку изображения передавать как минимум 256 уровнями или 8 битным кодированием. Каждая точка цветного видеоизображения должна кодироваться 24 разрядным словом (8 бит Х 3 составляющие) или по компьютерной терминологии 24 бит/picsель (24bpp). Таким образом, перемножив 24х768х576х25 получаем цифровой поток в 265420800 бит/сек или около 265 Мбит/сек для сигналов PAL/SECAM (221 Мбит/сек NTSC).

Практически кодирование ТВ сигнала происходит несколько иначе, учитывая, что для передачи ТВ изображения используется формат Y, R-Y, B-Y, то по сигналу Y производится полное кодирование (8 бит по 768х576 pics), а по сигналам R-Y и B-Y кодируется либо половина (8 бит по 384х288 pics), либо четверть (8 бит по 192х144 pics) для каждого из сигналов R-Y и B-Y. Для простоты используется запись в виде дроби 4:2:2 (иногда 8:4:4) или 4:1:1 (8:2:2). Следует иметь в виду, что данная дробная запись говорит о количественном соотношении кодируемых точек. Разрядность кодирования каждой точки всегда равна 8, иногда и больше. Перемножив полученные данные, получаем цифровой поток до 177 Мбит/сек для разрешения 4:2:2 и около 111 Мбит/сек для 4:1:1 (Все данные приведены для разрешения PAL/SECAM 768х576х25 кадр/сек).

Для ограничения цифрового потока видеоданных используют алгоритмы сжатия(компрессии). В основном используется два вида очень схожих между собой метода компрессии. Это метод M-JPEC, основанный на графическом формате JPEG, и MPEG (в разных вариациях). Оба метода основаны на дискретно-косинусном преобразовании (DCT) изображения разбитого на блоки. Разница этих методов заключается в исключении избыточной информации из исходного видеоизображения. Если M-JPEG использует только внутрикадровую избыточность (так называемую пространственную), то формат MPEG дополнительно использует и межкадровую избыточность (временную). Сжатие характеризуется коэффициентом компрессии - качественным соотношением между исходным и полученным кадром исходя из необходимости сохранения качества исходного изображения и ограничения цифрового потока видеоданных. На практике применяются коэффициенты от 1:1 (без сжатия) до 20:1 (сжатие исходного кадра в 20 раз). Это соответствует качеству ТВ сигнала от эталона (1:1) до стандарта VHS (20:1).

С учетом сжатия видеосигнала, формату видеозаписи VHS(стандарт PAL, оцифровка 768х576, 384х576 или 384х288, 8 бит 4:2:2) соответствует цифровой поток до 24 Мбит/сек.

Формату видеозаписи SVHS или DV/DVCAM (Стандарт PAL, оцифровка 768х576 8 бит 4:2:2 для SVHS и 4:1:1 или 4:2:0 для DV/DVCAM/DVCPRO) соответствует цифровой поток от 24 Мбит/сек.

Система видеоконференций с разрешением 640х480х25(30) кадров/сек дает цифровой поток 128-512 кбит/с (0,12 – 0,5 Мбит/сек). Рекомендуется для проведения видеоконференций уровня предприятия использовать полосу пропускания 384 кбит/с (0,4 Мбит/сек).

Соответственно, общий цифровой поток ~ 25 Мбит/сек.

Локальная вычислительная сеть способна обеспечить высокую пропускную способность, а следовательно, высокое качество изображения и звука. Однако традиционные ЛВС представляют собой сети с разделяемой средой передачи, т.е. когда одно из устройств передает данные в сеть, все остальные должны ждать окончания передачи, не делая попыток передать в сеть свои данные(доступ сетевых устройств к среде передачи регулируется сетевыми стандартами). Однако широкая полоса пропускания используется и для передачи других потоков данных, а соответственно, возможны задержки передачи, к которым видеопотоки крайне чувствительны, поэтому оптимальным решением является коммутируемая ЛВС. Преимущества коммутации заключаются в сегментировании сетей - делении их на более мелкие фрагменты со значительным снижением числа станций в каждом сегменте. Изоляция трафика в небольшом сегменте приводит к многократному расширению доступной каждому пользователю полосы, а поддержка виртуальных ЛВС (VLAN) значительно повышает гибкость системы. Для обеспечения передачи цифрового потока без задержек необходима полоса пропускания 100/1000 Мбит/сек. Оптимальным решением является сеть Fast Ethernet(10/100Base-TX)/Gigabit Ethernet (1000Base-SX). На уровне сегмента обеспечивается скорость передачи 100 Мбит/сек, на уровне здания 1000 Мбит/сек.

Данная сеть характеризуется следующими параметрами:

Ø Топология сети – “звезда”;

Ø Архитектура сети: “Клиент - Сервер/Файл – Сервер”;

Ø Основной сетевой протокол TCP/IP;

Ø Физическая среда передачи – кабель на основе неэкранированной витой пары (UTP 5 категории) и многомодовый оптоволоконный кабель.

Ø Коммутаторы с высокоскоростной шиной и разделяемой памятью.

Ø Возможность объединения сетей Fast Ehernet и ATM



Программное обеспечение и сетевое оборудование

1. Программное обеспечение для управления и работы с серверами и рабочими станциями:

1. Сетевая ОС - Windows NT Server 4.0

2. Клиентская ОС - Windows NT Workstation 4.0

3. Сервер БД - MS SQL Server 7.0

4. Почтовый сервер - MS Exhange Server 5.5

В качестве программного обеспечения для работы с базами данных и сетью можно использовать пакет MS Back Office - 4.0 (Включет в себя NT Server, SQL Server 7.0 Exhange Server 5.5, SMS 2.0, IIS, SNA Server)

2. Программное обеспечение для управления сетью.

1. MS SMS 2.0 - Мониторинг сети и рабочих станций, управление рабочими станциями, установка ПО по сети

2. Программное обеспечение фирмы 3Сom - Transcend Network Control Services(включает сл. продукты Transcend Enterprise Manager и Transcend Workgroup Manager), Traffix Manager - позволяют управлять сетевыми устройствами, анализировать трафик и статистику приложений, управлять работой сети(реализуется редствами протоколаRMON/RMON2).
Все программное обеспечение работает под управлением
Windows NT Server, Transcend Network Control так же работает под управлением Sun Solstice Domain Manager.

3. Сетевое оборудование фирмы 3Com: Коммутаторы серии: SuperStack II 3300 для Ehernet 10/100 Base-TX (витая пара 5 категории, разъем RJ 45), SuperStack II 9000/9300 для Ehernet 100/100 Base-SX (многомодовое оптоволокно).


Персональный компьютер консультанта

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

Таблица 2 Комплектация персонального компьютера консультанта.

Корпус

ATX 80List (InWin A500)

Processor

Pentium II 500

Matherboard

ASUS P2B - D

Ram

256 Mb

HDD first

SCSI WDE 4550 – 0025

HDD second

SCSI Wde 18300 – AV0038

SCSI controller

ADAPTEC AHA – 8945

VideoCard

I740

Network Card

Fast EthernLink XL PCI TX – 3C9005B – TX

Monitor

ViewSonic “GA771”

Mouse

Стандартная мышь PS/2



Видеоконференции:

 

Плата

miroVideo DC30 plus

Камера

MUSTEK VidCam



Построение 3х мерного изображения

В процессе проведений исследований на компьютерном рентгеновском томографе получается пакет изображений (срезов), которые несут в себе точную метрологическую информацию. Принцип работы КТ предполагает получение срезов с точно выверенным шагом. При наличии достаточно большого количества срезов и зная шаг, с которым они производились можно восстановить 3х мерное изображение исследуемого объекта. Это может быть необходимо для предоставлении информации о форме и структуре объекта.

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

рис. 4 Структурная схема построения 3х мерного изображения.

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

Далее в данном разделе будет показан пакет срезов из которых произведено восстановление 3х мерного изображения.


Пакет срезов для восстановления 3х мерного изображения



Восстановленное трехмерное изображение с одноплоскостным срезом


Восстановленное трехмерное изображение с двухплоскостным вырезом


Восстановленное трехмерное изображение с трехплоскостным вырезом


Восстановленное трехмерное изображение с трехплоскостным вырезом без восстановления рельефа


Использование расчетной проекции трехмерного изображения для расчета ввода катетера


Заключение

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

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

Дипломная работа посвящена решению задачи подключения к сети компьютерного рентгеновского томографа
TOMOSCAN SR7000, на выходе которого появляется изображение (томограмма). Главной задачей работы была передача изображения через локальную сеть в другую часть института. Были разработаны и реализованы алгоритмы предварительной обработки изображений. На момент начала исследования в Институте хирургии им. А. В. Вишневского была начата работа по прокладке оптоволоконного кабеля между двумя зданиями: главным корпусом (в котором расположены диагностические службы) и лаб. Кибернетики (в которой расположены вычислительные мощности и внешние коммуникации). На сегодняшний день фрагмент сети, обеспечивающий передачу изображений, построен, испытан и реально функционирует.

В результате проведенного исследования получены следующие выводы и результаты.

Выводы и результаты:

1. Построена система передачи изображения из компьютерного рентгеновского томографа в ПК с последующей передачей по компьютерной сети;

2. Полученные и переданные изображения были оценены медицинскими экспертами как адекватные;

3. Установлено, что пропускная способность коммуникационного канала на удаленных моделях связи должна быть не менее
64 кб/с;

4. Установлено, что разрешающая способность при регистрации изображения должна составлять не менее 1024 * 1280, при отображении серого клина разрешение должно составлять не менее 12 бит.



Список литературы

1. A CASE OF GASTROSCHISIS, Dr. German Quevedo P, Santa Cruz de la Sierra, Bolivia, June 1 st, 1997.

2. ELEMENTS OF SUCCESS IN TELEMEDICINE PROJECTS, Mary Moor, Ph.D., October, 1996.

3. EUROPEAN COMMITTE FOR STANDARDIZATION.

4. Implementing a Telemedicine Programm Across the Mexican-U.S. Border, 1996.

5. TELEMEDICINE: ITS PLACE ON THE INFORMATION HIGHWAY, Frederic Williams and Mary Moor, 1995.

6. V.D. The Virtual Doctor - медицинские ресурсы Internet в Санкт-Петербурге.

7. Видеоконференции в российских клиниках. Е. Тимин, В. Столяр, А. Сильков. Журнал «Открытые Системы» Изд: «Открытые Системы», 1999г.

8. Журнал «Медицинская визуализация», Выпуски 1 – 4, издательство "ВИДАР" 1999.

9. Журнал Американского Международного Союза Здравоохранения, "Наше Здоровье", Том 5, Выпуск 1, Зима 1997, Раздел "Развитие информационных технологий", Марион Болл и Джудит Дуглас, Статья "Медицинская информатика: там, где встречаются технология и медицина", с. 18.

10. Журнал Американского Международного Союза Здравоохранения, "Наше Здоровье", Том 5, Выпуск 2, Весна 1997, Раздел "Активное сотрудничество", Статья "Бишкек-Канзас-Сити", с. 39.

11. Информационные технологии в охране здоровья, Санкт-Петербург, 1997.

12. Комплекс ИНФОРМАЦИОННО-ВЫЧИСЛИТЕЛЬНЫХ СЕТЕЙ "Телемедицина", Проект "КИВС-МСЧ. ТП", редакция 1, Санкт-Петербург, Февраль 1997.

13. Программа первоочередных мероприятий по реализации программы создания системы телемедицинских услуг в Российской Федерации («Телемедицина»); Главный информационно-аналитический центр при Минздраве РФ, Управление информатизации Федерального Фонда ОМС. Москва 1998г.

14. ТЕЛЕКОНФЕРЕНЦИЯ GlobChat, Copyright © 1997, Julius Edlavitch M.D., В. Теплинский, Ноябрь 1997.

15. ТЕЛЕМЕДИЦИНА - INTERNET, Copyright © 1997, Марк Стори, В. Теплинский, Январь 1997.

16. ТЕЛЕМЕДИЦИНА - АМСЗ, Copyright © 1997, В. Теплинский, Февраль, 1997.

17. Телемедицина. Новые информационные технологии на пороге XXI века; Р. М. Юсупов, Р. И. Полонников. – СПб.:СПИИРАН, 1998. – 486с.

18. ФЕДЕРАЛЬНАЯ ЦЕЛЕВАЯ ПРОГРАММА «ТЕЛЕМЕДИЦИНА»: Министерство здравоохранения Российской Федерации. Министерство науки и технологий Российской Федерации. Москва 1997г.

19. Физика визуализации изображений в медицине; т. 1 под. ред. С. Уэбба. Москва, «Мир», 1991.

 

Приложение 1

Формат информационного поля файла изображения


Позиция

Название

Значение

Описание

0

n

360

Число проекций

1

m

512

Число отсчетов в проекции

2

nx

512

Число элементов в строке изображения

3

ny

512

Число строк в изображении

4

fi

360

Угол сканирования

5

fi0

0

Начальный угол сканирования

6

r0

125

Радиус зоны обследования

7

ri

150

Радиус зоны реконструкции

8

xi

0

X-координата центра зоны реконструкции

9

yi

0

Y-координата центра зоны реконструкции

10

l

110

Уровень окна отображения

11

w

250

Ширина окна отображения

12

ko

185

Номер объекта реконструкции

13

ks

1

Номер среза реконструкции

14

no

877

Номер объекта визуализации

15

ns

5

Номер среза визуализации

16

alm

5000

Мантисса ALFA*1000

17

alex

-7

Экспонента ALFA

18

pp

400

Порядок регуляризации * 100

19

mk

9

m*2 = 2**mk

20


0

Тип: 0-CTSYS, 1- СРТ-1000М, 2- СТ1010

21

lstp

5

Шаг изменения по уровню окна

22

wstp

20

Шаг изменения по ширине окна

23

scrl

2

Шаг при сдвиге изображения по вертикали

24

ybig

0

Начальный номер строки отображения

25

rd

0

Расстояние от центра до фокуса в мм/10

26

nj

480

Число измеряемых проекций

27

mj

384

Число измеряемых отсчетов

28

nkad

32

Число кадров в фильме

29

nsl

100

Число срезов для 3D визуализации

30

xw1

20

Левая X-координата

31

yw1

65

Верхняя Y-координата

32

xw2

147

Правая X-координата

33

yw2

192

Нижняя Y-координата

34

hz

10

Шаг между слоями в мм

35

max

8000

Максимум

36

min

80

Минимум

40

surf

20

Порог плотности для выделения 3d-поверхности

41

tr

3500

Время повторения

42

te

150

неизменяемый параметр

43

ti

0

Время инверсии

44

nsli

9

Количество срезов на томограмме

45

acc

4

Количество накоплений

46

fov

300

Поле обзора

47

matx

252

X матрицы

48

maty

252

Y матрицы

49


1


50


7


51

pmin

-140

Минимум для обрезки перед упаковкой

52

pmax

220

Максимум для обрезки перед упаковкой

53

ncic

0

Количество полос длинной картинки минус 1

54

yloc

0

Количество строк полной полосы

60

sh2s

180

Сдвиг для второго слоя в микронах

61

sfd

6

Число сдвигов для прямого БПФ

62

nfd

1

(*10) Делитель для спектра

63

nfl

480

(*10) Делитель спектр*фильтр

64

sfi

6

Число сдвигов обратного БПФ

65

nfi

7

(*10) Делитель свернутых проекций

66

imgn

300

(*10) Делитель для изображения

67

?

360

Так надо ???

70

hx0


x0 - координаты прямоугольника обрезки (печать)

71

hy0

13

y0

72

hx1

47

x1

73

hy1

217

y1

74


242


75


128


76


40


77


128


78


40


79


12


80


88


81


230


82


190


83


128


84


125


85


128


86

sque

142

Параметр квадрата

89


3

Нач. отсчет (для теста каналов)

90


568

Кон. отсчет (для теста каналов)

91


6

Число отсчетов в калибровочных зонах

92


39

Рабочая зона детектора 1 и 9

93


46

2 и 10

94


53

3 и 11

95


60

4 и 12

96


67

5 и 13

97


74

6 и 14

98


81

7 и 15

99


88

8 и 16

100


527

Калибровочная зона детектора 1

101


534

2

102


541

3

103


548

4

104


9

5

105


16

6

106


23

7

107


30

8

108


513

Темновая зона детектора 1

109


520

2

110


527

3

111


534

4

112


542

5

113


549

6

114


556

7

115


563

8

116


28

mA

117


0

Угол топограммы (0-359)

118


0

Длина топограммы (512/256)

119


4590

Полная доза, mAs

120


120

Число пикселей в 10 см.

121


4620

Время сканирования (сек.*10)

122


60

Доза, mAs

123


120

Напряжение ,kV

124


4

Наклон плоскости сканирования в градусах

125


8

Толщина слоя в мм.

126


22

Позиция стола пациента в мм. от начала

127


410

Тип системы



Приложение 2

Модуль формирования трехмерных изображений (С++)

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <math.h>


#include <catwinds.h>

#include <bfiles.h>

#include <bytemap.h>

#include <groupwrd.h>

#include <scale.h>

#include <forma.h>


#include "color.h"

#include "volume.h"

#include "vectlib.h"

#include "winds.h"

#include "3d.h"

#include "3dmenu.h"

#include "win3d.h"

#include "filtr.h"

#include "config.h"

#include "ctmenu.h"

#include "language.h"


extern DragWorkField(WinHandle w, EventRecord *e);

extern HANDLE h_str(char *s);

static void redraw_user(WinHandle w);



void FlushByte(ByteHandle bh) // Надо поместить в файл BYTEMAP.C

{ Bytemap *bm = h_data(bh);

int i;

for (i=0; i<bm->nb; i++) FlushBfi(bm->bfh[i]);

h_free(bh);

}



/*==========================================================================*/

/* 3d projections */


static double Step;

int surf_level = 80;


vect X = {1,0,0}, Y = {0,1,0}, Z = {0,0,1}, O = {0,0,0};


double Cx, Cy, Cz;


enum tags {nul, and, or};



PLANE bd[] = { { { 1, 0, 0 }, -0.50, and, CBASE3 },

{ { 0, 1, 0 }, -0.50, or, CBASE2 },

{ { 0, 0, 1 }, -0.50, or, CBASE1 },


{ { 0, 1, 0 }, -0.50, nul, GRAY_BASE },


{ { 1, 0, 0 }, -1.0, and, CBASE3 },

{ { -1, 0, 0 }, 0.0, and, CBASE3 },

{ { 0, 1, 0 }, -1.0, and, CBASE2 },

{ { 0, -1, 0 }, 0.0, and, CBASE2 },

{ { 0, 0, 1 }, -1.0, and, CBASE1 },

{ { 0, 0, -1 }, 0.0, and, CBASE1 }


};

PLANE *cbd = bd;


static USGC carr[10] = {0,0,0,0,0,0,0,0,0,0};


POS VP;

/*==========================================================================*/



Win3d *ud;

vect W;

short dens;


static int trace(vect *v,vect *r)

{ double tmin, tmax, t, u; int c,k;

int i, in;

PLANE *p;


tmin = -100000.0; tmax = 100000.0; c = -1;

for ( i=0; i<planes; i++ )

{ p = &cbd[i];

if (p->tag == nul) continue;

u = smult(r,&p->n); if (u == 0.0) continue;

t = (- p->d - smult(v,&p->n)) / u;

if (p->tag == and)

if (u > 0.0)

{ if (t <= tmin) return(-1);

if (t < tmax) tmax = t;

}

else { if (t >= tmax) return(-1);

if (t > tmin) { tmin = t; c = p->c; in = i; }

}

else if (u > 0.0)

{ if (t <= tmin) return(-1);

if (t > tmax) { tmax = t; tmin = -100000; }

}

else { if (t >= tmax) return(-1);

if (t < tmin) { tmin = t; tmax = 100000; c = p->c; in = i; }

}

}

if (c != -1) { W = svmult(tmin,r); W = vadd(v,&W);

if (!ud->cut_face && carr[in]) return carr[in];

return ILUT[dens = filtr(W.x,W.y,W.z)];

}

else return(-1);

}



static double T;

static int vtrace(vect *v,vect *r)

{ double tmin, tmax, t, u; int c, cx; double k;

int i;

PLANE *p; vect w;


tmin = -100000.0; tmax = 100000.0; c = -1;

for ( i=4; i<planes; i++ )

{ p = &bd[i];

u = smult(r,&p->n); if (u == 0.0) continue;

t = (- p->d - smult(v,&p->n)) / u;

if (u > 0.0)

{ if (t <= tmin) return(-1);

if (t < tmax) { tmax = t; c = p->c; }

}

else { if (t >= tmax) return(-1);

if (t > tmin) { tmin = t; c = p->c; }

}

}


if (c != -1)

{ t = tmin;

while (t < tmax)

{ w = svmult(t,r); w = vadd(v,&w);

c = filtr(w.x,w.y,w.z);

if (c > surf_level)

{ T = t; //cx = c;

tmin = -100000.0; tmax = 100000.0; c = -1;

for ( i=0; i<4; i++ )

{ p = &bd[i];

if (p->tag == nul) continue;

u = smult(r,&p->n); if (u == 0.0) continue;

t = (- p->d - smult(v,&p->n)) / u;

if (p->tag == and)

if (u > 0.0)

{ if (t <= tmin) break;

if (t < tmax) tmax = t;

}

else { if (t >= tmax) break;

if (t > tmin) { tmin = t;

c = p->c;

}

}

else if (u > 0.0)

{ if (t <= tmin) break;

if (t > tmax) { tmax = t;

tmin = -100000;

}

}

else { if (t >= tmax) break;

if (t < tmin) { tmin = t;

tmax = 100000;

c = p->c;

}

}

}

if (c != -1 && tmin > T)

{ //if (tmin < T)

// { W = svmult(T,r); W = vadd(v,&W);

// }

//else

{ W = svmult(tmin,r); W = vadd(v,&W);

if ( W.x > Xmax || W.x < Xmin ||

W.y > Ymax || W.y < Ymin ||

W.z > Zmax || W.z < Zmin ) return -1;

}

dens = filtr(W.x,W.y,W.z);

return ILUT[dens];

}

return (-2);

} // if (c > surf_level)

t += Step;

} // while (t < tmax)

return (-1);

} // if (c != -1)

else return(-1);

}



static void getij(double x, double y, double z, int *i, int *j)

{ vect r; double di,dj;

r.x = x; r.y = y; r.z = z;

r = vsub((vect*)&x,&ud->o);

di = norma(ud->u); dj = norma(ud->v);

*i = smult(&r,&ud->u)*ud->scale/di/di+di/2+ud->w/2;

*j = smult(&r,&ud->v)*ud->scale/dj/dj+dj/2+ud->h/2;

}



static int imin, imax, jmin, jmax;

static void minmax(double x,double y,double z)

{ int i, j;


getij(x,y,z,&i,&j);


if (i<imin) imin = i; if (i>imax) imax = i;

if (j<jmin) jmin = j; if (j>jmax) jmax = j;

}


static void set_tags(void)

{ int i;

for (i=0; i<4; i++) if (bd[i].tag != nul) bd[i].tag = or;

for (i=0; i<4; i++) if (bd[i].tag == or ) { bd[i].tag = and; break; }

}


#define alph 0.33

static void smooth(float *z, char *s, int n)

{ float z0,z1; int i;

z0 = z[0];

for (i=1; i < n-1; i++)

{ if (s[i-1]==-2 && s[i]==-2 && s[i+1]==-2)

z1 = alph*z[i-1]+(1.0-2*alph)*z[i]+alph*z[i+1];

else z1 = z[i];

z[i-1] = z0; z0 = z1;

}

}


static void gen_img(WinHandle wh)

{ int h,w; char name[12];

vect v,r,t; USGC *string, *s; int i,j; int c;

vect dx,dy, rt;

char proc_flag = 1;

double rastr;

Rect wr = WorkRect(wh);

BYTESB isb;

int m[2];

double sx,sy;


ud = h_data(wh);


if (ud->img) { EraseByte(ud->img); f_close(ud->img_fil); }


if (ud->img_name) { if (ud->tempimg) f_delete(h_data(ud->img_name));

h_free(ud->img_name);

}

sprintf(name,"v%d.tmp",ud->temp_name);

ud->img_name = h_alloc(strlen(name)+1); s = h_data(ud->img_name);

strcpy(s,name);

ud->tempimg = 1;


w = ud->iw = ud->w;

h = ud->ih = ud->h;

ud->x0 = 0; ud->y0 = 0;


ud->img_fil = f_create(h_data(ud->img_name), F_CREATE_NORMAL);

m[0] = w; m[1] = h;

f_write(ud->img_fil,m,2*sizeof(int));

ud->img = NewByte (ud->img_fil,(long)2*sizeof(int),w,h, BFF_EMPTY);



{ double R; vect SUN;


ud->u = ud->v = O;

R = ((w < h) ? (Xmax-Xmin)/w : (Ymax-Ymin)/h);

ud->u.x = rastr = 1.5*R; ud->v.y = rastr;

ud->o.x = (Xmax+Xmin)/2; ud->o.y = (Ymax+Ymin)/2; ud->o.z = (Zmax+Zmin)/2;


VecToBas(&ud->u,&VP); VecToBas(&ud->v,&VP);

bd[0].n.x = 1; bd[0].d = -Cx;

bd[1].n.y = 1; bd[1].d = -Cy;

bd[2].n.z = 1; bd[2].d = -Cz;


bd[4].d = -Xmax+rastr; bd[5].d = Xmin+rastr;

bd[6].d = -Ymax+rastr; bd[7].d = Ymin+rastr;

bd[8].d = -Zmax+rastr; bd[9].d = Zmin+rastr;


dx = svmult(1/ud->scale,&ud->u); dy = svmult(1/ud->scale,&ud->v);

sx = norma(dx); sy = norma(dy); Step = (sx+sy)/2;

rt = vmult(&dx,&dy); norm(&rt);

for (i=0; i<4; i++)

if (smult(&rt,&bd[i].n) > 0.0)

{ bd[i].n = svmult(-1.0,&bd[i].n); bd[i].d = -bd[i].d; }

set_tags();

if (!ud->cut_face)

{ SUN = rt; rotYZ(&SUN,-Pi/6);

for (i=0; i<4; i++) carr[i] = 0;

for (i=4; i<planes; i++)

{ double L = (1+smult(&SUN,&bd[i].n))/2;

carr[i] = GRAY_BASE + L*GRAY_MAX;

}

}

}


imin = w; imax = -1;

jmin = h; jmax = -1;

minmax(Xmin,Ymin,Zmin);

minmax(Xmax,Ymin,Zmin);

minmax(Xmin,Ymax,Zmin);

minmax(Xmax,Ymax,Zmin);

minmax(Xmin,Ymin,Zmax);

minmax(Xmax,Ymin,Zmax);

minmax(Xmin,Ymax,Zmax);

minmax(Xmax,Ymax,Zmax);

if (imin<0) imin = 0; if (imax>=w) imax = w-1;

if (jmin<0) jmin = 0; if (jmax>=h) jmax = h-1;


v = ud->o;

r = svmult(-(double)w/2+imin,&dx);

t = svmult(-(double)h/2+jmin,&dy);

v = vadd(&v,&r); v = vadd(&v,&t);


OnScale(wr.x0,wr.y0);


OpenBYTESB(ud->img, &isb);


for ( j=0; j<jmin; j++ )

{ PositBYTESB(&isb,j,1); s = isb.data + (j-isb.y0)*w;

for (i=0; i<w; i++) s[i] = BLUE;

Done((int)((long)j*100/h));

}


if (ud->view)

{ float *z0, *z1, z2, *wz; char *s0, *s1, c2, *ws;

vect sun,vx;

int N = imax-imin+3;


z0 = (float*)h_malloc(N*sizeof(float));

z1 = (float*)h_malloc(N*sizeof(float));

s0 = h_malloc(N);

s1 = h_malloc(N);


sun.x = -0.5; sun.y = -0.3; sun.z = 1.0; norm(&sun);

v = vsub(&v,&dx); v = vsub(&v,&dy);

for ( i=0; i<N; i++ )

{ s0[i] = vtrace(&v,&rt); z0[i] = T;

v = vadd(&v,&dx);

}

smooth(z0,s0,N);

smooth(z0,s0,N);

vx = svmult(-(double)N,&dx);

v = vadd(&v,&vx); v = vadd(&v,&dy);

for ( i=0; i<N; i++ )

{ s1[i] = vtrace(&v,&rt); z1[i] = T;

v = vadd(&v,&dx);

}

smooth(z1,s1,N);

smooth(z1,s1,N);

vx = svmult(-(double)N,&dx);

v = vadd(&v,&vx); v = vadd(&v,&dy);


for ( j=jmin; j<=jmax; j++ )

{ PositBYTESB(&isb,j,1); s = isb.data + (j-isb.y0)*w;

for (i=0; i<=imin; i++) s[i] = BLUE;

for (i=imax; i< w; i++) s[i] = BLUE;

s0[0] = vtrace(&v,&rt); z0[0] = T; v = vadd(&v,&dx);

if (proc_flag)

for ( i=1; i < N-1; i++ )

{ c2 = vtrace(&v,&rt); z2 = T;

if (s1[i] == -1) s[imin+i] = BLUE;

else if (s1[i] == -2)

{ vect n; double k,f;

n.x = 0; n.y = 0; n.z = 0;

if (s1[i-1] == -2)

{ n.z += sx/sqrt(sx*sx+(z1[i]-z1[i-1])*(z1[i]-z1[i-1]));

n.x += (z1[i]-z1[i-1])/sqrt(sx*sx+(z1[i]-z1[i-1])*(z1[i]-z1[i-1]));

}

if (s1[i+1] == -2)

{ n.z += sx/sqrt(sx*sx+(z1[i+1]-z1[i])*(z1[i+1]-z1[i]));

n.x += (z1[i+1]-z1[i])/sqrt(sx*sx+(z1[i+1]-z1[i])*(z1[i+1]-z1[i]));

}

if (s0[i] == -2)

{ n.z += sy/sqrt(sy*sy+(z1[i]-z0[i])*(z1[i]-z0[i]));

n.y += (z1[i]-z0[i])/sqrt(sy*sy+(z1[i]-z0[i])*(z1[i]-z0[i]));

}

if (c2 == -2)

{ n.z += sy/sqrt(sy*sy+(z2-z1[i])*(z2-z1[i]));

n.y += (z2-z1[i])/sqrt(sy*sy+(z2-z1[i])*(z2-z1[i]));

}

f = sqrt(smult(&n,&n));

k = smult(&sun,&n); if (f) k = k/f; else k = 0;

k = (1+k)/2;

s[imin+i] = (char)(GRAY_BASE+k*GRAY_LVLS);

}

else s[imin+i] = s1[i];

s0[i] = c2; z0[i] = z2;

v = vadd(&v,&dx);

}

s0[N-1] = vtrace(&v,&rt); z0[N-1] = T; v = vadd(&v,&dx);

smooth(z0,s0,N);

smooth(z0,s0,N);

PositBYTESB(&isb,j,1); s = isb.data + (j-isb.y0)*w;

// for (i=0; i<w; i++) s[i] = BLUE;

{ int garb;

if (GetRealMouseStat(&garb, &garb) & MS_ANY) proc_flag = 0;

}

vx = svmult(-(double)N,&dx);

v = vadd(&v,&vx); v = vadd(&v,&dy);

wz = z0; z0 = z1; z1 = wz;

ws = s0; s0 = s1; s1 = ws;

Done((int)((long)j*100/h));

}


h_mfree(z0); h_mfree(z1); h_mfree(s0); h_mfree(s1);

}

else

{ for ( j=jmin; j<=jmax; j++ )

{ PositBYTESB(&isb,j,1); s = isb.data + (j-isb.y0)*w;

for (i=0; i<w; i++) s[i] = BLUE;

if (proc_flag)

for ( i=imin; i<=imax; i++ )

{ if ( (c = trace(&v,&rt)) != -1) s[i] = c;

v = vadd(&v,&dx);

}

{ int garb;

if (GetRealMouseStat(&garb, &garb) & MS_ANY) proc_flag = 0;

}

if (proc_flag)

{ r = svmult(-(double)imax+imin-1,&dx);

v = vadd(&v,&r); v = vadd(&v,&dy);

}

Done((int)((long)j*100/h));

}

}


for ( j=jmax+1; j<h; j++ )

{ PositBYTESB(&isb,j,1); s = isb.data + (j-isb.y0)*w;

for (i=0; i<w; i++) s[i] = BLUE;

Done((int)((long)j*100/h));

}


CloseBYTESB(&isb);


for (i=0; i<planes; i++) ud->bd[i] = bd[i];


if (ud->edges)

{ double X0,X1, Y0,Y1, Z0,Z1;

int x0,y0, x1,y1;

int flags;


if (rt.x > 0) { X0 = Xmax; X1 = Xmin; } else { X1 = Xmax; X0 = Xmin; }

if (rt.y > 0) { Y0 = Ymax; Y1 = Ymin; } else { Y1 = Ymax; Y0 = Ymin; }

if (rt.z > 0) { Z0 = Zmax; Z1 = Zmin; } else { Z1 = Zmax; Z0 = Zmin; }


flags = (bd[0].tag != nul); flags <<= 1;

flags += (bd[1].tag != nul); flags <<= 1;

flags += (bd[2].tag != nul);


if (flags == 0)

{ getij(X1,Y1,Z1,&x0,&y0);

getij(Cx,Y1,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Cy,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Y1,Cy,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&6) || flags == 0)

{ getij(X0,Y0,Z1,&x0,&y0);

getij(X0,Cy,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(Cx,Y0,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&3) || flags == 0)

{ getij(X1,Y0,Z0,&x0,&y0);

getij(X1,Y0,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Cy,Z0,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&5) || flags == 0)

{ getij(X0,Y1,Z0,&x0,&y0);

getij(Cx,Y1,Z0,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X0,Y1,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&4) || flags == 0)

{ getij(X0,Y1,Z1,&x0,&y0);

getij(Cx,Y1,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X0,Cy,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X0,Y1,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&2) || flags == 0)

{ getij(X1,Y0,Z1,&x0,&y0);

getij(Cx,Y0,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Cy,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Y0,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&1) || flags == 0)

{ getij(X1,Y1,Z0,&x0,&y0);

getij(Cx,Y1,Z0,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Cy,Z0,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Y1,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if (flags&4)

{ getij(Cx,Y1,Z1,&x0,&y0);

getij(Cx,Cy,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(Cx,Y1,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if (flags&2)

{ getij(X1,Cy,Z1,&x0,&y0);

getij(Cx,Cy,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if (flags&1)

{ getij(X1,Y1,Cz,&x0,&y0);

getij(Cx,Y1,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&3) == 1)

{ getij(X1,Y0,Cz,&x0,&y0);

getij(Cx,Y0,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&3) == 2)

{ getij(X1,Cy,Z0,&x0,&y0);

getij(Cx,Cy,Z0,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X1,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&6) == 4)

{ getij(Cx,Y0,Z1,&x0,&y0);

getij(Cx,Cy,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(Cx,Y0,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&6) == 2)

{ getij(X0,Cy,Z1,&x0,&y0);

getij(Cx,Cy,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X0,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&5) == 1)

{ getij(X0,Y1,Cz,&x0,&y0);

getij(Cx,Y1,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X0,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&5) == 4)

{ getij(Cx,Y1,Z0,&x0,&y0);

getij(Cx,Cy,Z0,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(Cx,Y1,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

getij(Cx,Cy,Cz,&x0,&y0);

if ((flags&3) == 3)

{ getij(X1,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&6) == 6)

{ getij(Cx,Cy,Z1,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if ((flags&5) == 5)

{ getij(Cx,Y1,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if (flags == 3)

{ getij(X0,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if (flags == 6)

{ getij(Cx,Cy,Z0,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if (flags == 5)

{ getij(Cx,Y0,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if (flags == 1)

{ getij(X0,Y0,Cz,&x0,&y0);

getij(Cx,Y0,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X0,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if (flags == 2)

{ getij(X0,Cy,Z0,&x0,&y0);

getij(Cx,Cy,Z0,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(X0,Cy,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

if (flags == 4)

{ getij(Cx,Y0,Z0,&x0,&y0);

getij(Cx,Cy,Z0,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

getij(Cx,Y0,Cz,&x1,&y1); LineByte(ud->img,x0,y0,x1,y1,ud->edgcol);

}

}


OffScale();

}


//====================================================================


int tracePoint(WinHandle w, int x, int y, vect *p)

{ int c;

Rect wr = WorkRect(w);

vect v,r;

vect dx,dy, rt;


ud = h_data(w);

if (ud->img == 0) return -1;


x -= wr.x0-ud->x0;

y -= wr.y0-ud->y0;


dx = svmult(1/ud->scale,&ud->u); dy = svmult(1/ud->scale,&ud->v);

rt = vmult(&dx,&dy); norm(&rt);


v = ud->o;

r = svmult(-(double)ud->iw/2+x,&dx);

v = vadd(&v,&r);

r = svmult(-(double)ud->ih/2+y,&dy);

v = vadd(&v,&r);


cbd = ud->bd;

c = trace(&v,&rt);

cbd = bd;

*p = W;

return (c==-1?c:dens);

}


static void AttachMenu(Win3d *ud)

{

Opt3DMenu[D3_O3Dset].flags |= MF_ACTIV;

FilMenu[D3_FOpen].flags |= MF_ACTIV;

if (ud->img != 0) FilMenu[D3_FSav].flags |= MF_ACTIV;

else FilMenu[D3_FSav].flags &= ~MF_ACTIV;

}


static void DetachMenu(void)

{

Opt3DMenu[D3_O3Dset].flags &= ~MF_ACTIV;

FilMenu[D3_FOpen].flags &= ~MF_ACTIV;

FilMenu[D3_FSav].flags &= ~MF_ACTIV;

}


static char *asof3 = sof3;

static void DoMenuCommand(WinHandle w)

{ Win3d *ud = h_data(w);

int m[2]; char *s,*p;


switch(MenuItem[0])

{ case D3_Fil:

switch(MenuItem[1])

{ case D3_FOpen: // Open file

s = GetFileName2(GetCfgItem("frag"),F_OPEN_READ,s_3soo);

if (!*s) return;

if (ud->img) { EraseByte(ud->img); f_close(ud->img_fil); }


if (ud->img_name) { if (ud->tempimg) f_delete(h_data(ud->img_name));

h_free(ud->img_name);

}

ud->img_name = h_str(s);

old: ud->img_fil = f_open(h_data(ud->img_name), F_OPEN_READ);

f_read(ud->img_fil,m,2*sizeof(int));

ud->iw = m[0]; ud->ih = m[1];

ud->img = NewByte (ud->img_fil,(long)2*sizeof(int),

ud->iw,ud->ih, BFF_EXIST);

ud->tempimg = 0;

redraw_user(w);

AttachMenu(ud);

return;

case D3_FSav: // Save file

if (ud->img == 0) break;

s = GetFileName2(GetCfgItem("frag"),F_OPEN_WRITE,s_3sow);

if (!*s) return;

p = s+strlen(s); if (p[-1] == '*') p[-2] = 0;

FlushByte(ud->img); f_close(ud->img_fil);

f_delete(s); f_rename(h_data(ud->img_name),s);

h_free(ud->img_name);

ud->img_name = h_str(s);

goto old;


}

break;

case D3_Opt:

switch(MenuItem[1])

{ case D3_O3Dset:

{ int edg = ud->edges, ec = ud->edgcol,

cut = ud->cut_face, view = ud->view;

int level = surf_level;

int afl = (bd[2].tag != nul), cfl = (bd[1].tag != nul),

sfl = (bd[0].tag != nul), pfl = (bd[3].tag != nul);

double sc = ud->scale;

int i = InputForm ( asof3, &edg, &ec,

&view, &level, &cut,

&afl, &cfl, &sfl, &pfl, &sc

);

ud = h_data(w);


if (i != 1) break;


ud->edges = edg; ud->edgcol = ec;

///if (pfl) { afl = 0; cfl = 0; sfl = 0; }

bd[0].tag = sfl; bd[1].tag = cfl;

bd[2].tag = afl; bd[3].tag = pfl;

ud->scale = sc;

ud->view = view;

ud->cut_face = cut;

surf_level = level;

return;

}

}

break;

case D3_Drw:

SetupLUT(dw3d);

gen_img(w); redraw_user(w);

AttachMenu(ud);

return;

}


Do3DMenu();

}


static void redraw_user(WinHandle w)

{ Win3d *ud = h_data(w);

VisSetWin(w);

VisFill(wptr(w)->bgcolor);

if (ud->img) VisByte(ud->img,-ud->x0,-ud->y0);

}


extern void handler_3d_solid_root(WinHandle w, EventRecord *e);

void handler_3d_solid (WinHandle w, EventRecord *e)

{ Rect r = WorkRect(w);

Win3d *ud = h_data(w);

switch(e->what)

{ case EVTY_UPDATE:

{ PaintBorder(w);

VisSetWin(w);

ud->w = r.x1-r.x0; ud->h = r.y1-r.y0;

if (ud->img) VisByte(ud->img,-ud->x0,-ud->y0);

break;

}


case EVTY_ACTIVATE:

AttachMenu(ud);

SetMenu(menu3D);

PaintTitle(w);

break;


case EVTY_DEACTIVATE:

DetachMenu();

PaintTitle(w);

break;


case EVTY_DISPOSE:

if (ud->img) { EraseByte(ud->img); f_close(ud->img_fil); }

if (ud->img_name) { if (ud->tempimg) f_delete(h_data(ud->img_name));

h_free(ud->img_name);

}

return;



case EVTY_MOUSE:

switch(HandleMouse(w,e))

{ case inMenuBar:

MenuSelect();

DoMenuCommand(w);

break;

case inExit:

if ((e->MS & MS_ANY_PRESSED) == 0) break;

DisposeWindow(w);

break;

case inContent:

if ((e->MS & MS_ANY_PRESSED) == 0) break;

DragWorkField(w,e);

ud->x0 += e->MX; ud->y0 += e->MY;

redraw_user(w);

break;

}

break;


case EVTY_KEYBOARD:

MenuKey(e);

DoMenuCommand(w);

break;

}

}


WinHandle RunSolidView(Rect r)

{ WinHandle w; Win3d *ud;

static filnum = 0;


w = NewWindow(handler_3d_solid_root,

WF_BORDER2+WF_HEADER+WF_FILL+WF_ROUND_CORNER,

LIGHTBLUE, BLUE, s_3som);

SetRectShape(w, &r);


h_resize(w,sizeof(Win3d));

ud = h_data(w);


ud->type = TYPE_3D;

ud->temp_name = ++filnum;

ud->img_name = 0; ud->tempimg = 0;

ud->img = 0;


ud->scale = 1;

ud->x0 = 0; ud->y0 = 0;

ud->iw = 0; ud->ih = 0;

ud->edgcol = BRIGHTWHITE;

ud->view = 0,

ud->edges = 1,

ud->cut_face = 1;

return w;

}



Приложение 3

Описание программы обработки изображений Ctsoft



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

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ