Вычитание цветов и извлечение значений прозрачности

Вычитание цветов и извлечение значений прозрачности

Допустим, изображение было сделано полупрозрачным и добавлено на плоский фоновый цвет. Исходное изображение, фоновый цвет и результат (смесь) известны. Но эта добавленная прозрачность (альфа-значение) неизвестна и меняется вдоль изображения. Есть ли автоматизированный способ расчета этого добавленного значения прозрачности для каждого пикселя изображения? Можем ли мы скопировать эти значения и применить к другому изображению?

[ Изображение + Прозрачность (неизвестно и варьируется) ] + FlatBackground = Mix (непрозрачный)

= [ Полупрозрачная картинка ] + FlatBackground = Mix(непрозрачный)

Пример копирования каждого добавленного значения прозрачности, соответствующего пикселям изображения:

for pixel(0,0) added 127
for pixel(1,0) added 124
for pixel(0,1) added 124
for pixel(1,1) added 120

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

решение1

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

Предполагая, что 8-битные цветовые образцы находятся в диапазоне 0..255 и нормализуются до диапазона 0..1.0, сделайте это для каждого пикселя изображения:

m = Mix/255
p = Picture/255
a = alpha = Transparency/255

m = (p * a) + (b * (1.0 - a))

Решите для "а"

a = (m - b) / (p - b)

Преобразовать обратно в исходный диапазон, например, 0..255:

Transparency = a * 255

К сожалению, это означает, что вы не можете извлечь Прозрачность (альфа) из всех пикселей. В частности, когда Изображение == Фон (p - b == 0), то Прозрачность может быть любой в диапазоне 0..255 (a == что угодно от 0.0 до 1.0); если вы используете эту формулу в коде, вам нужно будет защититься от деления на ноль.

Если Picture-Background не равен нулю, то можно получить прозрачность, но это не очень точно, если разница (p - b) мала.

Связанный контент