Сейчас используется такая последовательность:
1. Создаются маски путем копирования "серого канала" - для черной и белой областей.
2. На их основе создаются цветные слои, которые затем накладываются на исходное изображение.
Проблема в том, что цветные и серые области частично закрашиваются, т.к. соответствующие области слоев полупрозрачны.
Перед этим я пробовал использовать -mask, который согласно `man gm` должен пропускать только чисто черные области (то что надо), но вне зависимости от того, как это достигается (он вообще брал все не-белые области, решил путем правки самой маски), в результате обе маски оставляют нетронутыми промежуточные пикселы на границах цветных областей, что совсем нехорошо при инвертировании исходных цветов (например, black->LightBlue & white->black).
Использование -sharpen на этапе создания масок частично решило проблему, но некоторые отдельные пикселы все равно "бъются" (по аналогии с мониторами

Из за этого и решил попробовать вариант со слоями, но те же грабли все-равно мешаются.
Пример иконки media-zip:
Оригинальная

С использованием слоев, black->DarkBlue white->LightGreen

Предыдущий алгоритм с использованием -mask, -sharpen и дополнительного обрезания серых пикселов маски
доп. иконки Akregator, KMag - эту раскраску я сейчас использую (что происходит без -sharpen - лучше 100 раз услышать или прочитать %) ).



p.s. Еще раз присмотрелся к Akregator, похоже там проблемные пикселы вообще прозрачные.