Упражнения

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

В упражнениях используется Python так как он будет использоваться для автоматизации тестирования. В качестве библиотеки для работы с изображениями можно взять Pillow. В частности, чтобы проверить свою реализацию, можно создать собственные фильтры.

  1. Свёртка сигнала

    • Реализуйте одномерную свёртку как функцию, принимающую массив данных и ядро, возвращающую "свёрнутый" массив данных. Для тестов можно использовать соответствующую функцию из scipy.

      Обратите внимание на то, как обрабатываются значения на краях входных данных.
  2. Свёртка изображений

    • Реализуйте функцию загрузки изображения в массив байт. Предполагаем, что далее работаем с изображением в градациях серого (ещё и без альфа-канала). Реализуйте необходимую конвертацию.

    • Реализуйте функцию сохранения изображения (принимающую двумерный массив байт).

    • Реализуйте функцию свёртки, принимающую изображение (как двумерный массив байт) и фильтр (массив float). Выразите внутреннюю логику через одномерную свёртку, реализованную в предыдущем задании. Для тестирования можете использовать соответствующую функцию из Pillow.

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