Complex Diagnostic Systems Ltd ООО «Комплексные
диагностические системы»
Независимая сервисно - диагностическая консоль (НСДК) для компьютерных томографов, ультразвуковых установок и рентгеновских аппаратов CTsoft
Справочник пользователя
Аннотация.
Данный документ состоит из введения и трех глав. Во введении даются начальные сведения о системе; в главе 1 описывается работа с изображениями: обработка, печать, архивирование, работа с текстом, создание трехмерных объектов; в главе 2 - работа с трехмерными объектами; в главе 3 - работа с базой данных. Изучать документ рекомендуется параллельно с работой на компьютере. Предполагается знание пользователем основ работы с персональным компьютером в операционной среде MS-DOS, навык работы с Нортон-командером.
Введение.
Пользовательский интерфейс системы аналогичен интерфейсу операционной системы Windows, т.е. основан на работе с окнами. Окно - это область экрана, ограниченная рамкой. Полоса вверху рамки содержит название окна или имя загруженного в него объекта. Если окно активно - эта полоса выделена цветом. В верхнем левом углу окна находится кнопка, нажав которую вы уничтожаете окно, в верхнем правом углу - кнопка изменения размера окна, если это изменение не заблокировано. Для того чтобы сделать окно активным, достаточно навести курсор мыши на это окно, и щелкнуть левой кнопкой. Вверху экрана над всеми окнами выводится меню активного в данный момент окна, оно реализует функции активного окна. В меню всех окон - левый элемент CT- это главное меню. С помощью главного меню системы обеспечивается оперативный вызов конфигурации окон, необходимой для выполнения требуемого типа работ в системе и вызов окон различных типов независимо от текущей конфигурации. Кроме того, главное меню поддерживает процедуры для загрузки данных объемного представления, их уничтожения и вызов окна установки параметров системы. При активизации главного меню выводится вертикальное подменю с элементами:
2D Изображения | {2} | вызов конфигурации окон для работы с 2D изображениями, печати, архивирования, управления вводом и преобразованием изображений и работы с текстовой документацией | |
3D Объем | {3} | вызов конфигурации окон для работы с 3D изображениями и планирования вмешательства | |
Параметры | {U} | окно установки параметров системы | |
Окна | {W} | переход к подменю вызова отдельных окон и независимой загрузки и генерации 3D данных | |
2dslice | {Alt/I} | вызов окна Изображения | |
3dview | {Alt/3} | вызов окна 3dview | |
3dpreview | {Alt/P} | вызов окна 3dpreview | |
Animator | {Alt/A} | вызов окна Animator | |
3d measure | {Alt/M} | вызов окна 3d measure | |
Load volume | {Alt/V} | загрузить объемное представление томограмм | |
Generate cube | генерировать объемное представление полутонового куба | ||
Generate ball | генерировать объемное представление полутоновой сферы | ||
Close volume | закрыть и удалить из памяти рабочее объемное представление | ||
Text | перейти к окну редактирования текста | ||
Exit | {X} | выход из системы CT_Imager |
Как войти в систему.
После инсталляции системы, проводимой разработчиками, она находится в рабочем директории c:\ctsys\exe. Надо войти в него и выполнить команду ct_work.bat. На экране дисплея появится нечто, похожее на нижеприведенную иллюстрацию:
Это конфигурация для работы с изображениями. На рисунке видны два главных окна системы: окно Управление (справа) и окно Изображения, с изображением среза, полученного на рентгеновском томографе.
Как выйти из системы.
Первый вариант: надо активизировать в верхнем меню элемент CT, появится вертикальное подменю, и щелкнуть мышью на элементе Выход.
Второй вариант: в латинском нижнем режиме клавиатуры (для активизации латинского регистра надо одновременно нажать клавиши Control-Shift, для активизации русского регистра - клавиши Alt-Shift - зеленая рамка по периметру экрана - признак русского регистра) нажмите клавишу x. После выполненных действий в любом варианте появится окно подтверждения выхода. Если вы не передумали выйти из системы щелкните мышью на кнопке Да окна подтверждения или при работе с клавиатуры: переведите курсор на кнопку Да и нажмите клавишу Enter.
ГЛАВА 1. Работа с изображениями.
Какие окна выведены на экран после входа в систему.
Это окна конфигурации для работы с изображениями. Они перечислены ниже. Первые три окна присутствуют всегда.. Четвертое окно FG-сервис выводится, если в вашей системе есть оборудование для ввода видеосигнала
Окно Управление | является основным окном при работе с 2D изображениями и позволяет управлять вводом изображений с томографа, преобразованием данных во внутренний формат и вызывает приложения, работающие вне оболочки, такие как работа с стримером, с факс-модемом, монитором, базой данных, Нортон-командером и архивом; управляет печатью изображений и диагностических заключений на лазерном принтере и настройкой параметров печати изображения. |
Окно Изображения | предназначено для работы с двумерными изображениями различных типов и двумерными сечениями трехмерных объектов. В этом окне выполняются основные виды работ по визуализации, анализу и обработке двумерных изображений и подготовка 3D представлений по серии последовательных двумерных сечений. |
Окно Текст | предназначено для работы с текстовой информацией параллельно с анализом изображений и подготовки диагностических заключений. |
Окно FG Сервис | обеспечивает управление работой с видеосигналом, включая просмотр изображения в динамике, оцифровку текущего кадра, ввод титула пациента, тестирование и настройку платы ввода изображений с видеосигнала. |
Окно Управление
Окно Управление является управляющим окном 2D режима и позволяет реализовывать основные функции работы с изображением: выбор, печать, копирование, удаление и т.д., управлять настройкой системы и запускать внешние приложения. В окне отображаются функциональные кнопки, таблица выбора-выделения изображений, подокна отображения. В верхней части окна находится подокно с путем директория, в котором выбираются изображения, под ним - таблица с тремя списками: в левом - поддиректории, в среднем - номера объектов, в правом - номера срезов. Вначале в таблице находятся списки соответствующие стандартному пути нахождения изображений: c:\ctsys\images (параметр image в файле ct.cfg). В верхней строке списка директориев находится строка «..» и далее список поддиректориев, если он есть. Для смены директория щелкните мышью на имени поддиректория в списке, либо на строке «..» (выход в старший директорий). В каждом списке имеется курсор (серый или черный), цвет активного курсора - черный. Курсор, указывающий на изображение, перемещается стрелками вверх и вниз на одну позицию; на лист - клавишами PgUp, PgDn; в начало и конец списка - клавишами Home, End. Кроме того, справа от каждой таблицы находится линейка для перемещения курсора. Ею пользуются в случае, если список изображений не умещается в таблице. Вверху и внизу линейки находятся кнопки стрелка вверх и стрелка вниз - при нажатии на них мышью курсор перемещается на одну позицию. На линейке находится движок; если навести на него курсор мыши, нажать левую кнопку мыши и, не отпуская ее, переместить мышь вверх или вниз, то движок переместится на новое место линейки и после отпускания кнопки мыши произойдет перевывод другого фрагмента списка. Другой способ перевывода фрагмента списка - щелкнуть мышью сверху или снизу от движка.
Как, не выходя из системы, получить текст помощи.
Для получения подсказки о работе с каким-нибудь элементом панели наведите курсор мыши на этот элемент (но не щелкайте!) и нажмите на клавиатуре компьютера F1 - выведется окно с текстом подсказки. Для получения подсказки работы с архивом наведите курсор мыши на элемент меню Архив (но не щелкайте!) и нажмите на клавиатуре F1; если текст превышает размеры экрана его можно листать, щелкая мышью над кнопками выведенными внизу текста (ДАЛЬШЕ, НАЗАД); для выхода из режима подсказки нажмите на клавиатуре Esc.
Как выбрать нужное изображение.
Для загрузки изображения щелкните мышью на номере нужного пациента или на номере нужного среза в таблице выбора панели Управление - активный курсор перейдет на этот номер. Далее нажмите кнопку Откр.IM или повторно щелкните мышью (изображение выведется в окно Изображение).
Для загрузки объекта - выберите объект и нажмите кнопку Откр.NO. В окно Изображение выведутся все изображения данного объекта.
Для выбора изображения по фамилии надо воспользоваться кнопкой Поиск. Произойдет вывод окна поиска. Поиск осуществляется по шаблону, вводимому в одноименное поле. Шаблон – это текст с искомыми начальными символами (от 1 до 25 символов). Поиск осуществляется в директории, выведенной в вверху окна, и, если параметр «Включая поддирекории» имеет значение «да», во всех поддиректориях, по точному совпадению с учетом регистров, при нажатии кнопок Искать и Искать дальше. Кнопка Искать дальше используется, когда начальные символы изображения и шаблон совпали, а полного совпадения нет. Если изображение найдено, оно выводится в окно изображения, иначе выводится сообщение «Изображение не найдено». Изменить путь директории поиска можно, воспользовавшись соответствующей кнопкой с помощью стандартного окна выбора. Для поиска можно использовать список изображений данной директории, отсортированный по фамилиям и выведенный вверху окна поиска. Перемещение по этому списку осуществляется мышью, стандартными элементами управления, имеющимися справа от списка - движок и кнопки, а также клавишами «стрелка вверх», «стрелка вниз», PgUp, PgDn клавиатуры. Для загрузки изображения, на котором стоит курсор надо на нем повторно щелкнуть кнопкой мыши или нажать клавишу “Enter”. Выход из функции осуществляется кнопками Отказ и Ок. При выходе по кнопке Ок происходит передача пути директории поиска в окно Управление.
Как перевывести изображение.
Кнопка Перевывод выводит изображение заново, она используется, когда вы произвели какие-либо манипуляции с изображением и хотите убрать с экрана результаты этих манипуляций. При перевыводе восстанавливается также масштаб изображения 1, если он был не равен 1 или 2.
Как изменить «окно вывода» изображения.
Понятие окна появилось в связи с необходимостью отображения диапазона чисел интересующей области на весь диапазон градаций яркости (серого) экрана. Окно вывода изображения характеризуется двумя величинами C и W. C -это центр диапазона, а W - ширина диапазона. Числа, соответствующие точкам изображения (например, в томографии - числа Хаунсфилда), от минимума C-W/2 до максимума C+W/2 отображаются серым пропорционально диапазону градаций яркости, соответственно числа меньшие минимума отображаются черным, а большие максимума - белым. Меняя значения C и W, мы меняем отображение, выделяя одно и нивелируя другое (W) или переводя его в сторону светлых или темных тонов (C).
Менять значения можно кнопками С+, С-,W+, W- панели Управление или одноименными элементами меню окна Изображения, а также (при активном окне Изображения) кнопками клавиатуры (C-стрелки вверх и вниз, W-стрелки вправо и влево). При однократном нажатии происходит увеличение/уменьшение значений на шаг (фиксированное значение). Шаг изменения С и W может быть скорректирован в окне системных установок Setup (элемент меню Параметры элемента СТ верхнего меню).
Как листать изображения.
Функции IM+/IM- обеспечивают переход к следующему/предыдущему изображению в серии файлов данного объекта. Функции NO+/NO- обеспечивают переход к первому изображению следующего/предыдущего объекта. Доступ к этим функциям мышью аналогичен вышеописанному способу. Для клавиатуры существует следующее соответствие: IM+-«=», IM-«-», NO+-«+», NO-«_».
Как выделить изображения.
Режим выделения файлов изображений в таблице включается кнопкой Выделение и используется для последующих: копирования в отдельный директорий, удаления с жесткого диска или для печати на лазерный принтер. В режиме выделения перемещение курсора приводит к немедленному выводу текущего изображения на экран вне зависимости от того, выделен файл или нет. Для выделения надо навести курсор (активный курсор - фон черного цвета) на нужный объект или срез (переключение между столбцами объектов, срезов, поддиректориев можно, помимо мыши, делать клавишей Tab, а внутри столбца курсор передвигается стрелками или движками) и еще раз щелкнуть мышью или нажать клавишу Enter. Выделенные файлы отображаются желтым цветом. При выделении объекта выделяются все его срезы. При щелчке мыши или нажатии клавиши Enter на выделенном объекте или срезе выделение пропадает. Имеются также кнопки Все+ Все- Инверс. Первые две кнопки выделяют или, соответственно, гасят все изображения данного директория. Кнопка Инверс (если курсор находится в столбце срезов) выделяет невыделенные и гасит выделенные срезы (т.е. инвертирует выделение) для данного объекта, а, если курсор находится в столбце объектов, то инвертирует выделение всех изображений.
Как копировать изображения.
Кнопка Копир копирует изображение, выведенное в окно Изображения или все выделенные изображения в директорий \BOX. Эта функция используется, если вы хотите отобрать изображения по какому-либо признаку.
Как удалять изображения.
Кнопка Удаление удаляет изображение, выведенное в окно Изображения или все выделенные изображения с жесткого диска
Как вводить примечания в файл с изображением.
Кнопка Коммент выводит окно ввода формы для ввода двух строк комментария в файл с изображением. После ввода комментария, он отображается вверху окна Изображения.
Как работать с меню окна Управление.
Окно Управление активизирует меню, состоящее из следующих элементов:
NC | вызов Нортон - коммандера |
Архив | вызов окна управления работой с архивом изображений |
Сеть | вызов внешней программы ввода изображений по локальной сети (например, с подключенного компьютера томографа) и преобразования изображений в формат Ctsoft |
БазаДанных | вызов внешней программы для работы с медицинской базой данных |
Сервис | вызов: программы работы с архивным устройством (стриммером, магнитооптическим накопителем, записывающим CD и т.д.); монитора CTMON для редактирования некоторых параметров системы; программы работы с модемом |
ЗагрКонф | загрузка заранее записанной конфигурации параметров печати из файла |
Парам1 | вызов окна для изменения редко изменяемых параметров печати |
Парам2 | вызов окна для изменения часто меняемых параметров печати |
ФАЙЛ/экр | изменение параметра печати: из файла или с экрана |
ЗапКонф | запись текущей конфигурации параметров печати в файл |
Как печатать на лазерном принтере.
Печать изображений и текста заключения на лазерном принтере осуществляется через окна Изображения и Текст. Поэтому не рекомендуется использовать окна Изображения и Текст, вызванные в других конфигурациях, например в 3D volume, и удалять любое из них до завершения работ по получению твердых копий.
Функция печати на лазерный принтер может быть вызвана только в случае, если в окно Изображения загружено изображение. Печать изображений производится со следующими приоритетами: если есть выделенные изображения, то печатаются только они; если выделения нет, начиная с изображения загруженного в окно Изображения, печатается либо заданное (если задано) количество изображений (параметр К-во изображений), либо все имеющиеся изображения (срезы) данного объекта (пациента) в соответствии со значениями нижеописанных параметров печати, которые могут быть изменены с помощью элементов верхнего меню Парам1 и Парам2.
При активизации элемента меню Парам1 выводится окно ввода формы со следующими параметрами:
Разрешение принтера | 300dpi/ 600dpi/ 1200 dpi | Параметр, задающий плотность печати точек/дюйм, для типов принтеров, не имеющих режима 600 dpi должно всегда стоять значение 300 dpi |
Матрица пикселя | 4*4/ 8*8 | Матрица, размером с которую, печатается каждая точка полутонового изображения (значение 8*8 используется для высокого разрешения принтера) |
Большие буквы загол. | вкл/вык | Если этот флаг включен, две верхние строки листа (сопроводительная информация) печатаются большими буквами |
Отступ слева изображ. | Значение этого параметра - отступ от левого края в миллиметрах для изображений | |
Отступ слева текста | Значение этого параметра - отступ от левого края в миллиметрах для текста | |
Промежуток по гориз. | Значение этого параметра - расстояние между изображениями по горизонтали в миллиметрах | |
Промежуток по вертик. | Значение этого параметра - расстояние между изображениями по вертикали в миллиметрах. | |
Коррекция C | Значение этого параметра - смещение центра окна изображения (в томографическом смысле) перед печатью. Центр смещается на величину параметра, умноженного на ширину окна W в сторону увеличения. Параметр должен быть меньше 1 (два знака после десятичной точки). Введение этого параметра связано с тем, что "светлота" изображения на экране дисплея не всегда соответствует “светлоте" напечатанного изображения. |
При активизации элемента меню Парам2 выводится окно ввода формы со следующими параметрами:
Инверсия | Вык/ Вкл | флаг инверсии изображения перед печатью | |
Протокол | Вкл/ Вык | флаг печати заключения из окна Текст | |
Форматирование | НеФормат/ Формат/ БазДФорм | параметр, определяющий форматирование заключения перед печатью | |
Обрезка | Нет/ Прямоуг. | тип выделяемой области (обрезки) при печати текущего изображения, область печатаемого изображения: Нет - все изображение, Прямоуг - прямоугольник | |
Откуда | Файл/ Экран | определение того, откуда берется печатаемая информация: из файла на диске или непосредственно с экрана; при печати с экрана прямо на изображение накладывается сопроводительная информация | |
К-во копий | 1 - 9 | количество печатаемых копий | |
К-во изображений | 0/ | количество выводимых изображений, если параметр выключен (равен 0), он не оказывает влияния на печать; если параметр включен (не равен 0) печать прекращается, если количество выведенных изображений сравняется со значением параметра; | |
Масштаб (точки) | масштаб изображения, задаваемый количеством точек в результирующей строке изображения, в которое преобразуется исходная строка изображения, изображение перевыводится на экран и печатается в заданном масштабе | ||
Масштаб (коэфф.) | тот же масштаб изображения; только он задается числом с плавающей точкой, границы изменения: >=0.3, | импорт текущего параксиального сечения из 3D объема | |
Trace {P} | выбор параксиального сечения по следу | ||
CurSeg//Z | выбор параксиального сечения по сегменту параллельно оси Z | ||
CurSeg//Y | выбор параксиального сечения по сегменту параллельно оси Y | ||
CurSeg//X | выбор параксиального сечения по сегменту параллельно оси X | ||
Oblique | {O} | импорт наклонного сечения | |
Setup | установка параметров 3D импорта |
Как производить Измерения.
Измерения производятся с помощью элемента меню Изм.
Подменю элемента Изм
Значения в точке | {V} | измерение значений функции в точке |
Среднее | {M} | динамический анализ среднего по зоне интереса 10*10 |
ROI | {R} | анализ по зоне интереса |
Значения в области | {A} | выбор зоны и вывод значений плотности |
Расстояния в см. | {D} | измерение расстояний/углов |
Маркер | {K} | вставка пометок структур изображения с нумерацией для печати |
Профиль | {F} | вывод и анализ графика строки/столбца изображения |
Объемы | {V} | определение объемов структур по серии изображений |
Калькулятор | {I} | калькулятор с возможностью ввода измеренных величин |
Объемы очагов | {O} | вычисление суммарных объемов очагов на одном изображении |
Функция Значения в точке позволяет измерить значение плотности в любой точке активного окна изображения. В верхней части окна выводятся текущие значения координат курсора в пикселях (Х - координата х, Y - координата y), а также значение плотности в точке с указанными координатами (Н - значение плотности в числах Хаунсфилда для томограмм или значение яркости для рентгеновских и ультразвуковых изображений). Нажатие левой кнопки "мыши" приводит к фиксации текущего измерения на экране (фиксируется до 8-ми точек, одновременно отображается до 4-х значений координат и плотности - значения с 5 по 8 замещают значения с 1 по 4). Нажатие правой кнопки мыши или Esc приводит к выходу из функции.
Функция ROI позволяет проанализировать значение плотности по зоне интереса.
При вызове функции ROI в правый верхний угол экрана выводится окно ROI, а в верхней строке - меню ROI. В окне ROI находятся:
· подокна, отображающие параметры ROI;
· кнопки изменения параметров;
· функциональные кнопки.
Анализ значения плотности по зоне интереса включает в себя вычисление следующих параметров:
РС | число пикселей в зоне |
МЕ | среднее значение по зоне |
МА | максимальное значение по зоне |
MI | минимальное значение по зоне |
ST | стандартное отклонение |
RM | средне - квадратичное отклонение |
AR | площадь зоны |
VO | объем зоны - AR умноженное на толщину слоя |
Выбор зоны интереса осуществляется в зависимости от типа зоны.
Для прямоугольной зоны левая верхняя граница зоны устанавливается при нажатии левой кнопки мыши. Зона расширяется до нужного уровня и ограничивается нажатием правой кнопки. Если в процессе расширения зоны выясняется, что следует изменить начальную точку зоны, необходимо вновь нажать левую кнопку мыши в нужном месте и повторить вновь процесс задания зоны.
Для круглой зоны сначала выводится окружность, привязанная к маркеру мыши. Ее размер меняется нажатием кнопок «стрелка вверх» и «стрелка вниз». Перемещая мышь и меняя размеры окружности, выбирается зона. Фиксация зоны производится путем нажатия любой кнопки мыши.
Выбор центра эллипсоидальной зоны производится путем нажатия левой кнопки мыши. Затем перемещением маркера мыши изменяются радиусы эллипса в вертикальном и горизонтальном направлении. Фиксация зоны производится при нажатии правой кнопки мыши.
Для произвольной зоны выбирается начальное положение контура с помощью левой кнопки мыши. Затем каждое нажатие левой кнопки формирует новый элемент ломаной линии контура произвольной зоны. При непрерывно нажатой левой кнопке зона формируется из смежных точек. Замыкание зоны производится нажатием правой кнопки мыши.
Внимание: избегайте пересечений при формировании контура произвольной зоны, иначе результат будет некорректным.
Когда в качестве типа зоны установлено все изображение, никаких действий для определения зоны не требуется.
Для работы с зоной интереса, прежде всего надо установить ее номер.
Подокна с номерами зон (от 1 до 8) отображены вверху окна ROI в виде горизонтального ряда; для установки нужного номера надо наехать курсором на подокно с этим номером и щелкнуть левой кнопкой мыши; подокно с установленным номером выделяется цветом.
Следующий шаг - установка параметров зоны интереса. Каждая зона характеризуется набором параметров, отображаемых подокнами в правой части окна ROI:
Цвет: Черный/ Синий/ Зеленый/ ЗеленоГолубой/ Красный/ Фиолетовый/ Коричневый/ СветлоСерый/ Серый/ Голубой/ СветлоЗеленый/ ЯркоЗеленоГолуб/ ЯркоКрасный/ СветлоФиолет/ Желтый/ Белый/ Выключен - цвет при выделении текущей зоны, для изменения параметра надо наехать курсором на подокно и щелкнуть левой кнопкой мыши нужное число раз, при значении Выключен - выключается цветовое выделение значений в зоне;
ROI Тип: Прямоугольник/ Окружность/ Эллипс/ Произвольная/ Все изображ. - выбор типа зоны интереса: прямоугольная, круглая, эллипсоидальная, произвольная или все изображение, для изменения параметра надо наехать курсором на подокно и щелкнуть левой кнопкой мыши нужное число раз;
ROI Рез: Статистика/ Гистограмма - выбор отображения статистики или статистики и гистограммы при анализе зоны, для изменения параметра надо наехать курсором на подокно и щелкнуть левой кнопкой мыши;
Теперь можно выделить выбранную зону на изображении, для чего в окне ROI надо нажать кнопку Выбор, после чего надо перевести курсор на изображение и выделить зону. При включенном цветовом выделении предварительно надо выбрать точку на изображении, значение которой будет центром томографического окна выделения, то есть после нажатия кнопки Выбор надо навести курсор на нужную точку и нажать левую кнопку мыши. После выделения зоны в окне изображения отображаются данные статобработки, а если выбран параметр Гистограмма, то во вспомогательном окне отображается и гистограмма, которая гасится щелчком мыши на этом окне. При наличии в файле ct.cfg параметра multiROI и, если ему присвоено ненулевое значение, в качестве результатов выводятся только значения объемов. Выбранная зона маркируется символом * под подокном с соответствующим номером зоны.
Для обсчета ранее выбранной зоны можно пользоваться кнопкой Вызов. Т.е. если под подокном с выбранным номером зоны уже есть *, можно нажать кнопку Вызов и зона выделится автоматически. При нажатии кнопки ВызВсе выделятся все ранее выделенные (помеченные *) зоны.
Примечание: функции Вызов и ВызВсе не работают с произвольной зоной (параметр Тип=Произвольная).
Для передачи результатов обсчета зоны или всех зон в окно с заключением надо нажать, соответственно, кнопки Экспорт и ЭксВсе.
Если необходимо удалить выделенную зону следует нажать кнопку Удалить.
Меню ROI (верхняя строка экрана) обеспечивает возможность запомнить, загрузить или удалить произвольную конфигурацию ROI, а также выполнить дополнительные действия, и содержит четыре элемента:
Загр - загрузка ранее записанной конфигурации ROI из файла,
Запс - запись текущей конфигурации ROI в файл,
Удалить - удаление файла с конфигурацией ROI,
Сбросить - сброс зон без перевывода изображения для измерений по более чем 8-ми областям,
Суммировать - вывод окна для суммирования групповых сумм, полученных при нажатии кнопки ЭксВсе.
Файл конфигурации ROI содержит информацию обо всех зонах ROI. Он может иметь произвольное имя, но должен иметь расширение roi. При выполнении любого из вышеописанных элементов меню выводится таблица файлов поддиректория ROI директория CTSYS для ввода имени файла конфигурации ROI. Далее, в зависимости от выбранного элемента меню, этот файл загружается, записывается или удаляется.
Для всех зон интереса запоминаются последние результаты измерений, которые могут использоваться калькулятором в функции Калькулятор и транслироваться им в протокол измерений.
При нажатии клавиши F1 выводится текст помощи. Выход из функции ROI - кнопка Выход.
Функция Значения в области для выбранной зоны изображения выводит на экран значения плотности в виде чисел. Зона выбирается мышью вышеописанным (в функции ROI) способом. После выбора зоны на экран выводится окно с таблицей чисел и двумя кнопками: Печать и Отказ. Слева от таблицы по вертикали выводится столбец с номерами строк, сверху по горизонтали - строка с номерами столбцов. Если выбранный фрагмент не уместился на экране, выводится столько значений, сколько умещается на весь экран и выводятся дополнительно вертикальная и горизонтальная линейки с рычажками, позволяющими вывести не уместившиеся значения. Кроме того, над и под столбцом с номерами строк дополнительно выводятся соответственно номера начальной и конечной строки выбранной зоны, а слева и справа от строки с номерами столбцов - номера начального и конечного столбца выбранной зоны. Кроме просмотра чисел, их можно напечатать на принтере с помощью кнопки Печать. Выход из функции осуществляется кнопкой Отказ.
Функция Среднее позволяет производить измерения среднего, максимального и минимального значений по квадратной зоне интереса размером 11*11 пикселей при динамическом перемещении зоны. Результаты записываются в параметры текущей зоны. Выход из функции осуществляется нажатием правой кнопки "мыши" или клавиши ESC.
Функция Расстояния позволяет измерять расстояния и углы на текущем изображении. Измерения производятся с помощью резиновой линии. Нажатием левой кнопки "мыши" фиксируется начальная точка отрезка. Перемещение "мыши" приводит к изменению положения конечной точки отрезка. Значения расстояний/углов отображаются на экране в формате:
D1:
A1:
D2:
A2:
и т.д.
Расстояния отображаются в сантиметрах, для томограмм и в пикселях для других изображений, а углы по отношению к горизонтали в диапазоне -90 - +90 градусов. Нажатие правой кнопки "мыши" приводит к фиксации конечной точки отрезка и выводу значений, соответствующих этому отрезку, на экран. Последовательно можно зафиксировать до 8-ми отрезков. Затем каждый вновь введенный отрезок будет как бы выталкивать первый из имеющихся. Выход из функции осуществляется с помощью клавиши Esc или повторным нажатием правой кнопки.
Функция Профиль осуществляет вывод профиля данных. При выборе функции Профиль выводится управляющее окно. В нем отображены два скроллера - горизонтальный и вертикальный. Выбор скроллера автоматически ведет к выбору вертикального или горизонтального сечения для построения профиля. В дополнительном окне отображается номер строки или колонки и выводится максимальное и минимальное значение для данного сечения. Для выхода из функции Профиль достаточно закрыть дополнительное окно или нажать любое другое окно.
Функция Объемы позволяет вычислять объемы нескольких образований по серии томограмм с учетом толщины среза и расстояния между срезами. В случае если томограммы вводились с видеосигнала, предполагается, что расстояние между центрами смежных слоев равняется толщине среза.
При вызове функции Объемы в правый верхний угол экрана выводится окно Объемы, а в верхней строке - меню Объемы.
В окне Объемы находятся:
подокна, отображающие параметры ROI;
кнопки изменения параметров;
функциональные кнопки.
Для работы с объемом, прежде всего надо установить его номер.
Подокна с номерами объемов (от 1 до 8) отображены вверху окна Объемы в виде вертикального ряда; для установки нужного номера надо наехать курсором на подокно с этим номером и щелкнуть левой кнопкой мыши; подокно с установленным номер выделяется цветом.
Далее надо установить параметры зоны интереса аналогично тому, как это делается в функции ROI.
Для вычисления объемов необходимо выделить зону интереса на каждом срезе. Зона интереса выделяется аналогично функции ROI кнопкой Выбор или вызывается кнопками Вызов и ВызВсе. Результаты вычисления объемов отображаются в окне Объемы в строке с соответствующим номером объема. Для смены номера среза служит кнопка IM+. Для передачи результатов вычисления выделенного объема или всех объемов в окно с заключением надо нажать, соответственно, кнопки Экспорт и ЭксВсе.
Для перехода к вычислениям объемов других объектов служат три элемента меню Объемы:
Нов_NO - загрузка нового объекта,
NO+ - переход к следующему объекту,
NO - переход к предыдущему объекту.
При нажатии клавиши F1 выводится текст помощи. Выход из функции Объемы - кнопка Выход.
Как пользоваться калькулятором.
Для работы с калькулятором необходимо активизировать окно Изображения (если оно не было активным), в верхнем меню войти в подменю Изм и выбрать функцию Калькулятор. На экран выводится панель калькулятора, которая имеет вид:
На панели размещены следующие поля:
· отображения операндов (ОП1,ОП2), операции(OП), результата (РЕЗ), памяти (П);
· клавиш набора чисел;
· клавиш операций;
· клавиш вычислительных функций;
· клавиш вспомогательных функций;
· клавиш работы с памятью;
· клавиш загрузки величин, измеренных ранее на изображении;
Все действия осуществляются "мышью" путем наезда ее курсора на нужную клавишу и нажатия левой кнопки. При этом, если после очередного нажатия кнопки "мыши" должен получиться результат, не отпуская кнопку можно видеть в соответствующих полях оба операнда, операцию и результат. После отпускания кнопки "мыши" результат перемещается на место первого операнда, а поле второго операнда очищается. На место любого операнда можно загрузить одну из величин, измеренных ранее на изображении. Так как каждая из этих величин может иметь до восьми значений, то после выбора нужной величины (осуществляется подсветка клавиш "1"-"8") необходимо ввести нужный номер значения этой величины. Например, если необходимо ввести величину расстояния, измеренного вторым, надо нажать на клавишу "D", а затем на клавишу "2".В калькуляторе имеется память на одно число - регистр П. Поле работы с памятью имеет клавиши, позволяющие производить следующие действия:
Сбр - очистка «П»,
ПЗ - загрузка в «П» из поля "ОП1",
ПЧ - загрузка в поле "ОП1" из «П»,
Пx - обмен полей "ОП1" и «П»,
П+ - сложение «П» с "ОП1",
П- - вычитание из «П» "ОП1",
П* - умножение «П» на "ОП1",
П/ - деление «П» на "ОП1".
Результаты арифметических операций с "П" помещаются также в "П". Помимо арифметических операций в поле вычислительных имеются клавиши SQRT - вычисление квадратного корня из "ОП1" и клавиша 1/x - вычисление значения 1/"ОП1". Вспомогательная функция "BACK" стирает последнюю цифру при наборе операнда, при многократном "нажатии" можно стереть весь операнд. Вспомогательная функция "UNDO" возвращает ситуацию, в которой находился калькулятор до последнего "нажатия", в отличие от предыдущей функции ее действие однократно. Вспомогательная функция "x>Text" помещает значение "ОП1" в файл "text", она может использоваться, когда при наборе текста в текстовом окне появляется необходимость вставки в текст нужных числовых значений.
При нажатии клавиши F1 выводится текст помощи. Выход из функции - закрытие окна (щелчок мыши в левый верхний угол)
Подменю элемента Манип (манипуляции)
Сложить изобр. | {Ctr/A} | сложение изображений |
Вычесть изобр. | {Ctr/S} | вычитание изображений |
Инверсия | {Ctr/V} | позитив/негатив текущего изображения |
Фильтры | -> | фильтрация изображений |
Фрагменты | -> | функции работы с фрагментами экрана |
Масштаб/ Поворот | {Ctr/R} | масштабирование и поворот изображения |
Зеркало | {Ctr/W} | получение зеркального изображения |
Увеличить | {Ctr/Z} | выбор и масштабирование фрагмента изображения |
Масштаб X Y | {Ctr/L} | выбор размеров изображения в пикселях |
Растянуть окно | {Ctr/I} | выбор прямоугольной зоны и контрастирование изображения в ней |
Окно - по средн. | {Ctr/E} | установка центра окна отображения по значению среднего для текущей зоны интереса |
Перегрузить | {Ctr/O} | перевывод текущего изображения |
Сложение изображений
Функция позволяет получить среднее текущего изображения и выбранного при входе в функцию. При входе в функцию появляется текущий каталог изображений, аналогичный используемому в функции Откр IM. После выбора файла выполняется сложение изображений. Полученный результат замещает в памяти текущее изображение и выводится на экран. К новому изображению применимы операции фильтрации, измерений и работы с фрагментами.
Вычитание изображений
Функция аналогична предыдущей, но производит вычитание выбранного изображения из текущего изображения.
Инверсия изображения
Функция инвертирует изображение путем построения инверсной таблицы преобразования яркости при выводе на экран. Повторный вызов функции возвращает исходный режим отображения.
Подменю элемента Фильтры
Smooth | {Shift/1} | фильтp сглаживания |
Mean | {Shift/2} | фильтp усpедненного сглаживания |
Contour | {Shift/3} | фильтp подчеpкивания контуpов на основе матpицы pазмеpом 3*3 пикселей |
Variable | {Shift/4} | фильтp пеpеменного сглаживания |
Edge-enhancing | {Shift/5} | фильтp улучшения контуров |
Edge-enhancing with smooth | {Shift/6} | фильтp сглаживания контуpов |
Shading | {Shift/7} | фильтp обpаботки полутонов |
Smoothing 2*2 | {Shift/8} | фильтp сглаживания (усpеднение на основе матpицы pазмеpом 2*2 пикселей) |
Median | {Shift/9} | медианный фильтp |
Contour | {Shift/0} | контуpный фильтp (матpица pазмеpом 5*5 пикселей) |
Matrix 3*3 | {Shift/} | матричный фильтp 5*5 |
Filter Setup | {Shift//} | установка характеристик матричных фильтров |
Некоторые алгоритмы фильтрации изображений в системе CTsoft
A | B | C | Обозначение элементов изображения в матрице 3*3, наиболее часто используемой |
D | E | F | для фильтрации изображений |
G | H | J |
Smoothing Gaussian filter
Smoothing filter via mean value formation
Contour filter
Variable filter
где
P(x,y) - фильтруемая центральная точка
P(r) - пиксель внутри выбранной матрицы
R1/R2 - радиус матрицы фильтруемого фрагмента изображения в пикселях в X,Y направлениях
S1,S2 - весовой фактор в X,Y направлениях
r - радиус пикселя
Edge-enhancing filter
Edge-enhancing, smoothing filter
Shading filter
Smoothing filter via averaging with 2*2 pixel matrix
Contour filter with 5*5 pixel matrix
Подменю элемента Фрагменты:
Сохранить изображение | сохранение всего текущего изображения из окна Изображения как фрагмента |
Выбрать и сохранить | выбор и сохранение фрагмента экрана |
Сохранить окно | сохранение окна Изображения как фрагмента |
Загрузить | загрузка ранее сохраненного фрагмента и размещение его на экране |
Загрузить в формате PCX | загрузка ранее сохраненного фрагмента в формате PCX в отдельное окно |
Для функций сохранения фрагмента перед их записью выводится окно выбора типа файла фрагмента. Возможен выбор форматов IMG, BMP и PCX. В формате IMG фрагмент записывается в файл в виде последовательности байтов, начиная с левого верхнего угла фрагмента строчка за строчкой. В начале файла помещаются два параметра типа Int16, определяющие размер фрагмента по X и Y. После выбора типа файла выводится окно для задания имени файла. В зависимости от формата файл должен иметь расширение IMG, BMP или PCX.
Функция Масштаб/ Поворот позволяет поворачивать изображение на произвольный угол и масштабировать его с произвольным коэффициентом. После вызова функции выводится окно, содержащее два числовых параметра: Масштаб и Угол. Параметр Scale имеет по умолчанию значение 1, Угол - 0. Угол поворота задается в градусах и отсчитывается против часовой стрелки. В результате поворота и масштабирования получается изображение, которое может обрабатываться, как обычная томограмма или снимок, и сохранено в файле с помощью функции Сохранить как ...
Функция Увеличить позволяет выделять произвольный фрагмент изображения и увеличить его до размера текущего изображения.
Функция Масштаб X Y позволяет изменить размеры изображения, задавая количество точек по каждой координате, в которое вы хотите преобразовать исходное количество точек.
Функция Растянуть окно позволяет выбрать прямоугольную зону интереса и контрастировать изображение в ней. Левая верхняя граница зоны устанавливается при нажатии левой кнопки "мыши". Зона расширяется до нужного уровня и ограничивается нажатием правой кнопки. Если в процессе расширения зоны выясняется, что следует изменить начальную точку зоны, необходимо вновь нажать левую кнопку "мышки" в нужном месте и повторить вновь процесс задания зоны. Нажатие правой кнопки "мыши" фиксирует конфигурацию полученной зоны и контрастирование изображения в ней на всю шкалу яркости.
Функция Окно - по среднему устанавливает значение центра окна отображения, равное среднему значению, полученному при обработке текущей зоны интереса. Если для данной зоны не производилось измерений, устанавливается значение 0.
Функция перезагрузки изображения Перегрузить загружает в память и на экран исходное изображение, т.е. удаляет с экрана результаты манипуляций.
Подменю элемента Серв
Двойное окно | вызов окна для работы с комбинацией CW-окон | |
Цветная палитра /Стандартная палитра | перевывод в цветной палитре/стандартной палитре | |
Раскрасить | цветовое кодирование выделенных диапазонов значений в изображении | |
Создать объем | генерация объема по серии срезов | |
Стереотаксис | манипуляции по вводу системы координат в срезы, полученные со специальными метками, и получению координат точки цели | |
Двойной масштаб/ Масштаб 1:1 | {Ctr/D} | увеличение изображения в два раза с интерполяцией/ воз- врат к исходному масштабу |
3D параметры | дополнительные | |
Hide all | отменить все назначения по отображению точек, линий и динамики | |
Show points | отображать точки 3D измерений в текущем окне | |
Show lines | отображать проекции линии в текущем окне при 3D изме- рениях | |
Show curve | отображать проекции произвольной линии в текущем окне при 3D измерениях | |
Show all | отображать проекции всех примитивов в текущем окне при 3D измерениях | |
Show dynamics | отображать след инструмента в текущем окне при 3D визуализации динамических эффектов в окне Animation | |
Не выделять/ Выделять | изменение значения флага выделения при загрузке объекта, если значение параметра Не выделять, то при загрузке объекта все изображения - не выделены, иначе - все выделены, если после загрузки объекта вы выделили часть изображений, то изменение этого параметра приведет к инверсии выделения | |
Установка окон | установка значений параметров C и W из набора 1-5 в качестве текущих параметров | |
Параметры экрана | выбор и установка разрешающей способности экрана: 640*480 , 800*600, 1024*768 |
Функция Двойное окно позволяет выводить изображение не в одном CW-окне, а в нескольких с помощью выводимого нижеприведенного окна.
Стандартно всегда включено CW-окно с номером 1. Включение другого окна производится следующим образом:
выбирается номер окна (при этом кнопка Вкл отобразится как Вык);
устанавливаются, если это необходимо другие значения C и W;
нажимается кнопка Вык (при этом она отобразится как Вкл);
нажимается кнопка Уст - установить.
Выключается окно приведением кнопки Вкл/ Вык в состояние Вык и нажатием кнопки Уст.
Кнопка Поз при нажатии перевыводится как Нег и служит для перехода от позитива к негативу и наоборот.
Функция Раскрасить позволяет раскрашивать изображение - она выводит пиксели, попавшие в один из трех заданных диапазонов, соответственно одним из трех цветов: красным, зеленым или синим. Диапазоны выбираются с помощью линеек выводимого при обращении к функции окна, приведенного ниже.
Движок вертикальной линейки меняет текущий центр всех трех диапазонов, а горизонтальной - общую ширину трех диапазонов, которая делится на три. Первый диапазон находится в пределах между числами D1 и D2, второй - между D2 и D3 и третий - между D3 и D4. Значение центра равно (D1+D4)/2. Выход из функции - гашение окна (квадрат в левом верхнем углу).
Функция Создать объем обеспечивает построение объемного представления по серии последовательных срезов. При вызове функции вызывается меню настройки параметров объемного представления:
Select Mode | Select/All | Режим выбора области для включения в объем: Select -выбор прямоугольника на первом изображении, All - все изображение |
Bit per voxel | 8/16 | Разрядность объемного представления |
Filters | Вык/1-12 | Выбор номера фильтра |
To pack result | Yes/No | Флаг упаковки получаемого объемного представления |
Circle cut | Вык/Вкл | Включение/выключение обрезки эллипсом периферийных значений изображения |
Start file | Load/Current | Флаг выбора первого файла изображения при построении объемного представления: Load - загружать, Current - начинать с текущего изображения |
X0: | 128 | Х -координата центра эллипса |
Y0: | 128 | Y - координата центра эллипса |
EA0: | 110 | радиус эллипса по горизонтали |
EB0: | 115 | радиус эллипса по вертикали |
Функция Установка окон обеспечивает возможность сохранять, редактировать и выбирать текущее окно из семи пар чисел (C,W). При входе в функцию выводится окно ввода, где помимо указанных семи пар чисел, выведены 2 параметра и 7 кнопок с номерами окон (от 0 до 6) и кнопка Отказ. Текущее окно имеет номер 0. Первый параметр имеет два значения (при нажатии меняются на противоположное). Первое значение - Установка выбранного окна. При этом если нажать на кнопки с 1 по 6, соответствующие значения C и W перепишутся в текущее (0) окно пере выведется изображения и функция завершится. Второе значение Фиксация текущего в выбранном приводит к тому, что при нажатии кнопок с 1 по 6 произойдет запоминание значений C0 и W0 в соответствующей паре. Второй параметр включает/выключает двойное окно-изображение выводится одновременно в двух окнах (всегда 0 и 1). Чтобы установить двойное окно, надо при выходе нажать кнопку 0. То есть, кнопки 1-6 всегда устанавливают одинарное окно. Установить заранее подготовленные окна можно также с помощью клавиатуры - клавишами 0-6 (0-включает/выключает двойное окно)
Что еще можно делать с помощью меню окна Изображения.
Функция Удал производит удаление либо изображения выведенного в окно Изображения, либо заранее выделенных изображений, перед удалением выводится окно подтверждения.
Функция Мфор производит подготовку экрана для вывода на мультиформатную камеру. Если в вашем компьютере имеется соответствующее оборудование (плата FrameGrabber) и к нему присоединена мультиформатная камера, происходит вывод на нее. Выход из этого режима - нажатие любой клавиши.
Функция Печ действует в режиме загрузки объекта. Если есть выделенные изображения, они печатаются с ранее установленными параметрами.
Какие параметры системы можно установить элементом подменю Setup меню CT.
Выводится окно изменения системных параметров. В нем можно установить следующие параметры системы:
- тип меню,
- масштаб при импорте сечений из 3D,
- шаг изменения уровня С,
- шаг изменения уровня W,
- цвет надписей,
- цвет надписей при печати с экрана,
- цвет линий,
- порт принтера.
Как работать с видеосигналом - окно FG Сервис
Окно FG Tools состоит из шести функциональных кнопок и меню.
Функция Нов.пациент/ Стоп запрашивает информацию о новом пациенте/завершает цикл ввода изображений.
Фамилия и возраст: | |||||||
Номер пациента: | |||||||
Номер снимка: | |||||||
Толщина среза: | |||||||
Диаметр зоны: | |||||||
Комментарий 1: | |||||||
Комментарий 2: | |||||||
Дополнительная информация: | |||||||
Число кадров в фильме: | |||||||
OK | Отказ | ||||||
Некоторые значения предлагаются по умолчанию, но могут быть изменены. Номер пациента должен быть уникальным, иначе возможно стирание ранее введенных изображений. Ввод начального номера снимка позволяет, в случае необходимости, начать ввод изображений не с первого снимка и дополнять уже имеющиеся изображения данного пациента.
Функция Запись (оцифровка и запись текущего видеоизображения) фиксирует изображение, записывает его в файл изображения и выводит его на экран.
Функция Запис.фильм записывает последовательность изображений в соответствии с заданным числом кадров с максимально возможной скоростью - порядка 4 кадров в секунду.
Функция Показ.фильм проигрывает записанный или загруженный фильм.
Функция Фиксир.кадр сохраняет текущий кадр записанного или загруженного фильма с текущими NO и NS. Следует применять эту функцию до нажатия кнопки Стоп.
Функция Загр.фильм загрузить ранее записанный фильм и запустить его проигрывание.
FG Устан | Установка параметров ввода изображений |
*Кадр + | Переход к следующему кадру фильма |
*Кадр - | Переход к предыдущему кадру фильма |
*Фильм в изобр. | Преобразование всех кадров фильма в изображения |
Изобр.как фильм | Проигрывание изображений начиная с текущего |
*Удалить | Удаление текущего фильма |
* - фильм должен быть загружен.
Подменю элемента FG Устан
Используется для настройки конкретной платы поставщиками системы при инсталляции.
· H Total` - частота строчной развертки
· H Displayed - количество пикселей в строке /8
· H Sync Position - сдвиг изображения по горизонтали
· H Sync Width - ширина строчного синхроимпульса
· V Total - частота кадровой развертки
· V Adjust - плавная настройка частоты кадровой развертки
· V Displayed - количество линий по вертикали
· V Sync Position - сдвиг изображения по вертикали
· Interplace Mode - 3 - чересстрочная развертка, 1 - прогрессивная
· Max Scan Line Address - всегда 15
· Scan frame size: 128 -выбор размера области динамической визуализации
· Scan X-Left: 0 -выбор левой X-координаты области динамической визуализации относительно левого верхнего угла матрицы в CT
· Scan Y-Up: 0 -выбор верхней Y-координаты области динамической визуализации относительно левого верхнего угла матрицы в CT
· Save X - x-координата сохраняемого прямоугольника
· Save Y - y-координата сохраняемого прямоугольника
· Save NX - размер по x-координате сохраняемого прямоугольника
· Save NY - размер по y-координате сохраняемого прямоугольника
Как работать с текстовой информацией - окно Текст.
Окно предназначено для редактирования и печати предварительно загруженных текстовых файлов. Стандартный вариант - это редактирование заключения. Заключение-это текстовый файл, относящийся к пациенту с номером NO, имеющий имя формата c.txt и расположенный в директории с путем, указанным в конфигурационном файле ct.cfg в параметре ctxt (информация о ct.cfg приведена в приложении). Если этот параметр отсутствует, путь директории заключений-\ctxt. При загрузке изображения, если заключение уже имеется, оно автоматически загружается в окно Текст. Если в конфигурационном файле параметр concl равен 1, то при загрузке изображения, если заключения нет, оно создается с начальным содержимым, которое берется из файла text рабочего директория, который является текущим шаблоном. Кроме того, перед этим текстом вставляется шапка, состоящая из двух строк с названием учреждения, датой и идентификацией пациента (эта информация берется из изображения). При активизации окна Текст в верхней строке выводится меню:
Файл +Автозапись Формат Печать Показ фраз.
При работе со строкой меню Файл выводится подменю для работы с файлами:
Загрузить текст - загружает в окно файл с расширением txt;
Записать текст - производит запись в текущий файл;
Очистить - очищает окно;
Загрузить шаблон - загружает файл с шаблоном (должен иметь расширение txt) из директория \pattern.
Записать шаблон - записывает текст окна в файл с шаблоном (должен иметь расширение txt) в директорий \pattern.
Строка + Автозапись означает, что включен режим автоматической записи нового состояния окна, нажатие приводит к инверсии ситуации, строка приобретает вид - Автозапись:
Формат - происходит форматирование текста, которое заключается в удалении переносов слов и в склейке строк, если следующая строка начинается с первой позиции, а не с табуляции или с пробелов.
Печать - происходит печать находящегося в окне текста.
При щелчке мыши на строку меню Показ фраз в правый угол экрана выводится подсказка для загрузки в окно словосочетаний, которые заранее набраны в файле phrase.txt. Гасится повторным щелчком на строку меню Показ фраз.
При нажатии F1 выводится текст подсказки, который гасится нажатием клавиши Esc.
При наборе теста в текстовом окне, текст справа от курсора сдвигается вправо. Он может стать невидим при превышении строкой заданной ширины, которая определяется количеством символов умещающихся в строку при выводе на принтер, но не пропадает. При достижении курсором заданной ширины строки происходит автоматический перенос курсора на следующую строку вместе с возможно ушедшей вправо частью строки, и она становится видимой.
Стрелка влево | Перемещение курсора |
Стрелка вправо | Перемещение курсора |
Стрелка вверх | Перемещение курсора |
Стрелка вниз | Перемещение курсора |
Page Up | Листание текста вверх |
Page Down | Листание текста вниз |
Insert, Ins | Включение/отмена режима вставки |
Delete, Del | Удалить символ справа от курсора |
Backspace | Удалить символ слева от курсора |
Home | Встать на начало строки |
End | Встать на конец строки |
Enter | Разрыв текущей строки на месте курсора |
F3 | Маркировать текст |
F4 | Отменить маркировку текста |
Cnrl(F3) | Удалить маркированный текст и запомнить его |
Cnrl(F4) | Вставить удаленный в последний раз текст |
F5 | Изменение цвета фона |
F6 | Изменение цвета текста |
F8 | Удаление строки |
F9 | Склеивание строк, начало следующей строки попадает на место курсора в текущей |
Alt+буква | Загрузка соответствующего словосочетания, определяемого из файла phrase.txt |
Alt+F1 | Удалить только что загруженное словосочетание |
F1 | Вывод текста помощи |
Кнопки "мыши" | Исполнение функций меню или позиционирование курсора в поле текста |
Как работать с окном ввода формы
Окно ввода формы применяется во многих местах пакета и служит для модального ввода значений параметров, т.е. выход из окна возможен только при нажатии одной из управляющих кнопок.
№ | Имя | окна | формы | |
Параметр 1 | : Значение параметра 1 | Параметр 2 | : Значения параметра 2 | |
Параметр 2 | : Значение параметра 3 | Параметр 4 | : Значение параметра 4 | |
.... | : | : | ||
Параметр N-1 | : Значение параметра N | Параметр N | : Значение параметра N | |
OK | Cancel | |||
Редактирование строки при вводе формы
(ввод имени файла и т.п.)
Insert, Ins | Включение/отмена режима вставки |
Delete, Del | Удалить символ справа от курсора |
Backspace | Удалить символ слева от курсора |
Home | Встать на начало строки |
End | Встать на конец строки |
Стрелка влево | Перемещение курсора; перебор вариантов циклически вправо для вариантного поля ввода |
Стрелка вправо | Перемещение курсора; перебор вариантов циклически влево для вариантного поля ввода |
Стрелка вверх | Переход из одного поля ввода в другое |
Стрелка вниз | Переход из одного поля ввода в другое |
Enter | Закончить ввод с результатом, определяемым высвеченной кнопкой меню |
Esc | Отменить ввод |
Tab | Переход из режима ввода полей к меню и обратно |
Кнопки "мыши" | Исполнение функциональных кнопок или позиционирование курсора в поле ввода для вариантных полей ввода (левая кнопка-перебор вари- антов циклически вправо, а правая - влево) |
Как работать с архивом изображений.
В случае пополнения архива работа делится на следующие два этапа:
подготовка изображений для записи на носители, т.е. создание архивных файлов;
копирование архивных файлов на архивный носитель (магнитооптический диск, магнитная лента).
Выполнение второго этапа производится либо автоматически, если путь архива указывает на ваш архивный носитель (например, на имя устройства магнитооптики), либо с помощью специальных программ (например, Tape для стриммера).
В случае извлечения из архива этапы выполняются в обратном порядке.
Для работы с архивом необходимо активизировать окно Управление (если оно не было активным) и активизировать элемент верхнего меню Архив. Выводится окно для установки параметров, выбора работы и выбора директориев. В этом окне выводятся подокна со следующими параметрами и их значениями по умолчанию:
Эти параметры можно менять. Внизу под параметрами выведены два ряда клавиш.
В первом ряду четыре клавиши для выбора нужной работы:
АРХИВ РАЗАРХИВ УПАКОВКА РАСПАКОВКА. Предварительно выбранная работа подсвечена зеленым цветом; если надо сменить работу щелкните левой кнопкой мыши на нужной клавише.
Для каждой работы в файле pasoudes.dat заводится по две строки с путями исходной и результирующей директории в следующем порядке: распаковка, упаковка, разархивирование, архивирование. Значения этих строк, т.е. пути можно менять клавишами ПУТЬ ОТКУДА и ПУТЬ КУДА
Во втором ряду - клавиши: ПУТЬ ОТКУДА для выбора пути исходного директория
ПУТЬ КУДА для выбора пути директория результата
Отказ отказ от функции.
Значения параметров обрезки определяют процедуру, производимую над изображением перед упаковкой, которая состоит в том, что все числа, отображаемые пикселями изображения, (например, для рентгено-томограммы это числа Хаунсфилда) меньшие минимума приравниваются минимуму, а большие максимума приравниваются максимуму, все остальные числа остаются без изменения. Это означает, что при последующей распаковке мы получим числа только в диапазоне окна обрезки. То есть, при сужении окна обрезки происходит некая потеря информации; в виде компенсации за эту потерю мы получаем более эффективную упаковку. Соответственно вышеизложенному, значения минимума и максимума окна обрезки выбираются так, чтобы это окно включало бы в себя все значимые числа изображения.
Значение параметра "Выполнить работу над всеми файлами или выборочно" "над всеми" приводит к тому, что после запуска работа будет выполнена над всеми файлами изображений в соответствующем поддиректории без участия оператора. Значение "выборочно" приводит к тому, что после запуска программа будет ждать от оператора действий, описанных ниже.
Значение параметра "Удалять исходные файлы при работе с архивом" "да" приводит к удалению соответственно архивируемых или разархивируемых файлов; значение "нет" исключает удаление.
Следующий параметр позволяет выводить сообщения о неудачах упаковки-распаковки и тогда оператор может прервать этот процесс.
Следующие два параметра позволяют задать режим создания архива из упакованных или неупакованных изображений и режим разархивирования до упакованных или до неупакованных изображений.
При нажатии на клавиши выбора путей ПУТЬ ОТКУДА, ПУТЬ КУДА выводится соответствующее окно. Выбранные пути отображаются в окне работы с архивом. После выбора параметров и путей для запуска программы работы с архивом надо щелкнуть левой кнопкой мыши на заранее выбранной клавише работы (т.е. на клавише зеленого цвета). Все окна исчезнут, и запустится программа упаковки/распаковки и работы с архивом, которая описана ниже.
Процедура архивирования изображений заключается в упаковке файлов с изображениями (если они не были предварительно упакованы) и в соединении упакованных файлов, относящихся к одному пациенту, в один файл. Упаковка файлов с изображениями производится по определенному алгоритму и дает выигрыш в 4-5 раз. Процедура разархивирования обратна процедуре архивирования. Согласно системным соглашениям неупакованные, упакованные, и архивные изображения располагаются в разных директориях, начальные пути которых определяются в файле ct.cfg.
Пути исходной и результирующей директории программа берет из файла pasoudes.dat в соответствии с выбранной работой. Процедуры архивирования и разархивирования производятся над изображениями или архивами, находящимися в соответствующих директориях.
Если выполнение работы было задано с параметром "выборочно", программа работает в "ручном" режиме. На экран выводится две строки: в первой (вверху экрана) отображается вид работы и значения параметров окна обрезки, а в дальнейшем отображаются сообщения программы; во второй (внизу экрана) - меню типа Нортон.
Вначале оно содержит следующее: 1Help 2WorkC 3Min 4Max 5Choic...10Quit.
Оператор имеет возможность:
· получить подсказку - F1;
· изменить вид работы нажатием клавиши F2 или нажатием кнопки мыши при наезде на поле "F2" или поле с названием вида работы в верхней строке;
· в режиме упаковка и архивирование изменить значения минимума и максимума окна обрезки данных; то осуществляется соответственно клавишами F3,F4 или нажатием кнопки мыши при наезде на поля "F3","F4" или поля со значениями границ и дальнейшим редактированием и выходом по Enter в случае правильной редакции или по Esc в случае отказа;
· выбрать файлы, над которыми будет выполнена заданная работа, что осуществляется нажатием клавиши F5 или нажатием кнопки мыши при наезде на поле "F5";
· выйти из программы -F10.
При выполнении оператором функции выбора файлов нижняя строка экрана модифицируется и выглядит следующим образом: 1Help 2Esc 3Exec 4+All 5+Page...8-Page 9-All 10Quit.
Затем выводится таблица файлов и сообщение в верхней строке:
Всего файлов NN Из них выделено 0 (NN- общее число файлов).
Таблица файлов состоит из двух колонок. В первой находятся номера объектов NO в порядке возрастания, во второй - списки номеров срезов NS. Строка таблицы - это NO и список NS этого объекта. Сверху таблицы - строка, отображающая путь исходного директория. В правом верхнем углу таблицы выведено "Esc" для отказа от функции выбора с помощью мыши, а также, в случае, когда таблица не умещается на одном экране (листе), в левом верхнем углу и в правом нижнем выводится соответственно "PgDn" и "PgUp" для листания таблицы с помощью мыши.
Оператор теперь имеет возможность:
· получить подсказку - F1;
· отказаться от функции - F2;
· выйти из программы -F10.
А также, осуществить выбор и инициировать выполнение работы.
Выбор в таблице файлов осуществляется функциональными клавишами или специальным курсором. Текущее положение курсора отображается цветом. Движение курсора осуществляется стрелками или мышью (курсор мыши наводится на нужное место и нажимается Enter). Выбрать можно отдельное изображение, строку, лист и все файлы. Выбранные файлы выделяются цветом. Аналогично можно отменить выбор.
Выбор всех файлов и всех файлов экранного листа осуществляется клавишами F4, F5; отмена - F8, F9.
Выбор файлов строки или отдельного файла осуществляется подводом курсора на начало строки или на нужный файл и нажатием Enter или кнопки мыши. В процессе выбора в верхней строке отображается число выделенных файлов.
Запуск выполнения работы осуществляется с помощью клавиши F3 или нажатием кнопки мыши при наезде на поле "F3". При этом в верхнюю строку выводится сообщение:
Всего файлов NN Из них успешно 0 (NN- число выделенных файлов).
После успешного выполнения работы над текущим файлом он "гасится" в таблице файлов и корректируется верхняя строка сообщений. Нижняя строка экрана модифицируется и выглядит следующим образом: 1Help...4Set 5Choic...10Quit.
Прервать выполнение работы можно клавишей Esc. По окончании оператор имеет возможность:
· получить подсказку - F1;
· войти в режим установки вида работы (начало программы) - F4;
· войти в режим выбора файлов (осуществить новый выбор) - F5;
· выйти из программы -F10.
ГЛАВА 2.
Как работать с трехмерными объектами.
Окна 3D визуализации
окно 3D preview | обеспечивает визуализацию каркаса объемного представления в текущем положении для трехмерной визуализации, вывод аксиального, коронарного и сагиттального сечений с проекциями секущих плоскостей и ориентации объемного представления. |
окно 3D view | предназначено для вывода трехмерного изображения с возможностью отображения на нем аксиального, коронарного, сагиттального и параксиального сечений и построение внешнего вида объекта. |
окно 3D measurе | обеспечивает проведение трехмерных измерений значений объемного распределения и расстояний в объеме для окон 3D preview, 3D view, и Изображения, а также выделения кривых для построения параксиальных и произвольных сечений и выбора точек цели и входа при планировании операций. |
окно Animation | позволяет создавать последовательности сечений для динамического просмотра при введении инструмента с привязкой к трехмерным координатам объекта и проводить с их использованием планирование операций. |
Окна 3D визуализации работают совместно с окнами Изображения и окном Текст. Все окна 3D визуализации имеют общее меню, отдельные элементы которого связаны с различными окнами, а другие воздействуют на активное в данный момент окно. Некоторые элементы меню активизируются только при наличии определенного типа данных в памяти. К окнам 3D визуализации относятся:
Окно 3D preview для предварительного просмотра аксиального, коронарного и сагиттального сечений и ориентации отображения в окне 3D view.
Окно 3D view для просмотра объемного представления в различных ракурсах с наложенными аксиальным, коронарным, сагиттальным и произвольным сечениями и внешним видом объекта.
Окно Animator для построения и просмотра анимационных последовательностей, позволяющих просматривать траекторию прохождения инструмента при вмешательстве и корректировать ее путем изменения координат точек входа и цели.
Окно 3D Measure для измерений координат, плотностей и расстояний в объеме и задания траектории оперативного вмешательства.
Структура меню окон 3D визуализации имеет следующий вид:
File | загрузка/генерация объемного представления и полученных при работе данных и изображений | |
Load volume | загрузка объемного представления из файла | |
Load 3D view | загрузить ранее сохраненное 3D изображение | |
Save 3D view | сохранить 3D изображение | |
Load film | загрузка файла данных анимационного планирования | |
Save film | сохранение файла данных анимационного планирования | |
Generate Cube | генерация тестового полутонового куба | |
Generate Ball | генерация тестовой полутоновой сферы | |
Write log | записать результаты измерений в текстовое окно | |
Options | установки параметров | |
Off/On Projections | включить/выключить отображение сечений | |
3D view settings | установить параметры 3D отображения | |
Set measure font | загрузить фонт для окна измерений | |
Redraw | перерисовка 3D представления | |
Measure | измерения | |
Entry/Target | задание точек входа и цели | |
Points | измерения с фиксацией точек в объеме | |
Lines | измерение расстояний и задание косых срезов | |
Clear | очистить установки и результаты измерений | |
All | очистить все установки | |
Points | удалить выделенные точки | |
Lines | удалить выбранные линии | |
Animator | работа с анимационными последовательностями | |
Make | запуск генерации данных анимационной последовательности, определенных Entry point и Target point | |
Play P | запуск просмотра анимационной последовательности в динамическом режиме | |
Fix entry | установить фиксацию точки входа или цели |
Параметры 3D визуализации
Param | -> | параметры окна 3D view |
Color: | 0/1/2/.../15 - номер цвета для фона | |
Axial: | on/off - включить/выключить аксиальное сечение | |
Coronar: | on/off - включить/выключить коронарное сечение | |
Sagital: | on/off - включить/выключить сагиттальное сечение | |
Oblique | on/off - включить/выключить параксиальное сечение | |
Scale | 1.0 - масштаб вычисления 3D образа |
Управление при работе с анимационными последовательностями
+ | переход в пошаговый режим или переход к следующему кадру анимационной последовательности |
- | переход в пошаговый режим или переход к предыдущему кадру анимационной последовательности |
* | увеличение скорости показа анимационной последовательности |
/ | уменьшение скорости показа анимационной последовательности |
Кнопки окна 3D measure
Entry Point | задание точки входа при планировании операции, выбирается на окне Изображения |
Target Point | задание точки попадания при планировании операции, выбирается на окне Изображения |
Start | начать измерения |
Приложение.
Конфигурационный файл системы ct.cfg.
Стандартные пути системных директорий
image = c:\ctsys\images\*.*
; неупакованные изображения формата ct_soft
imagep = c:\ctsys\images_p\*.*
; упакованные изображения формата ct_soft
archiv = c:\ctsys\ima_arch\*.*
;архивные файлы формата ct_soft
select = c:\ctsys\box\
;отобранные изображения формата ct_soft
proi = c:\ctsys\roi\*.roi
;конфигурационные файлы зон интереса
pattern = c:\ctsys\pattern\*.txt
;файлы шаблонов заключений
ctxt = c:\ctsys\ctxt\
;файлы заключений
help = c:\ctsys\help\
;файлы подсказок
ljconf = c:\ctsys\roi\*.clj
; конфигурационные файлы печати
frag = c:\ctsys\scrfrag\*.img
;файлы фрагментов изображений формата ct_soft
pcx = c:\ctsys\scrfrag\*.pcx
;файлы формата PCX
bmp = c:\ctsys\scrfrag\*.bmp
;файлы формата BMP
img = c:\ctsys\img\
;файлы формата ОБРАЗ
3dvol = c:\ctsys\3d\*.vol
;файлы 3D
cinema = c:\ctsys\cin\*.cin
;анимационные файлы 3D
films = c:\ctsys\films\*.*
; анимационные файлы FG
Общие параметры
3dscale = 1
;начальное значение масштаба изображения
2dmode = 1
cell = 280x16
; не менять
menu = fix
;не менять (menu= fall)
ct_type = 0
;начальный тип изображения 0 - РТ , 1 - МР
multiROI= 0
;0 - до восьми зон интереса 1- больше восьми с выводом только объёмов
concl = 1
; 1 - создается (если его нет) заключение (c.txt) по шаблону text; 0 - не создается
FG-параметры
fgtype = 0
; 0 - FG, 1 - VS54
fgnx = 512
fgny = 512
fgx0 = 0
fgy0 = 0
; fgscale = 0 - ввод 512*512 1 - 256*256
fgscale = 1
; fgrem = 0 - ввод через мышь 1 - с кнопкм
fgrem = 0
fgboard = 0
; присутствие панели FG
Параметры печати
lj_res = 1
; разрешение принтера при печати изображений 0 - 300, 1 - 600 , 2 - 1200 dpi-1. img_name || !ud->ch) return;
if(ud->frag) return;
chl = ud->ch;
s = GetFileName(GetCfgItem("image"),H_CREATE); if (*s == 0) return;
img_fil = HOpen(s,H_READ); if (img_fil == 0) return;
HLocate(img_fil,0l,2048); p = HPosit(img_fil);
L = (long*)p; nx = L[2]; ny = L[3]; ud = h_data(w);
if(nx != ud->iw) { HClose(img_fil); return;}
if(ny != ud->ih) { HClose(img_fil); return;}
if (chl == 0) { HClose(img_fil); return;}
ud = h_data(w);
uhc = (char*)&p[256+128];
if(uhc[249] != 2-ud->ps) return;
if(ud->scale2d == 1)
{
pp = h_malloc(nx*4);
pq = h_malloc(nx*4);
for (j = 0; j < ny; j++)
{ ud = h_data(w);
if(ud->ps == 2)
{ HLocate(img_fil,(long)j*nx*2+2048L,nx*2); p = HPosit(img_fil);
}
else
{ HLocate(img_fil,(long)j*nx+2048L,nx); pc = HPosit(img_fil);
for(i = 0; i < nx; i++) pq[i] = (int)pc[i];
p = pq;
}
GetGWL(chl,(short*)pp,nx,j);
for(i = 0; i < nx; i++)
if(fl_sub) pp[i] = (pp[i]-2048 - p[i])/2 + 2048;
pp[i] = (pp[i]-2048 + p[i])/2 + 2048;
PutGWL(chl,(short*)pp,nx,j);
}
h_mfree(pp); h_mfree(pq);
}
else
{ p1 = h_malloc(nx*4); p2 = h_malloc(nx*4);
p0 = h_malloc(nx*4); pp = h_malloc(nx*4);
// Image interpolation
HLocate(img_fil,2048l,nx*2);
p = (int*)HPosit(img_fil);
for (i = 0, k = 0; i < nx-1; i++, k += 2)
{ p1[k] = p[i]; p1[k+1] = (p[i]+p[i+1])/2;
}
p1[k] = p[i];
for (j = 0, jz = 0; j < ny-1; j++, jz += 2)
{ // Write 1 line
GetGWL(chl,(short*)pp,nx*2-1,jz);
for(i = 0; i < nx*2-1; i++)
if(fl_sub) pp[i] = (pp[i]-2048 - p1[i])/2 + 2048;
pp[i] = (pp[i]-2048 + p1[i])/2 + 2048;
PutGWL(chl,(short*)pp,nx*2-1,jz);
//Read 2 line
HLocate(img_fil,(long)(j+1)*nx*2+2048l,nx*2);
p = (int*)HPosit(img_fil);
for (i = 0, k = 0; i < nx-1; i++, k += 2)
{ p2[k] = p[i]; p2[k+1] = (p[i]+p[i+1])/2;
}
p2[k] = p[i];
for (i = 0; i < nx*2-1; i++) p0[i] = (p1[i]+p2[i])/2;
// Write 2 line
GetGWL(chl,(short*)pp,nx*2-1,jz+1);
for(i = 0; i < nx*2-1; i++)
if(fl_sub) pp[i] = (pp[i]-2048 - p1[i])/2 + 2048;
pp[i] = (pp[i]-2048 + p0[i])/2 + 2048;
PutGWL(chl,(short*)pp,nx*2-1,jz+1);
// Line2 to Line1
for (i = 0; i < nx*2-1; i++) p1[i] = p2[i];
}
GetGWL(chl,(short*)pp,nx*2-1,jz);
for(i = 0; i < nx*2-1; i++)
if(fl_sub) pp[i] = (pp[i]-2048 - p1[i])/2 + 2048;
pp[i] = (pp[i]-2048 + p1[i])/2 + 2048;
PutGWL(chl,(short*)pp,nx*2-1,jz);
h_mfree(p1); h_mfree(p2); h_mfree(p0); h_mfree(pp);
}
HClose(img_fil);
ud = h_data(w);
ud->x0 = (ud->iw-ud->w)/2; // Центровка
ud->y0 = (ud->ih-ud->h)/2; // изображения
redraw_cw(w);
}
/***********************************************************/
void Do_Inversion(WinHandle w)
{ int i,k; int imin,imax;
Win2d *ud = h_data(w);
WinCon *udc;
DWIND *p = &ud->dw[0];
if(!ud->img_name || !ud->ch) return;
if (p->on) { if(p->neg) p->neg = 0; else p->neg = 1;
if(!ExistWindow(H3d_view))
{ udc = h_data(MainControl);
udc->inv_prn = p->neg;
}
}
SetupLUT(ud->dw);
redraw_cw(w);
}
/***********************************************************/
// Image filtration functions
static void inch(int *u,int *v)
{int temp;
temp=*u; *u=*v; *v=temp;
}
static int f9(int *mf)
{
int *max,i,j;
for(i = 0;i < 9; i++)
{max=&mf[i];
for(j = i+1;j < 9; j++) if(*max < mf[j]) max = &mf[j];
if(max != &mf[i]) inch(max,&mf[i]);
}
return(mf[4]);
}
static int f1(int *mf)
{long s;
s=(long)mf[0]+2*(long)mf[1]+(long)mf[2]+2*(long)mf[3]
+4*(long)mf[4]+2*(long)mf[5]+(long)mf[6]+2*(long)mf[7]+(long)mf[8];
return(s/16);
}
static int f2(int *mf)
{long s;
s=(long)mf[0]+(long)mf[1]+(long)mf[2]+(long)mf[3]
+(long)mf[5]+(long)mf[6]+(long)mf[7]+(long)mf[8];
return(s/8);
}
static int f3(int *mf)
{long r1,r2;
r1 = (long)mf[0]+(long)mf[1]+(long)mf[2]-(long)mf[6]-(long)mf[7]-(long)mf[8];
r1 = r1*r1;
r2 = (long)mf[0]+(long)mf[3]+(long)mf[6]-(long)mf[2]-(long)mf[5]-(long)mf[8];
r2 = r2*r2;
return((int)(2.0*sqrt((double)(r1+r2))));
}
static int f4(int *mf)
{return( mf[4]);
}
static int f5(int *mf)
{long s;
s=(-2*(long)mf[0]+(long)mf[1]-2*(long)mf[2]+(long)mf[3]
+6*(long)mf[4]+(long)mf[5]-2*(long)mf[6]+(long)mf[7]-2*(long)mf[8])/2;
return((int)s);
}
static int f6(int *mf)
{int e,s;
s = f1(mf); e = mf[4];
if((2*e - s) > 30) e = 2*e - s;
else e = s;
return(e);
}
static int f7(int *mf)
{long s;
s=-(long)mf[0]-(long)mf[1]-(long)mf[2]+(long)mf[3]
+3*(long)mf[4]-(long)mf[5]+(long)mf[6]+(long)mf[7]-(long)mf[8];
return((int)s);
}
static int f8(int *mf)
{long s;
s=((long)mf[0]+(long)mf[1]+(long)mf[2]+(long)mf[3])/4;
return((int)s);
}
static int f10(int *mf)
{return( mf[4]);
}
static void filt(int *p1,int *p2,int *p3,int *po,int str,int nfilt)
{
int mf[9],i,tr;
str=str-1; tr=str-1;
mf[0]=*(p1+str);mf[1]=*p1;mf[2]=*(p1+1);
mf[3]=*(p2+str);mf[4]=*p2;mf[5]=*(p2+1);
mf[6]=*(p3+str);mf[7]=*p3;mf[8]=*(p3+1);
switch (nfilt)
{ case 1: *po=f1(mf); break;
case 2: *po=f2(mf); break;
case 3: *po=f3(mf); break;
case 4: *po=f4(mf); break;
case 5: *po=f5(mf); break;
case 6: *po=f6(mf); break;
case 7: *po=f7(mf); break;
case 8: *po=f8(mf); break;
case 9: *po=f9(mf); break;
case 10: *po=f10(mf); break;
}
for(i = 0; i < tr; i++)
{mf[0] = *(p1+i); mf[1] = *(p1+i+1); mf[2] = *(p1+i+2);
mf[3] = *(p2+i); mf[4] = *(p2+i+1); mf[5] = *(p2+i+2);
mf[6] = *(p3+i); mf[7] = *(p3+i+1); mf[8] = *(p3+i+2);
switch (nfilt)
{ case 1: *(po+i+1) = f1(mf); break;
case 2: *(po+i+1) = f2(mf); break;
case 3: *(po+i+1) = f3(mf); break;
case 4: *(po+i+1) = f4(mf); break;
case 5: *(po+i+1) = f5(mf); break;
case 6: *(po+i+1) = f6(mf); break;
case 7: *(po+i+1) = f7(mf); break;
case 8: *(po+i+1) = f8(mf); break;
case 9: *(po+i+1) = f9(mf); break;
case 10: *(po+i+1) = f10(mf); break;
}
}
mf[0]=*(p1+tr);mf[1]=*(p1+str);mf[2]=*p1;
mf[3]=*(p2+tr);mf[4]=*(p2+str);mf[5]=*p2;
mf[6]=*(p3+tr);mf[7]=*(p3+str);mf[8]=*p3;
switch (nfilt)
{ case 1: *(po+str)=f1(mf); break;
case 2: *(po+str)=f2(mf); break;
case 3: *(po+str)=f3(mf); break;
case 4: *(po+str)=f4(mf); break;
case 5: *(po+str)=f5(mf); break;
case 6: *(po+str)=f6(mf); break;
case 7: *(po+str)=f7(mf); break;
case 8: *(po+str)=f8(mf); break;
case 9: *(po+str)=f9(mf); break;
case 10: *(po+str)=f10(mf); break;
}
}
void Do_Filters(WinHandle w, int nfilt)
{ GWHandle chl;
int i,k;
int *po,*p1,*p2,*p3,*p4,*p5,*pn,iw,ih;
double d1,d2;
Win2d *ud = h_data(w);
if ((chl = ud->ch) == 0) return;
iw=ud->iw; ih=ud->ih;
if(nfilt == 10)
{
po = (int*)h_malloc(iw*2); pn = (int*)h_malloc(iw*2);
p1 = (int*)h_malloc(iw*2); p2 = (int*)h_malloc(iw*2);
p3 = (int*)h_malloc(iw*2); p4 = (int*)h_malloc(iw*2);
p5 = (int*)h_malloc(iw*2);
i = 2;
GetGWL(chl,(short*)p1,iw,i-2);
for(k = 0; k < iw; k++) p1[k] = p1[k]-2048;
GetGWL(chl,(short*)p2,iw,i-1);
for(k = 0; k < iw; k++) p2[k] = p2[k]-2048;
GetGWL(chl,(short*)p3,iw,i);
for(k = 0; k < iw; k++) p3[k] = p3[k]-2048;
GetGWL(chl,(short*)p4,iw,i+1);
for(k = 0; k < iw; k++) p4[k] = p4[k]-2048;
for( i =2; i < ih-2; i++)
{
GetGWL(chl,(short*)p5,iw,i+2);
for(k = 0; k < iw; k++) p5[k] = p5[k]-2048;
for(k = 2; k < iw-2; k++)
{
d1 = p1[k-2] - p5[k+2]; d1 = d1*d1;
d2 = p5[k-2] - p1[k+2]; d2 = d2*d2;
po[k] = (int)sqrt(d1+d2)+2048;
}
for(k = 0; k < iw; k++) p1[k] = p2[k];
for(k = 0; k < iw; k++) p2[k] = p3[k];
for(k = 0; k < iw; k++) p3[k] = p4[k];
for(k = 0; k < iw; k++) p4[k] = p5[k];
PutGWL(chl,(short*)po,iw,i);
}
h_mfree(pn); h_mfree(po); h_mfree(p1); h_mfree(p2); h_mfree(p3);
h_mfree(p4); h_mfree(p5);
redraw_cw(w);
return;
}
if(nfilt == 4)
{
}
po = (int*)h_malloc(iw*2); pn = (int*)h_malloc(iw*2);
p1 = (int*)h_malloc(iw*2); p2 = (int*)h_malloc(iw*2);
p3 = (int*)h_malloc(iw*2);
i = 1;
GetGWL(chl,(short*)p1,iw,i-1);
for(k = 0; k < iw; k++) p1[k] = p1[k]-2048;
GetGWL(chl,(short*)p2,iw,i);
for(k = 0; k < iw; k++) p2[k] = p2[k]-2048;
for( i =1; i < ih-1; i++)
{
GetGWL(chl,(short*)p3,iw,i+1);
for(k = 0; k < iw; k++) p3[k] = p3[k]-2048;
filt(p1,p2,p3,po,iw,nfilt);
// memcpy(p1,p2,iw); memcpy(pn,p3,iw);
for(k = 0; k < iw; k++) p1[k] = p2[k];
for(k = 0; k < iw; k++) pn[k] = p3[k];
for(k = 0; k < iw; k++) po[k] = po[k]+2048;
PutGWL(chl,(short*)po,iw,i);
// memcpy(p2,pn,iw);
for(k = 0; k < iw; k++) p2[k] = pn[k];
}
h_mfree(pn); h_mfree(po); h_mfree(p1); h_mfree(p2); h_mfree(p3);
redraw_cw(w);
}
/***********************************************************/
void Do_Scale_Rotate(WinHandle w)
{ int i,k;
int nx,ny,ix,iy;
int *po;
int q1,q2,q3,q4;
double angle;
double hi,hi_t,x,y,u,v,si,co,dx,dy;
double cox = 65536.0;
long cx,cy,cx1,cy1,s1,s2;
long lx,ly,ldx,ldy,lix,liy;
unsigned char *pc,s,p;
IJ ij;
GWHandle ch,chol;
Win2d *ud = h_data(w);
if ((chol=ud->ch) == 0) return;
angle = 3.14159265*ud->angle/180.0;
hi = 1.0/ud->iw; hi_t = hi/ud->scale;
nx = ud->scale*ud->iw; ny = ud->scale*ud->ih;
si = sin(angle); co = cos(angle);
u = -hi_t*(nx/2.0); v = -hi_t*(ny/2.0 - 1);
dx = hi_t*co/hi; dy = hi_t*si/hi;
ldx= cox*dx; ldy = cox*dy;
po = (int*)h_malloc(nx*sizeof(int));
ch = NewGW(f_create("rout.tmp",F_CREATE_NORMAL),0);
for( i = 0; i < ny; i++)
{v+= hi_t;
lx = cox*( u*co - v*si + hi_t*(nx/2.0) )/hi;
ly = cox*( u*si + v*co + hi_t*(ny/2.0) )/hi;
for(k = 0; k < nx; k++)
{
ix = lx >> 16; lx+= ldx;
iy = ly >> 16; ly+= ldy;
liy = iy; liy = liy 16;
s1 = (s1*cy1)>>16;
s2 = ((long)q3*cx1 + (long)q4*cx) >> 16;
s2 = (s2*cy)>>16;
po[k] = s1+s2;
}
PutGWL(ch, (short*)po, nx, i);
}
h_mfree(po);
if (chol) DisposeGW(chol);
ud = h_data(w);
ud->ch = ch;
ud->iw = nx; ud->ih = ny;
ud->x0 = (ud->iw-ud->w)/2; // Центровка
ud->y0 = (ud->ih-ud->h)/2; // изображения
redraw_window(w);
}
// зеркальное отображение
void Do_Mirrow(WinHandle w)
{ int i,j,vol;
int nx,ny;
int *po;
GWHandle ch;
Win2d *ud = h_data(w);
if ((ch=ud->ch) == 0) return;
nx = ud->iw; ny = ud->ih;
po = (int*)h_malloc(nx*sizeof(int));
for( i = 0; i < ny; i++)
{ GetGWL(ch, (short*)po, nx, i);
for(j=0;jflef^=1;
redraw_cw(w);
}
static void Do_ResZo(WinHandle w, int nxi, int nyi, int reszo, int type)
{ int i,k;
int nx,ny,ix,iy,new_nx,new_ny,x0,y0;
int *po;
int q1,q2,q3,q4;
double x,y,dx,dy;
long cx,cy,cx1,cy1,s1,s2;
double sc_x,sc_y,cox = 65536.0;
long lx,ly,ldx,ldy,lix,liy;
unsigned char *pc,s,p;
IJ ij;
GWHandle ch,chol;
Rect r;
Rect wr = WorkRect(w);
Win2d *ud = h_data(w);
if ((chol=ud->ch) == 0) return;
if(reszo)
{ nx=nxi; ny=nyi;
new_nx = ud->iw; new_ny = ud->ih;
if(new_nx==nx && new_ny==ny) return;
}
else
{
r = type ? Set_Rect(w) : Set_Sqr(w);
if(r.x0 == -1) return;
new_nx = r.x1-r.x0+1; new_ny = r.y1-r.y0+1;
ud = h_data(w);
sc_x = (double)ud->iw/new_nx;
sc_y = (double)ud->ih/new_ny;
if( sc_x < sc_y)
{ nx = ud->iw; ny = new_ny*sc_x;
if(ny%2) ny--; ud->scale = sc_x;
}
else
{ ny = ud->ih; nx = new_nx*sc_y;
if(nx%2) nx--; ud->scale = sc_y;
}
}
OnScale(wr.x0,wr.y0);
dx = (double)new_nx/(double)nx;
dy = (double)new_ny/(double)ny;
ldx= cox*dx; ldy = cox*dy;
po = (int*)h_malloc(nx*sizeof(int));
if(reszo)
x0 = y0 = 0;
else
{ ud = h_data(w);
x0 = r.x0-wr.x0+ud->x0;
y0 = r.y0-wr.y0+ud->y0;
}
ch = NewGW(f_create("rout.tmp",F_CREATE_NORMAL),0);
ly = cox*y0;
for( i = 0; i < ny; i++)
{
lx = cox*x0;
ly+= ldy;
iy = ly>>16;
liy = iy; liy = liy >16;
ij.i = ix; ij.j = iy; GetGWA(chol, (short*)&q1, 1, &ij);
ij.i = ix+1; ij.j = iy; GetGWA(chol, (short*)&q2, 1, &ij);
ij.i = ix; ij.j = iy+1; GetGWA(chol, (short*)&q3, 1, &ij);
ij.i = ix+1; ij.j = iy+1; GetGWA(chol, (short*)&q4, 1, &ij);
lix = ix; lix = lix > 16;
s1 = (s1*cy1)>>16;
s2 = ((long)q3*cx1 + (long)q4*cx) >> 16;
s2 = (s2*cy)>>16;
po[k] = s1+s2;
}
PutGWL(ch, (short*)po, nx, i);
DoneVisSave((int)((i+1)*100.0/ny+0.5));
}
h_mfree(po);
if (chol) DisposeGW(chol);
ud = h_data(w);
ud->ch = ch;
ud->r0 = (double)ud->r0*(double)new_nx/ud->iw;
ud->iw = nx; ud->ih = ny;
ud->x0 = (ud->iw-ud->w)/2; // Центровка
ud->y0 = (ud->ih-ud->h)/2; // изображения
OffScale();
if(reszo)
redraw_window(w);
else
{ if (ud->size_big)
SetRectShape(w,&CommonRect);
else SetRectShape(w,&ud->own_size);
redraw_cw(w);
}
}
void Do_Zoom(WinHandle w, int type)
{
Do_ResZo(w,0,0,0,type);
}
void Do_Resemple(WinHandle w, int nx, int ny, int type)
{
Do_ResZo(w,nx,ny,1,type);
}
/***********************************************************/
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;
typedef struct tagBITMAPFILEHEADER
{ WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER
{ DWORD biSize;
long biWidth;
long biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
void Fr_Save(WinHandle w, int select)
{ int i,k,x,y,x1,y1,nx,ny,format,ii,fin;
BYTE rr,gg,bb;
Rect r;
BYTE *filp,*pallet,*pal;
GCHandle ch;
Win2d *ud = h_data(w);
USGC *s;
BITMAPFILEHEADER *hfile;
BITMAPINFOHEADER *hinfo;
long hi;
Rect wr = WorkRect(w);
int L = wr.x1 - wr.x0 + 1;
int H = wr.y1 - wr.y0 + 1;
if(ud->r0r0>10)
hi = 100.0/(0.2*(double)ud->r0/(double)(ud->iw-1));
else hi = 0l;
if(!ud->img_name || !ud->ch) return;
// BringToFront(w); VisSetWin(w); // ?????
format = 0;
if(select == 0)
{r = Set_Rect(w); if(r.x0 < 0) return;
redraw_window(w);
}
else if(select == 1)
{r.x0 = wr.x0; r.y0 = wr.y0; r.x1 = wr.x1; r.y1 = wr.y1;}
else if(select == 2)
{
if((ud->iw > L) || (ud->ih > H))
{r.x0 = wr.x0; r.y0 = wr.y0; r.x1 = wr.x1; r.y1 = wr.y1;}
else
{ r.x0 = wr.x0-ud->x0; r.y0 = wr.y0-ud->y0;
r.x1 = r.x0 + ud->iw-1; r.y1 = r.y0 + ud->ih-1;
}
}
else return;
nx = r.x1-r.x0+1; ny = r.y1-r.y0+1;
if(nx%4) { nx-=nx%4; r.x0++; }
if(ny%2) { ny--; r.y0++; }
i = InputForm(mesman,&format);
if (i != 1) return;
s = h_malloc(4096); if(!s) return;
if(format == 2) // BMP save
{
hfile =h_malloc(sizeof(BITMAPFILEHEADER));
hinfo =h_malloc(sizeof(BITMAPINFOHEADER));
// Select name and open BMP file
filp = GetFileName(GetCfgItem("bmp"),H_CREATE);
if (*filp == 0) {h_mfree(s); h_mfree(hfile); h_mfree(hinfo); return;}
if ((fin = f_create(filp, F_CREATE_NORMAL)) == -1)
{h_mfree(s); h_mfree(hfile); h_mfree(hinfo); return;}
// Save BITMAPFILEHEADER
hfile->bfType = 0x4D42; // BM - символы идентифицирующие формат
hfile->bfSize = 0l; // размер файла в long-ах
hfile->bfReserved1 = 0;
hfile->bfReserved2 = 0;
hfile->bfOffBits = sizeof(BITMAPFILEHEADER)+
sizeof(BITMAPINFOHEADER)+1024L;
// смещение начала собственно битового массива в байтах
f_write(fin, hfile, sizeof(BITMAPFILEHEADER));
// Save BITMAPIMFOHEADER
hinfo->biSize = (long)sizeof(BITMAPINFOHEADER);
hinfo->biWidth = (long)nx;
// кратно long-ам (если надо, добавить нули)
hinfo->biHeight = (long)ny;
hinfo->biPlanes = 1;
hinfo->biBitCount = 8;
hinfo->biCompression = 0L;
hinfo->biSizeImage = 0L;
hinfo->biXPelsPerMeter = hi;
hinfo->biYPelsPerMeter = hi;
hinfo->biClrUsed = 0L; // к-во цветов в таблице цветности
hinfo->biClrImportant = 0L; // обязательное к-во цветов
f_write(fin, hinfo, sizeof(BITMAPINFOHEADER));
// Save PALLETE
pallet = h_malloc(1024); pal = pallet;
for(ii=0; ii=r.y0; y--)
{ for(x=r.x0,k=0; xih = ny;
ud->ps = 1;
ud->frag = 1;
ud->objtype = 0;
// GW file name definition
strcpy(name,GetCfgItem("image"));
pc = name+strlen(name); while (pc > name && pc[-1] != '\\') pc--;
sprintf(pc,"w%d.tmp",ud->temp_name);
if (ud->ch) { DisposeGW(ud->ch); f_delete(name); }
ud->ch = NewGW(f_create(name,F_CREATE_NORMAL),0);
chl = ud->ch;
p = h_malloc(nx); pi = (int*)h_malloc(nx*2);
for( k = 0; k < ny; k++)
{f_read(fin, p, nx);
for (i = 0; i < nx; i++) pi[i] = (int)p[i]+2048;
PutGWL(chl,(short*)pi,nx,k); // Write to GW file
}
h_mfree(p); h_mfree(pi);
VisSetWin(w);
strcpy(s,filp);
ud = h_data(w);
if(!ud->img_old && ud->img_name)
{ int len = strlen(h_data(ud->img_name));
ud->img_old = h_alloc(len+1);
ud = h_data(w);
strcpy(h_data(ud->img_old),h_data(ud->img_name));
}
if(ud->img_name)
{ if (ud->tempimg) f_delete(h_data(ud->img_name)); h_free(ud->img_name);
}
else h_free(ud->win.title);
ud = h_data(w);
ud->img_name = h_alloc(strlen(s)+1);
ud = h_data(w);
strcpy(h_data(ud->img_name),s);
ud->tempimg = 0;
ud->win.title = ud->img_name;
PaintTitle(w);
ud->x0 = (ud->iw-ud->w)/2; // Центровка
ud->y0 = (ud->ih-ud->h)/2; // изображения
redraw_window(w);
}
Приложение 3 Описание программы обработки изображений C
0 комментариев