Если честно, я понятия не имею, что такое ядро Гаусса.
Но ваша проблема в том, что вы обращаетесь к матрице ядра вне диапазона:
kernel[x+2][y+2] = ...
Это назначение только допустимо, если x+2 < k_size
(так как вы объявили, что ваша матрица ядра имеет размер k_size), но для l oop позволяет x и y перерасти в k_size.
Минимальный пример, который будет генерировать такой же вид ошибки сегментации будет следующим:
int vector[3];
vec[0] = 42; // -> Accessing first element
vec[1] = 42; // -> Accessing second element
vec[2] = 42; // -> Accessing third element
vec[3] = 42; // -> Segmentation fault since the vector only has 3 elements.