Рейтинг@Mail.ru

Наши друзья и партнеры

UnixForum
купить дешевый 
компьютер родом из Dhgate.com




Библиотека сайта rus-linux.net

ITK

Глава 9 из книги "Архитектура приложений с открытым исходным кодом", том 2.

Оригинал: ITK
Авторы: Luis Ibanez, Brad King
Дата публикации: 27 Апреля 2012 г.
Перевод: А.Панин
Дата перевода: 29 Июля 2013 г.

9.1. Что такое ITK?

ITK, the Insight Toolkit является библиотекой для анализа изображений, которая была разработана по инициативе и при практически полной финансовой поддержке Национальной библиотеки медицины США. ITK может рассматриваться в качестве полезной энциклопедии алгоритмов для анализа изображений, в частности алгоритмов обработки изображений с помощью фильтров, сегментации и геометрической коррекции изображений. Библиотека была разработана консорциумом, включающим университеты, коммерческие компании и индивидуальных разработчиков со всего мира. Разработка ITK началась в 1999 году и после недавнего десятилетия код библиотеки был подвергнут рефакторингу, направленному на удаление устаревшего кода и внесение улучшений, позволяющих использовать библиотеку в течение следующих десяти лет.

9.2. Возможности архитектуры

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

Характер зверя

Если вы не понимаете характер зверей, знания в области их анатомии вам не очень помогут.
- Dee Hock, One from Many: Visa and the Rise of Chaordic Organization

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

Конвейер обработки изображения
Рисунок 9.1: Конвейер обработки изображения

Для иллюстрации этого утверждения на Рисунке 9.2 показан снимок головного мозга, полученный в ходе магнитно-томографического резонансного исследования (magnetic resonance image (MRI)) и результат его обработки с помощью медианного фильтра для снижения уровня шума, а также результат применения фильтра выделения контуров для идентификации границ анатомических структур.

Снимок головного мозга в ходе МРТ Результат использования медианного фильтра Результат использования фильтра выделения контуров
Рисунок 9.2: Снимок головного мозга в ходе МРТ, результат использования медианного фильтра, результат использования фильтра выделения контуров

Для решения каждой из этих задач сообщество разработчиков алгоритмов анализа изображений реализовало множество алгоритмов и продолжает вести работу над новыми. Вы можете спросить: "Почему они продолжают делать это?" и ответ на ваш вопрос будет заключаться в том, что в процессе обработки изображений используется комбинация научных знаний, инженерных расчетов, искусства и навыков "подготовки" материала. Утверждение о том, что существует комбинация алгоритмов, которая позволяет "корректно" решить задачу анализа изображения настолько же ошибочно, насколько и утверждение о том, что существует "правильный" тип шоколадного десерта для обеда. Вместо доведения алгоритмов до совершенства сообщество разработчиков пытается создать набор разнообразных инструментов, в случае использования которого вы можете быть уверены в том, что при решении задачи по анализу изображения, набор параметров анализа не окажется недостаточным. Конечно же, такие возможности имеют свою цену. Ценой в данном случае являются сложности выбора из множества различных инструментов тех, которые необходимы, причем инструменты могут использоваться совместно в различных комбинациях для получения похожих результатов.

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

Существует несколько причин, по которым тулкит ITK был спроектирован и реализован в виде обширной коллекции частично независимых, но связанных инструментов, являющихся фильтрами изображений (image filters), многие из которых могут использоваться для решения аналогичных задач. В этом контексте присутствует некоторый уровень "избыточности" - например, предоставление трех различных реализаций фильтра Гаусса рассматривается не как проблема, а как полезная возможность, так как различные реализации могут быть взаимозаменяемыми для работы в различных условиях и повышения эффективности в зависимости от размера изображения, количества процессоров и размера ядра метода Гаусса, который может быть задан используемым приложением обработки изображений.

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

Вооружившись знаниями, полученными в ходе краткого обзора ежедневных дел специалиста по анализу изображений из сообщества разработчиков ITK, мы можем перейти к более подробному рассмотрению наиболее важных особенностей архитектуры:
  • Модульность
  • Конвейер обработки данных
  • Фабрики
  • Фабрики ввода/вывода
  • Поточная передача данных
  • Повторное использование кода
  • Возможности сопровождения кода

Продолжение статьи: Модульность

Если вам понравилась статья, поделитесь ею с друзьями: