У меня есть изображение с постоянным цветным фоном. Есть объекты, нарисованные спереди, которые могут иметь прозрачность. Есть ли способ, по алгоритму, удалить фон с изображения, чтобы у меня осталось изображение с прозрачными объектами без фона? Я хочу, чтобы это произошло в моем коде, чтобы алгоритм был великолепным.
1 ответ
Если я правильно понимаю вопрос, и у вас нет дополнительной информации, о которой вы нам не сообщили, я считаю, что это будет невозможно. Рассмотрим следующее составное изображение:
Очевидно, у него синий фон. Теперь вот передние объекты:
Я не понимаю, как вы могли бы иметь алгоритм, чтобы получить второе изображение от первого - недостаточно информации для работы.
Итак, что вы можете сделать, если у вас есть больше информации? Какая дополнительная информация будет полезна? Часть ответа в том, что вам нужно знать, где находятся объекты переднего плана. Если объект переднего плана имеет тот же цвет, что и фон, или на 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)
.