Обнаружение ребер и наложение изображений

В этом примере показано, как обнаружить и подсветить ребра объекта в видеопотоке. Поведение блока Sobel Edge Detector в пиксельном потоке, выравнивание видеопотока и наложение проверяется путем сравнения результатов с тем же алгоритмом, вычисленным блоками полного кадра из Computer Vision Toolbox™.

Эта модель примера предоставляет аппаратно совместимый алгоритм. Можно реализовать этот алгоритм на плате с помощью Xilinx™ Zynq™ исходного проекта. Смотрите Разработку Алгоритмов Vision для Оборудования на основе Zynq (Пакет поддержки Vision HDL Toolbox для Оборудования на основе Xilinx Zynq).

Структура примера

Система EdgeDetectionAndOverlayHDL.slx показана ниже.

Различие цвета линий, питающих Full-Frame Behavioral Model и Pixel-Stream HDL Подсистем модели, указывает на изменение скорости изображения в потоковой ветви модели. Этот переход скорости происходит потому, что поток пикселей посылается за то же время, что и полные видеокадры, и поэтому он передается с более высокой скоростью.

Полнокадровая поведенческая модель

Следующая схема показывает структуру подсистемы Full-Frame Behavioral Model, которая использует основанный на кадрах блок Edge Detection.

Учитывая, что основанный на кадрах блок Edge Detection не вводит задержку, наложение изображения выполняется путем взвешивания исходного изображения и выходного изображения Edge Detection и добавления их вместе простым способом.

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

Это хорошая практика, чтобы разработать поведенческую систему, используя блоки, которые обрабатывают полные системы координат изображения, подсистему Full-Frame Behavioral Model в этом примере, прежде чем переходить к работе над проектом нацеливания FPGA. Такая поведенческая модель помогает проверить проект обработки видео. Позже он может служить ссылкой для проверки реализации алгоритма, нацеленного на FPGA. В частности, блок PSNR (отношение пикового сигнала к шуму) на верхнем уровне модели сравнивает результаты обработки полного кадра с результатами обработки пиксельного потока.

Система координат к пикселям: Создание пиксельного потока

Задача Frame To Pixels состоит в том, чтобы преобразовать полную систему координат в поток пикселей. Чтобы симулировать эффект горизонтальных и вертикальных периодов гашения, обнаруженных в реальных аппаратных видеосистемах, активное изображение дополнено данными без неизображений. Дополнительные сведения о протоколе потокового пикселя см. в разделе Интерфейс потокового пикселя (Vision HDL Toolbox). Блок Frame To Pixels сконфигурирован как показано:

Поле Number of components устанавливается равным 1 для входа полутонового изображения, а поле Video format равняется 240p, чтобы соответствовать полю источника видео.

В этом примере область Active Video соответствует матрице 240x320 темного изображения из вышестоящего блока Corruption. Шесть других параметров, а именно Total pixels на линию, Total video lines, Starting active line, Ending active line, Front depch и Back devch задают, сколько данных без неизображений будет увеличено на четырех сторонах Активного видео. Для получения дополнительной информации смотрите блок Системы координат To Pixels (Vision HDL Toolbox) страницы с описанием.

Обратите внимание, что шаг расчета источника видео определяется продуктом Total pixels на линию и Total video line.

Ребро Pixel-Stream и наложение изображений

Подсистема Pixel-Stream HDL Model показана на схеме ниже. Можно сгенерировать HDL-код из этой подсистемы.

Из-за особенностей обработки пиксельного потока, в отличие от блока Edge Detection в Full-Frame Behavioral Model, блок Edge Detector из Vision HDL Toolbox™ введёт задержку. Задержка мешает нам непосредственно взвешивать и добавлять два изображения, чтобы получить наложенное изображение. Чтобы решить эту проблему, блок Pixel Stream Aligner используется для синхронизации двух потоков пикселей перед суммой.

Чтобы правильно использовать этот блок, refPixel и refCtrl должны быть подключены к пиксельной шине и шине управления, которые связаны с задержанным потоком пикселей. В нашем примере из-за задержки, введенной Детектором Ребра, поток пикселей, выходящий из Детектора Ребра, задерживается относительно подачи в него. Поэтому вышестоящий источник refPixel и refCtrl являются выходами ребро и ctrl Edge Detector.

Пиксели в кадр: преобразование пиксельного потока назад в полную систему координат

Будучи компаньоном Frame To Pixels, который преобразует полную систему координат изображения в поток пикселей, блок Pixels To Frame, реверсивно, преобразует поток пикселей обратно в полную систему координат, используя сигналы синхронизации. Поскольку выход блока Pixels To Frame является 2-D матрицей полного изображения, нет необходимости дополнительно переносить шину, содержащую пять сигналов синхронизации.

Поле «Количество компонентов» и поля «Формат видеообеих систем координат в пиксели» и «Пиксели в кадр» заданы равными 1 и 240p, соответственно, чтобы соответствовать формату источника видео.

Проверка проекта обработки пиксельных потоков

При построении потокового фрагмента проекта блок PSNR постоянно проверяет результаты на соответствие исходному проекту полного кадра. Блок Delay на верхнем уровне модели выравнивает матрицы 2-D для справедливого сравнения. В ходе симуляции блок PSNR должен давать inf выхода, указывая, что выходное изображение из Модели Full-Frame Behavioral совпадает с изображением, сгенерированным из потока, обрабатывающего HDL- Модели Pixel-Stream.

Исследование примера

Пример позволяет вам экспериментировать с различными пороговыми и альфа значениями, чтобы изучить их эффект на качество наложенных изображений. В частности, две переменные рабочей области$thresholdValue$ и$alpha$ с начальными значениями 7 и 0,8, соответственно, создаются при открытии модели. Можно изменить их значения с помощью командной строки MATLAB следующим образом:

thresholdValue=8
alpha=0.5

Обновленный$thresholdValue$ будет распространен на поле Порог блока Edge Detection внутри Full-Frame Behavioral Model и блок Edge Detector внутри Pixel-Stream HDL Model/Edge Detection.$alpha$ Значение будет распространено на блок Gain1 в Full-Frame Behavioral Model и Pixel-Stream HDL Model/Image Overlay, а значение$1-alpha$ переходит к блокам Gain2. Закрытие модели очищает обе переменные из вашей рабочей области.

В этом примере допустимая область значений$thresholdValue$ находится между 0 и 256 включительно. Установка$thresholdValue$ равной или больше 257 инициирует переполнение параметра сообщения для 'threshold'. Чем выше вы устанавливаете, $thresholdValue$тем меньше количества ребер находит пример в видео.

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

   overlaid image = alpha*source image + (1-alpha)*edge image.

Поэтому, когда, $alpha=0$накладываемое изображение является выходом обнаружения края, и когда$alpha=1$ оно становится исходным изображением.

Сгенерируйте HDL-код и проверьте его поведение

Чтобы проверить и сгенерировать HDL-код, на который ссылаются в этом примере, необходимо иметь лицензию HDL- Coder™.

Чтобы сгенерировать HDL-код, используйте следующую команду:

makehdl('EdgeDetectionAndOverlayHDL/Pixel-Stream HDL Model');

Чтобы сгенерировать испытательный стенд, используйте следующую команду:

makehdltb('EdgeDetectionAndOverlayHDL/Pixel-Stream HDL Model');
Для просмотра документации необходимо авторизоваться на сайте