上面說過了色彩量化,經過色彩量化,必然有部分點因爲無法精確的在調色板中找到自己原來使用的顏色而被迫使用和原來顏色最接近的顏色,這就產生了色差。如果用標準調色板,一般經過色彩量化後,圖片會形成大量色塊,即使用定製調色板,也會有少量色塊。爲了進一步提升圖片質量,需要引入誤差擴散。
誤差擴散, 就是將色彩深度降低時, 將像素顏色的變化誤差, 擴散開去. 這使得肉眼在觀察圖片的時候, 相鄰的像素點集合整體的誤差變小。
A | M | |||||
N | O | P | ||||
設像素矩陣中點A的座標爲(x,y),則M(x+1,y) 、N(x-1,y+1)、O(x,y+1)、P(x+1,y+1)
進行色彩量化前A的Rgb值爲Ra1,Ga1,Ba1
色彩量化後A的Rgb值爲Ra2,Ga2,Ba2
則RGB的色差爲ΔR、ΔG、ΔB
按照M:N:O:P = 7:3:5:1的比例,將A點的RGB色彩分散出去,則
Rm = 7/16 * ΔR+RmOld 、Gm = 7/16 * ΔG+GmOld、Bm = 7/16 * ΔB+BmOld
Rn = 3/16 * ΔR+RnOld、Gn = 3/16 * ΔG+GnOld、Bn = 3/16 * ΔB+BnOld
Ro = 5/16 * ΔRRoOld、Go = 5/16 * ΔG+GoOld、Bo = 5/16 * ΔB+BoOld
Rp = 1/16 * ΔRRpOld、Gp = 1/16 * ΔG+GpOld、Bp = 1/16 * ΔB+BpOld
然後在依次向後計算後續點的誤差,直到遍歷像素矩陣結束
這樣就把每個點的誤差按照一定比例分給它後面和下面的若干點,使得誤差在點的周圍均勻分佈並向後綿延,減少色差。
7:3:5:1只是衆多可選的擴散比例中的一個,還有其他多種比例。