В общем, это невозможно: только у людей достаточно контекста, чтобы определить, какие из непересекающихся частей принадлежат друг другу.Вы можете приблизить его, используя различные способы, но это безнадежное дело - и ИМХО совершенно ненужно.Представьте себе, что вы пишете тест для этой функции - это невозможно, для этого нужен человек в цикле, поскольку результаты для любого конкретного листа значков не обобщаются.Знание того, что алгоритм работает для некоторого листа, ничего не говорит вам о том, будет ли он работать для другого листа, о котором вы априори ничего не знаете.
Было бы проще вручную раскрасить каждый спрайт, чтобы получить другой цветчем у соседей.Тогда жадный алгоритм мог бы легко найти ограничивающие рамки, не прибегая к чему-либо.