exponenta event banner

Обнаружение краев и наложение изображения с поврежденным кадром

В этом примере показано, как ввести нарушения для тестирования конструкции с несовершенным вводом видео.

При разработке алгоритмов обработки видео важное значение имеет качество входящего видеопотока. Реальные видеосистемы, такие как камеры видеонаблюдения или видеокамеры, производят несовершенные сигналы. Поток может содержать ошибки, такие как активные линии неравной длины, сбои или неполные кадры. При моделировании источник потокового видео обычно производит идеальные сигналы. При использовании блока «От кадра до пикселей» из Toolbox™ Vision HDL все линии имеют одинаковый размер, и все кадры являются полными. Алгоритм видео, который хорошо моделируется в этих условиях, не гарантирует его эффективность на FPGA, который подключается к реальному источнику видео. Для оценки надежности алгоритма видеоизображения под неидеальными реальными видеосигналами целесообразно вводить нарушения в поток пикселей.

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

Перед тем как перейти к этому примеру, рекомендуется перейти к примеру «Обнаружение краев» и «Наложение изображения».

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

Структура этого примера показана ниже, которая близко следует структуре блока обработки потока пикселей модели в Edge Detection и Image Overlay.

Подсистема Edge Detection реализует алгоритм Собеля для выделения края изображения. Подсистема Align Video используется для синхронизации отложенных выходных данных EdgeDetector с исходным кадром. Функция «Наложение изображения» взвешивает и суммирует два изображения, выровненных по времени.

Этот материал организован следующим образом. Сначала мы разработали подсистему Align Video, которая хорошо работает с идеальными видеосигналами. Затем мы используем подсистему ухудшения кадра, чтобы замаскировать ведущие управляющие сигналы кадра, чтобы походить на сценарий, где алгоритм начинается в середине кадра. Мы увидим, что такое ухудшение делает Align Video неэффективным. Наконец, для решения этой проблемы разрабатывается пересмотренная версия Align Video.

Align Video реализуется как вариационная подсистема. Можно использовать переменную VERSION в рабочей области для выбора одной из двух версий, которую требуется смоделировать.

Примечание.Начиная с R2017a блок Pixel Stream Aligner заменяет подсистему Align Video, показанную здесь. Этот новый блок значительно упрощает установку размера буфера строк и количества строк и генерирует код HDL. В новых конструкциях используйте блок «Выравнивание пиксельного потока», а не подсистему «Выравнивание видео». Пример использования блока см. в разделах Обнаружение кромок и Наложение изображений.

Первая версия видео выравнивания

На следующей схеме показана структура первой версии подсистемы Align Video.

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

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

Тест выравнивания видео с использованием подсистемы ослабления кадров

Чтобы проиллюстрировать работу подсистемы ослабления кадров, рассмотрим кадр размером 2 на 3 пиксела. На рисунке ниже этот кадр показан в пунктирном прямоугольнике с окружающими его неактивными пикселями. Неактивные пикселы включают заднее крыльцо шириной 1 пиксел, переднее крыльцо шириной 2 пикселя, 1 строку перед первой активной строкой и 1 строку после последней активной строки. Активные и неактивные пикселы помечены значениями оттенков серого.

Если блок Frame To Pixels принимает этот кадр 2 на 3 в качестве входного, и его настройки соответствуют длинам участков, показанным выше, то временная диаграмма выходного сигнала Frame To Pixels показана в верхней половине следующей диаграммы.

Подсистема ослабления кадров пропускает настраиваемое количество допустимых пикселов в начале моделирования. Например, если бы он был сконфигурирован для пропуска 4 пикселей примерного кадра, результат был бы таким же, как в нижней половине временной диаграммы. Мы можем видеть, что, пропустив 4 действительных пикселя, три действительных пикселя на второй строке (т.е. со значениями интенсивности 30, 60 и 90) и первый действительный пиксель на третьей строке маскируются вместе с соответствующими сигналами управления. Кроме того, подсистема ухудшения цикловой синхронизации вводит две задержки тактового цикла. Если ввести 0 пикселов для пропуска, это просто задержит как пиксельные, так и Ctrl выходы из Frame To Pixels на два тактовых цикла.

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

Теперь дважды щелкните «Ухудшение кадра» и введите любое положительное целое число, например 100, в поле «Количество допустимых пикселов для пропуска».

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

Видно, что краевой вывод находится в нужном месте, но исходное изображение смещено. Эти выходные данные ясно показывают, что наша первая версия Align Video не устойчива к потоку пикселей, который начинается в середине кадра.

Такое поведение объясняется двумя причинами. Во-первых, блок EdgeDetector начинает обработку только после просмотра действительного начала кадра, указанного hStart, vStart, и действительного достижения высокого значения при одном и том же такте. Блок ничего не выводит для частичного кадра. Во-вторых, FIFO внутри подсистемы Align Video начинает буферизацию кадра, как только действительный сигнал является истинным, независимо от того, является ли он частичным кадром или полным кадром. Поэтому в начале второго кадра FIFO был загрязнен пикселями предыдущего частичного кадра.

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

На основе информации, полученной из предыдущего раздела, ниже показана пересмотренная версия Align Video.

Цель состоит только в том, чтобы протолкнуть пиксели полных кадров в FIFO. Если начальные кадры не завершены, их допустимые пикселы игнорируются.

Для этого используется включенный регистр, называемый блокировкой (выделен на схеме выше). Его начальное значение является логическим 0. Команда ANDing this 0 с отложенной версией valid всегда дает логический 0. Это предотвращает вставку любых допустимых пикселей в FIFO. Блокировка переключает свой выходной сигнал с логического 0 на 1 только тогда, когда hStart, vStart и действительные сигналы утверждают высокий, индикатор начала нового кадра. После переключения блокировки на 1 «нажимной» вход FIFO теперь следует задержанной версии действительного сигнала. Поэтому действительные пиксели нового кадра будут буферизированы в FIFO.

Для тестирования этой пересмотренной реализации введите следующую команду в подсказке MATLAB.

   VERSION=2;

Повторно запустите моделирование. Теперь краевой вывод и исходное изображение идеально выровнены.