照片太暗了,想要調亮一點。很直覺想到兩種策略。
加法變化:亮度加上一個數。正數會變亮,負數會變暗,等於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.0 1.0 1.2 1.2 1.5 1.5 1 1 128 128 128
1 1 129 155 194
編號 | 身分 | 題目 | 主題 | 人氣 | 發表日期 |
沒有發現任何「解題報告」
|