Алгоритмы удаления фона изображения

У меня много изображений с белым фоном, и мне нужно его удалить (сделать прозрачным). Я уже пробовал imagemagick convert и для некоторых изображений, которые работали довольно хорошо, но все же нельзя использовать на темном фоне.
Я нуб в этой области программирования... Кто-нибудь знает хорошие алгоритмы для удаления фона?

Кроме того, было бы здорово, если бы он мог правильно обрабатывать такое изображение:
http://dev.addvert.it/cache/24eeab00e5987452d09fbeec0c7678d6_w472_h472_sc.jpg

Проблема с convert diff заключается в том, что он стирает большую часть изображения, в то время как алгоритм border не затрагивает центральную часть.
Я полностью понимаю, как сложно калькулятору сделать что-то подобное, и я очень удивлен этим. результаты конвертировать, но если есть возможность лучшего решения, почему бы не спросить? :D


person Iazel    schedule 13.02.2015    source источник


Ответы (1)


Вы не обязаны преобразовывать белые пиксели в прозрачные. Возможно, вы могли бы взять цвет пикселя в верхнем левом углу и сделать все пиксели этого цвета прозрачными, и это будет работать и для черного фона:

Как предложил @emcconville, первый из следующих двух вариантов более лаконичен:

convert towel.jpg -fill none -fuzz 2% -draw 'matte 0,0 replace' output.png

или, согласно моему оригиналу,

convert towel.jpg -alpha on -fill none -fuzz 5% -draw 'color 0,0 replace' output.png

введите здесь описание изображения

Вы можете найти это более читаемым...

convert towel.jpg -fuzz 5%                                           \
   -transparent $(convert towel.jpg -format "%[pixel:p{0,0}]" info:) \
   output.png

Во второй строке $(convert ...) просто получает цвет верхнего левого пикселя и передает его в середину внешней команды convert в качестве цвета, который нужно сделать прозрачным, но он делает то же самое, что и первая версия.

person Mark Setchell    schedule 13.02.2015
comment
Хороший ответ, но я бы отказался от -alpha on в пользу -draw 'matte 0,0 replace' - person emcconville; 13.02.2015
comment
@emcconville Я очень рад слушать и учиться на вашем предложении, но я не уверен, что понимаю всю тонкость того, что лучше, чем вы предложили? Не могли бы вы объяснить, пожалуйста? - person Mark Setchell; 13.02.2015
comment
Конечно, @MarkSetchell. Я отказался от своего ответа, так как он был идентичен вашему; однако я решил использовать матовую операцию рисования. Matte точно такой же, как color, но автоматически наследует альфа-обработку, поэтому нет необходимости вызывать дополнительные -alpha флаги. - person emcconville; 13.02.2015
comment
@emcconville Большое спасибо - я включил предложенное вами улучшение. - person Mark Setchell; 14.02.2015
comment
Спасибо вам и @emcconville за ваши ответы. Если вы видите изображение, которое вы разместили, это неприемлемо, даже если это почти тот же результат, что и у меня :( Мне нужно, чтобы эти изображения отображались на выбранном пользователем фоне, поэтому его нельзя стереть в важных частях или сохранить фон. плавает вокруг... - person Iazel; 14.02.2015