Упражнения

Продолжим работу со свёрткой изображений.

  1. Добавьте блоки памяти в режиме "только чтение", в которых будут храниться веса ядер. Предусмотрите возможность использовать одни и те же веса для инициализации нескольких ядер. Создайте примеры файлов для инициализации: веса для размытия по Гауссу (5х5) и для выделения границ (5х5).

  2. Сконфигурируйте буфер для хранения одного изображения. Придётся предположить, что работаем с изображениями ограниченного сверху размера. Скажем, 640 на 480. Используйте его для сохранения результатов свёртки.

  3. Сконфигурируйте буфер для хранения входной строки. Используйте нужное количество буферов для получения входных данных для свёртки.

Отдельно, в качестве задачи со звёздочкой предлагается запустить свёртку на реальной плате. Более того, предлагается реализовать выделение границ объекта в реальном времени. Задача сложная, поэтому предполагается решать её поэтапно.

  1. Изучите примеры rgb_screen (проще, использует дисплей на плате, только для Mega 138k) или hdmi_colorbar_1080 (сложнее, используется HDMI выход) из репозитория с примерами для Mega 138k.

  2. Модифицируйте их для вывода изображения по вашему выбору.

  3. Подключите камеру OV7670 и настройте вывод на дисплей. Вам может помочь данная статья и примеры кода: пример раз и пример два.

  4. Реализуйте модуль преобразования входного изображения в чёрно-белое (градации серого, 8 бит).

  5. Примените один модуль свёртки (скажем, обнаружение границ) для обработки изображения с камеры. Для этого придётся реализовать модуль, управляющий буферами строк.

  6. Соберите последовательность свёрток.

    1. Два последовательных размытия (с одинаковыми весами).

    2. Обнаружение границ.

    3. Обратите внимание на то, что размер изображения на выходе может не совпадать с размером изображения на входе.

  7. Сделайте последовательность свёрток конфигурируемой.

    1. Каждую из свёрток можно независимо включить или отключить.

    2. Для управления можно использовать DIP переключатели.

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

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