То, что вы пытаетесь сделать, чаще всего делается из 3D-моделей и называется cel-shading , или "toon-shading". По сути, вы пытаетесь навязать однородные цвета и сделать резкие переходы под определенными углами относительно источника света.
Очевидно, что это не очень хорошо переводит в 2D входные изображения. То, что вы можете сделать, - это выполнить повторную инициализацию, но при этом убедитесь, что вы равномерно заполняете области и разбиваете, где высокий градиент изображения.
Нелинейная диффузия - это шумоподавляющий метод, который заставляет регионы становиться однородными для устранения шума. Если вы позволите этому циклу слишком много итераций, вы получите изображение, похожее на мультфильм.
Я реализовал это, может быть, 2-3 года назад, и это работало удивительно хорошо, учитывая, что это не так сложно реализовать. Однако вам понадобится реализация GPGPU, потому что она медленная !