Совершенно дилетантское мнение: а если анализировать RGB спектр каждого пикселя, потом считать количество пикселей одного цвета - возможно с неким % допуском , затем выкинуть все что меньше/больше мин/макс пикселей знака и дальше от этого плясать?
Возможно не пикселей как таковых, а группы одноцветных пикселей, скажем 3х3.
Например так: считаем, что минимальная толщина символа Х пикселей, максимальное У.
Все что больше У*У можно сразу исключить, то бишь закрасить.
Ищем максимальное количество _одноцветных_ пятен Х*Х - это и будут наши базовые цвета. Если получили ХХХ пикселей Х+Z*Х+Z добавляем погрешность N%. То есть если база 100*100*100, а допуск 5%, получим базу+допуск 95-105*95*105*95-105 как вариации базового цвета. Тут надо подумать, у всех ли цветов должен быть одинаковый допуск...
Далее так: если квадрат 2*2 не содержит цветов базы+допуск, то он должен стать белым. Если содержит одна грань, проверяем что за гранью, и если не содержит - тоже белый. Содержит - на пиксель в сторону, опять проверяем и закрашиваем. Затем обрабатываем одиночные пиксели по тому же алгоритму.
Надеюсь, мой поток сознания хоть частично можно понять...