Я бы сказал, что эта проблема ближе к «невозможной», чем «очень сложной». Единственный подход к этому, который я могу придумать, состоит в том, чтобы сделать предположение, что фон изображения, скорее всего, будет состоять из сплошных блоков одинаковых цветов, тогда как передний план, вероятно, будет состоять из более мелких блоков разнородных цветов.
Если это предположение в целом верно, то вы можете сканировать все пиксели изображения и веса в соответствии с тем, насколько они похожи или отличаются от соседних пикселей. Другими словами, если бы все соседи пикселя (возможно, в пределах некоторого произвольного радиуса) были одинаковыми цветами, вы бы не включили этот пиксель в общую оценку. Если у соседей, как правило, очень разные цвета, вы бы сильно утяжелили пиксель, возможно, пропорционально степени различия.
Это может не сработать идеально, но это определенно, по крайней мере, приведет к исключению больших полос похожих цветов.