減去顏色並提取透明度值

減去顏色並提取透明度值

假設一張圖片被製作成半透明並添加到平坦的背景顏色上。原始圖片、背景顏色和結果(混合)是已知的。但是,增加的透明度(alpha 值)是未知的,並且沿著圖片變化。是否有一種自動方法來計算影像每個像素的附加透明度值?我們可以複製這些值並應用於另一張圖片嗎?

[ 圖片 + 透明度(未知且變更) ] + 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”

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

轉換回原始範圍,例如 0..255:

Transparency = a * 255

不幸的是,這意味著您無法從所有像素中提取透明度(alpha)。特別是,當 Picture == Background (p - b == 0) 時,透明度可以是 0..255 範圍內的任何值(a == 0.0 到 1.0 之間的任何值);如果您在程式碼中使用此公式,則需要防止被零除。

當 Picture-Background 不為零時,可以獲得透明度,但當差異 (p - b) 較小時,透明度不太準確。

相關內容