Реализация блочного построения алгоритмов обработки изображения
В разработанной системе обработки изображений использован принцип блочного построения сложных алгоритмов обработки из набора более простых операций над изображениями. Набор операций представляет собой библиотеку алгоритмов обработки изображения, которая может непрерывно пополняться.
Сложные алгоритмы обработки создаются путем выбора необходимых простых операций из библиотеки алгоритмов и соединения их необходимым образом в графовидную структуру, называемую обрабатывающим графом. Узлы этого графа являются операциями над изображением, связи этого графа определяют движение исходных данных и результатов вычислений между операциями и порядок выполнения операций обработки. Такой подход к реализации алгоритмов делает систему универсальной, сокращает время реализации сложных ал-горитмов и позволяет оптимально управлять вычислительными ресурсами, что ведет к повышению эффективности.
Рис. 7.2. Обрабатывающий граф для определения контуров объектов в изображении
Каждая операция над изображением выполняется в виде программного модуля, называемого обрабатывающим фильтром. Обрабатывающий фильтр получает исходные данные и возвращает результаты обработки при помощи входных и выходных каналов данных (data sockets). Количество входных и выходных каналов фильтра не ограничено и зависит от выполняемой им операции. Обрабатывающий граф создается путем соединения выходных каналов одних обрабатывающих фильтров с входными каналами других фильтров. Если фильтр не имеет входных каналов, то такой фильтр является фильтром- источником, который поставляет информацию для обработки ее графом. Обрабатывающий граф должен иметь как минимум один фильтр-источник, например, фильтр захвата видеокадров или фильтр ввода дополнительных данных.
Пример обрабатывающего графа, реализующего алгоритм Собеля для определения контуров объектов в изображении и углов нормалей к этим контурам, приведен нарис.
7.2.Управление оперативной памятью и данными реализовано так, что сами фильтры ответственны только за обработку данных и их инициализацию. Функции хранения и передачи данных по обрабатывающему графу возложены на входные и выходные каналы. Выходные каналы хранят обработанные фильтром данные (изображение) и могут поддерживать соединения с присоединенными входными каналами по типу «один-ко-многим». Это дает возможность использовать результаты одной операции сразу несколькими другими последующими операциями, как показано на рис. 7.2. Входные каналы хранят ссылки на исходные данные в тех выходных каналах, к которым они присоединены. Входные каналы ответственны за создание копий данных в случае соединения по типу «один-ко-многим» для того, чтобы избежать изменения исходных данных каким-либо из фильтров. Указанные функции выполняются соединенными каналами автоматически, что значительно облегчает разработку самих фильтров, позволяя разработчику сконцентрироваться только на алгоритме конкретной операции, а не на управлении данными.
Для повышения производительности и избежания излишнего дублирования данных обрабатывающие фильтры могут размещать результаты обработки в той же области памяти, где располагались исходные данные. Фильтр, реализованный таким образом, обрабатывает изображение «на месте» — полученное фильтром изображение замещает исходное изображение в памяти. Это позволяет достичь существенного прироста в производительности, так как изображения содержат значительный объем данных, копирование которого требует дополнительных вычислительных ресурсов. Если фильтр записывает результаты в область исходных данных, то он обязан известить об этом обрабатывающий граф путем установки соответствующего ключа у входного канала с исходными данными. Это позволяет системе автоматически создавать копии модифицируемых исходных данных при наличии подключений по типу «один-ко-многим».
Для иллюстрации блочного построения сложных алгоритмов обработки изображения рассмотрим этапы построения и функционирования обрабатывающего графа, состоящего из набора фильтров.
На этапе построения графа создаются обрабатывающие фильтры, необходимые для реализации алгоритма. Исходя из типа обрабатываемого видео (аналоговое видео, цифровое видео, медиа-файл) создается фильтр-источник, который будет захватывать видеоизображения дляобработки их графом. Выходные и входные каналы фильтров соединяются в требуемом алгоритмом порядке.
После построения обрабатывающий граф проходит этап инициализации. При инициализации графа, исходя из схемы соединения фильтров в нем, автоматически определяется порядок следования операций над изображениями и данными. При наличии соединений «один-ко-многим» автоматически определяются входные каналы, которым необходимо создавать копии исходных данных, если в соединении имеются фильтры, замещающие исходные данные результатами обработки. Каждый обрабатывающий фильтр в порядке своего следования в графе, начиная с фильтров-источников, инициализирует свои внутренние переменные, а также выделяет память для результатов своей операции. Это позволяет остальным фильтрам подстроиться под размер исходного изображения, выдаваемого фильтром захвата в начале графа.
После инициализации запускается собственно цикл обработки изображения. В начале цикла вызываются фильтры-источники, вводящие в обрабатывающий граф исходное изображение и другие исходные данные. Далее, в установленном порядке вызываются входящие в граф обрабатывающие фильтры.
7.1.3.