Этот пример показов, как ввести нарушения в порядок для тестирования проекта с несовершенным входом видео.
При разработке алгоритмов обработки видео важной проблемой является качество входящего видеопотока. Реальные видеосистемы, такие как камеры наблюдения или видеокамеры, выдают несовершенные сигналы. Поток может содержать ошибки, такие как активные линии неравной длины, сбои или неполные системы координат. В симуляции источник потокового видео обычно выдает идеальные сигналы. Когда вы используете блок Frame To Pixels из Vision HDL Toolbox™, все линии имеют равный размер, и все системы координаты полны. Алгоритм видео, который хорошо симулирует в этих условиях, не гарантирует его эффективность на FPGA, которая соединяется с реальным источником видео. Чтобы оценить робастность алгоритма видео при неидеальных видеосигналах реального мира, практично вводить нарушения в поток пикселей.
Этот пример расширяет пример Edge Detection и Image Overlay путем вручную маскирования ведущих сигналов управления системы координат, чтобы напоминать сценарий, где алгоритм начинается в середине системы координат. Такие сценарии тестирования необходимы, чтобы доказать робастность потоковых проектов видео.
Полезно перейти к примеру Edge Detection и Image Overlay, прежде чем переходить к этому примеру.
Структура этого примера показана ниже, которая тесно соответствует структуре модуля обработки пиксельного потока модели в Edge Detection и Image Overlay.
Подсистема Edge Detection реализует алгоритм Собеля, чтобы подсветить ребро изображения. Подсистема Align Video используется для синхронизации задержанного выхода EdgeDetector с исходной системой координат. Image Overlay взвешивает и суммирует два выровненных по времени изображения.
Этот материал организован следующим образом. Сначала мы разрабатываем подсистему Align Video, которая хорошо работает с идеальными видеосигналами. Затем мы используем Подсистему Ухудшения системы координат, чтобы замаскировать ведущие сигналы управления системы координат, чтобы напоминать сценарий, где алгоритм начинается в середине системы координат. Мы увидим, что такое ухудшение делает Align Video неэффективным. Наконец, для решения этой проблемы разработана пересмотренная версия Align Video.
Align Video реализован как вариант подсистемы. Можно использовать переменную VERSION в рабочей области, чтобы выбрать одну из двух версий для моделирования.
Примечание.Начиная с R2017a, блок Pixel Stream Aligner заменяет подсистему Align Video, показанную здесь. Этот новый блок значительно облегчает настройку линии buffer size и количества линий и генерирует HDL-код. В новых проектах используйте блок Pixel Stream Aligner, а не подсистему Align Video. Пример использования блока см. в разделах Обнаружение ребрах и Наложение изображений.
Следующая схема показывает структуру первой версии подсистемы Align Video.
Align Video использует сигналы управления, чтобы обнаружить активную область системы координат. Дополнительные сведения о протоколе потокового пикселя см. в разделе Интерфейс потокового пикселя.
Основная идея выравнивания двух потоков пикселей состоит в том, чтобы буферизировать действительные пиксели, которые поступают ранее в FIFO, основываясь только на действительных сигналах, и соответствующим образом выводить отдельный пиксель из этого FIFO на основе действительного сигнала задержанного потока пикселей.
Чтобы проиллюстрировать, как работает подсистема Системы координат Devairment, рассмотрим систему координат 2 на 3 пикселя. На рисунке ниже эта система координат показана в штриховом прямоугольнике с окружающими его неактивными пикселями. Неактивные пиксели включают заднее крыльцо шириной 1 пиксель, переднее крыльцо шириной 2 пикселя, 1 строку перед первой активной линией и 1 строку после последней активной строки. Как активные, так и неактивные пиксели помечаются своими значениями в полутоновом цвете.
Если блок Frame To Pixels принимает эту систему координат 2 на 3 как вход, и его настройки соответствуют длинам крыльца, показанным выше, то временная схема выхода системы координат для пикселей проиллюстрирована в верхней половине следующей схемы.
Подсистема ухудшения системы координат пропускает конфигурируемое количество допустимых пикселей в начале симуляции. Например, если бы было сконфигурировано, чтобы пропустить 4 пикселя примера системы координат, результат был бы таким же, как в нижней половине временной схемы. Мы видим, что, пропустив 4 действительных пикселя, три действительных пикселя во второй линии (то есть со значениями интенсивности 30, 60 и 90) и первый действительный пиксель в третьей линии маскируются, вместе с их связанными сигналами управления. Кроме того, подсистема Системы координат Devairment вводит две задержки тактового цикла. Если мы вводим 0 пикселей, чтобы пропустить, это просто задерживает и пиксельные, и ctrl выходы из Frame To Pixels на два такта.
Дважды кликните подсистему Frame Devairment и убедитесь, что значение 'Number of valid pixels to skip' установлено на 0. Как упоминалось ранее, эта настройка не ухудшает систему координат, все, что это делает, - задерживать выходные выходы как пикселя, так и ctrl из системы координат В Пиксели на два тактовых цикла. Ниже показан выход из выхода видео, которая ожидается.
Теперь еще раз дважды кликните Frame Imdairment и введите любое положительное целое число, скажем, 100, в поле 'Number of valid pixels to skip'.
Перезапустите модель, и получившееся видео выхода показано ниже.
Мы видим, что выход ребра находится в нужную область кадра, но оригинальные изображения сдвинут. Этот выход ясно предполагает, что наша первая версия Align Video не является устойчивой к потоку пикселей, который начинается в середине системы координат.
Две причины объясняют такое поведение. Во-первых, блок EdgeDetector начинает обработку только после просмотра допустимого запуска системы координат, обозначенного hStart, vStart и действительного перехода на высокий уровень в том же такте. Блок ничего не выводит для частичной системы координат. Во-вторых, FIFO, внутри подсистемы Align Video, начинает буферизировать систему координат, когда действительный сигнал верен, является ли это частичной системой координат или полной системой координат. Поэтому в начале второй системы координат FIFO был загрязнен пикселями предыдущей частичной системы координат.
На основе информации, полученной из предыдущего раздела, ниже показана пересмотренная версия Align Video.
Цель состоит только в том, чтобы протолкнуть пиксели полных систем координат в FIFO. Если начальные системы координат не завершены, их допустимые пиксели игнорируются.
Для этого используется включенный регистр, называемый lock (подсвеченный на схеме выше). Его начальное значение является логическим 0. ANDing этот 0 с задержанной версии допустимых всегда дает логический 0. Это препятствует перемещению допустимых пикселей в FIFO. Блокировка переключает свой выход с логического 0 на 1 только, когда hStart, vStart и действительные сигналы утверждают высокий, индикатор начала новой системы координат. После переключения блокировки на 1, вход 'push' FIFO теперь следует задержанной версии действительного сигнала. Так что действительные пиксели новой системы координат будут буферизованы в FIFO.
Чтобы протестировать эту пересмотренную реализацию, введите следующую команду в подсказке MATLAB.
VERSION=2;
Перезапустите симуляцию. Теперь ребра выхода и оригинального изображения идеально выровнены.