Упражнения
Данные упражнения носят подготовительный характер. Думается, что будет проще, если сперва разобраться со свёртками с использованием более привычного языка программирования.
В упражнениях используется Python так как он будет использоваться для автоматизации тестирования. В качестве библиотеки для работы с изображениями можно взять Pillow. В частности, чтобы проверить свою реализацию, можно создать собственные фильтры.
-
Свёртка сигнала
-
Реализуйте одномерную свёртку как функцию, принимающую массив данных и ядро, возвращающую "свёрнутый" массив данных. Для тестов можно использовать соответствующую функцию из scipy.
Обратите внимание на то, как обрабатываются значения на краях входных данных.
-
-
Свёртка изображений
-
Реализуйте функцию загрузки изображения в массив байт. Предполагаем, что далее работаем с изображением в градациях серого (ещё и без альфа-канала). Реализуйте необходимую конвертацию.
-
Реализуйте функцию сохранения изображения (принимающую двумерный массив байт).
-
Реализуйте функцию свёртки, принимающую изображение (как двумерный массив байт) и фильтр (массив float). Выразите внутреннюю логику через одномерную свёртку, реализованную в предыдущем задании. Для тестирования можете использовать соответствующую функцию из
Pillow
.Обратите внимание на то, как обрабатываются пиксели на краях изображения. Обратите внимание на что фильтр можно представлять разными способами.
-
-
Поизучайте работу конкретных ядер на примерах (размытие по Гауссу, выделение границ).