b462. 圖片亮度調整原理深度剖析
標籤 : 影像處理
通過比率 : 59人/71人 ( 83% ) [非即時]
評分方式:
Tolerant

最近更新 : 2015-08-27 16:59

內容


照片太暗了,想要調亮一點。很直覺想到兩種策略。

加法變化:亮度加上一個數。正數會變亮,負數會變暗,等於0亮度不變。
乘法變化:亮度乘上一個數。大於1.0會變亮,小於1.0會變暗,等於1.0亮度不變。

到這裡大家應該都看得懂吧?

接下來引進國中數學的「代數」,把這些觀念整理成簡單的數學式子。令原本的亮度數值是 Iold,新的像素數值是 Inew

加法變化:Inew = Iold + t
乘法變化:Inew = Iold ⋅ s

到這裡大家應該都看得懂吧?

現在重點來了。當我們使用了很多次加法變化、乘法變化,混和著用、交錯著用,式子會變得如何呢?

例如先做一次乘法變化、再做一次加法變化:Inew = (Iold ⋅ s) + t
例如先做一次加法變化、再做一次乘法變化:Inew = (Iold + t) * s
例如連做三次加法變化:Inew = ((Iold + t1) + t2) + t3

把這些式子展開,重新整理,可以發現,其格式總是 Inew = Iold ⋅ a + b !

到這裡大家應該都看得懂吧?

接下來引進國中數學的「函數」。數學當中,「變化」習慣表示成「函數」,上述式子表示成函數就是 f(x) = a ⋅ x + b,其中 x 代表 Iold,f(x) 代表 Inew。f(x) 是「一元一次函數」。

也就是說,一元一次函數,足以表示複雜的乘法變化、加法變化。一元一次函數,也能表示單一一次乘法變化(令 b = 0)、單一一次加法變化(令 a = 0)。可說是非常方便!你沒想過一元一次函數有這種功能吧!

本題的目標,更複雜一點點:使用三個一元一次函數,分頭處理RGB值。

fR(x) = aR ⋅ x + bR
fG(x) = aG ⋅ x + bG
fB(x) = aB ⋅ x + bB

計算結果必須符合RGB值範圍。計算結果四捨五入,低於0請設定為0,高於255請設定為255。

到這裡大家應該就看得懂吧?

輸入說明

六個浮點數 aR bR aG bG aB bB (0 <= aR, bR, aG, bG, aB, bB <= 255)。

然後是一張圖片:兩個整數 W H (1 <= W, H <= 256),是圖片的寬和高;接下來的 H 行,每行有 W*3 個整數,是每個像素的 RGB 值 (0 <= R, G, B <= 255)。

輸出說明

請輸出處理過的圖片。

 

範例輸入 #1
1.0 1.0 1.2 1.2 1.5 1.5
1 1
128 128 128
範例輸出 #1
1 1
129 155 194
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (20%): 1.0s , <1M
公開 測資點#1 (20%): 1.0s , <1M
公開 測資點#2 (20%): 1.0s , <1M
公開 測資點#3 (20%): 1.0s , <1M
公開 測資點#4 (20%): 1.0s , <1M
提示 :
標籤:
影像處理
出處:
[管理者: DJWS (...) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
沒有發現任何「解題報告」