У меня есть изображение с постоянным цветным фоном.  Есть объекты, нарисованные спереди, которые могут иметь прозрачность. Есть ли способ, по алгоритму, удалить фон с изображения, чтобы у меня осталось изображение с прозрачными объектами без фона? Я хочу, чтобы это произошло в моем коде, чтобы алгоритм был великолепным.

1 ответ1

0

Если я правильно понимаю вопрос, и у вас нет дополнительной информации, о которой вы нам не сообщили, я считаю, что это будет невозможно.  Рассмотрим следующее составное изображение:

                синий прямоугольник с зеленоватыми кругами

Очевидно, у него синий фон.  Теперь вот передние объекты:

                прозрачный желтый круг и непрозрачный зеленый круг

Я не понимаю, как вы могли бы иметь алгоритм, чтобы получить второе изображение от первого - недостаточно информации для работы.


Итак, что вы можете сделать, если у вас есть больше информации?  Какая дополнительная информация будет полезна?  Часть ответа в том, что вам нужно знать, где находятся объекты переднего плана.  Если объект переднего плана имеет тот же цвет, что и фон, или на 100% прозрачен, и у него нет границы, он невидим, и нет алгоритма, который мог бы даже определить его существование.  (И, если они перекрываются, это может помочь узнать порядок наложения.  Можно было бы вывести это (то есть вычислить это с помощью алгоритма), но я не знаю.)

Но, учитывая, что вы знаете, где находятся объекты, подумайте: у вас есть фон цвета B, скрытый объектом переднего плана цвета F и прозрачности T. Какой цвет (C) вы видите?  C может быть вычислен как функция от B, F и T. (Если T = 0, C = F; если T = 1 (100%), C = B.)  Вы знаете B и C; имеет смысл, что вы сможете определить F или T, если знаете другого. 

Есть исключения, о которых я упоминал в предыдущем абзаце.  Если C = B, объект невидим, потому что либо он того же цвета, что и фон (F = B), либо он на 100% прозрачен (T = 1).  Если вы знаете F = B = C, невозможно определить T. Если вы знаете T = 1, то невозможно определить F. Но, по крайней мере, во втором (T = 1) случае, если вы просто хотите определить как выглядит объект переднего плана: он выглядит белым.

Многие программы реализуют эту функцию: PowerPoint (что я использовал для создания своих изображений), Photoshop, Paint.NET, GIMP и т.д., И это, вероятно, задокументировано.  Я предлагаю вам изучить эту функцию C=f(B,F,T) и выяснить, как получить F=f′(B,T,C) и T=f″(B,F,C) .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .