In [1]:
import matplotlib.pyplot as plt
import numpy as np
from scipy.misc import imread

In [2]:
plt.style.use('ggplot')
%matplotlib inline
plt.rcParams['figure.figsize'] = (20,10) # set default size of plots

Загрузим изображение


In [3]:
image = imread("Путь до вашей картинки", mode='RGB')

In [4]:
plt.imshow(image)


Out[4]:
<matplotlib.image.AxesImage at 0x7f98dd5f7dd8>

Свёртки

Реализуйте функцию применяющую ядро kernel к изображению input_image. Для простоты, не будем делать padding, зафиксируем stride равным единице, а ядро свёртки будем считать квадратной матрицей (не трёхмерным тензором!) и приминять к каждому каналу независимо.


In [5]:
def conv2d(input_image, kernel):
    h, w, d = input_image.shape
    k_h, k_w = kernel.shape
   
    # Впишите свой код на месте заглушки
    result = input_image
            
    return result

Опишите ядро свёртки, выполняющее тождественное преобразование


In [ ]:
identity_kernel = np.zeros((3,3))

In [ ]:
same_image = conv2d(image, identity_kernel)

In [ ]:
plt.imshow(same_image.astype(np.uint8))

Опишите ядро свёртки, выполняющее размытие


In [7]:
blur_kernel = np.zeros((3,3))

In [ ]:
blurry_image =  conv2d(image, blur_kernel)

In [ ]:
plt.imshow(blurry_image.astype(np.uint8))

А теперь подсветите границы объектов на изображении


In [5]:
edge_kernel = np.zeros((3,3))

In [ ]:
edge_image =  conv2d(image, edge_kernel)

In [ ]:
plt.imshow(edge_image.astype(np.uint8))

Кажется, что-то пошло не так... Возможно, необходимо сделать что-то ещё?