Удалить все, кроме одного цвета из изображения (командной строки или код)

Я хотел бы извлечь один цвет (например, #a87830) из изображения, изменив все остальные цвета на белый. Вход может быть немного шумным, поэтому рядом пиксели близкого цвета могут быть включены. В идеале все небелые пиксели в конце будут преобразованы в черные (т. е. выходное изображение 1-битной глубины).

возможно, я захочу пакетно обработать это, поэтому я надеюсь на что-то вроде командной строки imagemagick или что-то, что я мог бы закодировать с помощью PHP imagemagick расширение. (Я уверен, что ImageMagick должен быть в состоянии сделать это, если правильные параметры могут быть просто разработаны, поэтому я пометил его, но я открыт для другого программного обеспечения, пока он работает на Linux.)

Справочная информация: Я пытаюсь сделать первый этап предварительной обработки для ContourTrace программа, которая хорошо показана на этом изображении:

enter image description here

2 ответов


вот это попробовать:

convert                              \
  http://i.stack.imgur.com/rK259.png \
 -fuzz 33%                           \
 -fill black                         \
 -opaque "#A87830"                   \
 -threshold 12%                      \
  black+white.png

на , и вы будете соответствовать только этим пикселям, которые точно "#A87830".

на -threshold преобразует цветные пиксели в черные или белые, где процент определяет предел: выше становится черным, ниже становится белым.

black+white.png

вы можете изменить команду -opaque "<color-definition>" в +opaque "<color-definition>" to инверсия значение выбора цвета: он заменит пиксели, которые не являются этим цветом (на этот раз я пропускаю


не уверен, что это достаточно сложно для вас. Преобразуйте все пиксели, похожие в пределах 30% от вашего заявленного цвета, в черный, а затем сделайте остальные белые.

convert in.png -fuzz 30% -fill black -opaque "#a87830" -threshold 10% out.png

enter image description here

вы можете "добавить в" больше тонов, которые вы хотели бы стать черными, добавив далее -opaque команды, такой

convert in.jpg -fuzz 20% -fill black  \
    -opaque "#a87830"                 \
    -opaque "#a6725f"                 \
    -threshold 1% out.png

что может позволить вам уменьшить fuzz и тем самым удалить другие тона вы не хотите.