日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编程小知识之 Dithering

發(fā)布時(shí)間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程小知识之 Dithering 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文簡單介紹了 Dithering(抖動) 的一些知識

圖形后處理有一種操作稱為 Dithering(抖動),所謂 Dithering,就是一種能夠在較小色彩空間上"模擬出"較大色彩空間的圖像處理方法,說的有些抽象,我們來舉個(gè)例子:

假設(shè)我們需要在顯示器上顯示以下圖片(圖片來自這里):

圖片的像素格式為 RGB24RGB24RGB24(像素的 R,G,BR,G,BR,G,B 通道各占 111 個(gè)字節(jié)(888 位),一個(gè)像素占用 333 個(gè)字節(jié)(共 242424 位)),RGB24RGB24RGB24 格式的像素總共能夠表達(dá) 224=167772162^{24} = 16777216224=16777216 種不同的顏色,現(xiàn)在的大部分顯示器也能夠顯示這么多種顏色(這里我們暫時(shí)忽略伽馬校正等因素的影響),所以我們不用對圖片做什么特殊處理,直接輸出顯示即可~

但是如果顯示器能夠顯示的顏色數(shù)量有限(譬如只能顯示 216216216 種顏色),那么就需要對原圖片進(jìn)行處理了,一種簡單的方法就是對圖片像素進(jìn)行截?cái)?/strong>或者舍入處理,但是這樣會讓圖片產(chǎn)生明顯的色帶(color banding)現(xiàn)象,譬如上面所示的圖片,經(jīng)過(像素)截?cái)?舍入)之后,大概會顯示成這個(gè)樣子(圖片來自這里):

可以看到顯示效果很差,那有沒有辦法改善呢?答案就是使用 Dithering(抖動): Dithering(抖動) 通過調(diào)整一個(gè)像素周圍像素的顏色值,使人眼產(chǎn)生錯覺,從而"模擬出"更多的顯示顏色(譬如將黑白兩種顏色并列在一起就可以"模擬出"灰色(人眼錯覺的關(guān)系)),仍然拿上面的圖片舉例,經(jīng)過 Dithering(抖動) 之后,顯示效果會變成這樣(圖片來自這里):

可以看到顯示效果較之前的版本要好了不少(雖然兩者的顏色空間(使用到的顏色數(shù)量)其實(shí)是相同的)

那具體 Dithering(抖動) 是怎么調(diào)整圖片像素的呢?方法其實(shí)有不少,這里我們簡單介紹一下經(jīng)典的 Floyd–Steinberg 算法,算法的基本思想就是使用誤差擴(kuò)散(error diffusion),所謂誤差擴(kuò)散,簡單來說,就是將像素截?cái)嗷蛘呱崛胫蟮念伾`差擴(kuò)散(添加)到周圍的像素顏色上去, Floyd–Steinberg 算法采用的誤差擴(kuò)散方式如下所示(圖片來自wiki):

圖中的 * 號代表的就是當(dāng)前正在處理(抖動)的像素,該像素截?cái)嗷蛘呱崛胫蟮念伾`差會按 7/16,1/16,5/16,3/167/16, 1/16, 5/16, 3/167/16,1/16,5/16,3/16 的比例添加到其 右, 右下, 下, 左下 的像素上去, wiki 上已經(jīng)給出了相關(guān)偽碼,這里也有一份完整的代碼實(shí)現(xiàn)(基于 Unity),有興趣的朋友可以仔細(xì)看看~

參考資料

  • Floyd-Steinberg Dithering
  • Image Dithering: Eleven Algorithms and Source Code
  • Dithering-Unity3d
  • Ordered dithering

總結(jié)

以上是生活随笔為你收集整理的编程小知识之 Dithering的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。