Прежде всего, ваши изображения становятся черными / странными по краям, потому что вы не фильтруете края.Короткий взгляд на ваш код покажет, что вы начинаете с (kernelSize, kernelSize) и заканчиваете (width-kernelSize, height-kernelSize) - это означает, что вы фильтруете только меньший прямоугольник внутри изображения, где у вас есть запас по kernelSize.каждая сторона, которая нефильтрована.Не зная ваш javscript / html5, я бы предположил, что ваш массив outputData инициализируется нулями (что означает черный), а затем, не касаясь их, оставит их черными.Посмотрите мою ссылку в комментарии к вашему сообщению, чтобы узнать код, который обрабатывает края.
Кроме этого, следуйте ответу @ nikie - вы, вероятно, хотите убедиться, что цветовое расстояние ограничено диапазоном [0,1] - вы можете сделать это, добавив строку colourDist = colourDist / (MAX_COMP * Math,sqrt(3))
(непосредственно после первой строки для ее вычисления).где MAX_COMP
- максимальное значение, которое может иметь компонент цвета в изображении (обычно 255)