您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關unity3d中圖像壓縮原理是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一張原始圖像(1920x1080),如果每個像素32bit表示(RGBA),那么,圖像需要的內存大小
1920x1080x4 = 8294400 Byte,大約8M。這我們是萬萬不能接受的。如果這樣,1G硬盤才存100多張圖片,傷不起啊!視頻也一樣,如果視頻是1920x1080,30fps, 1小時。那不壓縮大概需要的內存:
8Mx30x60*60 = 864000M,都800多G了!瘋了吧!
所以說,我們需要圖像壓縮。
那圖像為何可以壓縮呢?因為它有很多冗余信息。
常見圖像、視頻、音頻數據中存在的冗余類型如下:
1. 空間冗余
2. 時間冗余
3. 視覺冗余
下面詳細介紹。
一幅圖像表面上各采樣點的顏色之間往往存在著空間連貫性,比如下圖,兩只老鼠的顏色,背后的墻,灰色的地板,顏色都一樣。這些顏色相同的塊就可以壓縮。
比如說,第一行像素基本都一樣,假設亮度值Y是這么存的
[105 105 105…….105],如果共100個像素,那需要1Byte*100。
最簡單的壓縮:[105, 100],表示接下來100個像素的亮度都是105,那么只要2個字節,就能表示整行數據了!豈不是壓縮了!
空間冗余主要發生在單張圖片,比如我們的照片。
這種冗余主要針對視頻。
運動圖像(視頻)一般為位于一時間軸區間的一組連續畫面,其中的相鄰幀往往包含相同的背景和移動物體,只不過移動物體所在的空間位置略有不同,所以后一幀的數據與前一幀的數據有許多共同的地方,這種共同性是由于相鄰幀記錄了相鄰時刻的同一場景畫面,所以稱為時間冗余。
如下圖所示,其實1秒30幀,每一幀之間都是33ms,這么短,前后幀的變話很少,也許只有嘴巴動了,背景沒動。
人類的視覺系統由于受生理特性的限制,對于圖像場的注意是非均勻的,人對細微的顏色差異感覺不明顯。
例如,人類視覺的一般分辨能力為26灰度等級,而一般的圖像的量化采用的是28灰度等級,即存在視覺冗余。
人類的聽覺對某些信號反映不太敏感,使得壓縮后再還原有允許范圍的變化,人也感覺不出來。
無失真壓縮要求解壓以后的數據和原始數據完全一致。解壓后得到的數據是原數據的復制,是一種可逆壓縮。
無失真壓縮法去掉或減少數據中的冗余,恢復時再重新插到數據中,因此是可逆過程
根據目前的技術水平,無損壓縮算法一般可以把普通文件的數據壓縮到原來的1/2-1/4。一些常用的無損壓縮算法有赫夫曼(Huffman)算法和LZW(Lenpel-Ziv & Welch)壓縮算法
解壓以后的數據和原始數據不完全一致,是不可逆壓縮方式。有失真壓縮還原后,不影響信息的表達
例如,圖像、視頻、音頻數據的壓縮就可以采用有損壓縮方法,因為其中包含的數據往往多于我們的視覺系統和聽覺系統所能接收的信息,丟掉一些數據而不至于對聲音或者圖像所表達的意思產生誤解,但可大大提高壓縮比。圖像、視頻、音頻數據的壓縮比可高達100:1,但人的主觀感受仍不會對原始信息產生誤解。
基本思想是利用已被編碼的點的數據值,預測鄰近的一個像素點的數據值
基本思想是將圖像的光強矩陣變換到系數空間上,然后對系數進行編碼壓縮
根據信息出現概率的分布特性而進行的壓縮編碼。比如霍夫曼編碼。
壓縮比
壓縮前后文件大小之比,越高越好,但受速度、消耗資源等的影響。
圖像質量
還原后與原圖像相比,評估的方法有客觀評估和主觀評估。
壓縮與解壓縮速度
與壓縮方法和壓縮編碼的算法有關,一般壓縮比解壓縮計算量大,因而壓縮比解壓縮慢。
這是最好理解的一種編碼了。
現實中有許多這樣的圖像,在一幅圖像中具有許多顏色相同的圖塊。在這些圖塊中,許多行上都具有相同的顏色,或者在一行上有許多連續的像素都具有相同的顏色值。在這種情況下就不需要存儲每一個像素的顏色值,而僅僅存儲一個像素的顏色值,以及具有相同顏色的像素數目就可以,或者存儲像素的顏色值,以及具有相同顏色值的行數。
這種壓縮編碼稱為行程編碼(run length encoding,RLE),具有相同顏色并且是連續的像素數目稱為行程長度。
例如,字符串AAABCDDDDDDDDBBBBB
利用RLE原理可以壓縮為3ABC8D5B
RLE編碼簡單直觀,編碼/解碼速度快,
因此許多圖形和視頻文件,如.BMP .TIFF及AVI等格式文件的壓縮均采用此方法.
由于一幅圖像中有許多顏色相同的圖塊,用一整數對存儲一個像素的顏色值及相同顏色像素的數目(長度)。例如:
(G ,L)//G為顏色值,L為長度值
編碼時采用從左到右,從上到下的排列,每當遇到一串相同數據時就用該數據及重復次數代替原來的數據串。
舉例,如下的18*7的像素(假設只有灰度值,1字節)
000000003333333333
222222222226666666
111111111111111111
111111555555555555
888888888888888888
555555555555553333
222222222222222222
僅僅需要11對數據表示。
(0,8) (3,10) (2,11) (6,7)
(1,18) (1,6) (5,12) (8,18)
(5,14) (3,4) (2,18)
游程長度編碼特點:
直觀,經濟;
是一種無損壓縮;
壓縮比取決于圖像本身特點,相同顏色圖像塊越大,圖像塊數目越少,壓縮比越高。
適用于計算機生成的圖像,例如。BMP、TIF等,不適于顏色豐富的自然圖像。
這并不是說RLE編碼方法不適用于自然圖像的壓縮,相反,在自然圖像的壓縮中少不了RLE,只不過是不能單純使用RLE一種編碼方法,需要和其他的壓縮編碼技術聯合應用。
由于圖像中表示顏色的數據出現的概率不同,對于出現頻率高的賦(編)予較短字長的碼,對出現頻率小的編于較長字長的碼,從而減少總的代碼量,但不減少總的信息量。
編碼步驟:
(1)初始化,根據符號概率的大小按由大到小順序對符號進行排序
(2)把概率最小的兩個符號組成一個節點,如圖4-02中的D和E組成節點P1。
(3)重復步驟2,得到節點P2、P3和P4,形成一棵“樹”,其中的P4稱為根節點。
(4)從根節點P4開始到相應于每個符號的“樹葉”,從上到下標上“0”(上枝)或者“1”(下枝),至于哪個為“1”哪個為“0”則無關緊要,最后的結果僅僅是分配的代碼不同,而代碼的平均長度是相同的。
(5)從根節點P4開始順著樹枝到每個葉子分別寫出每個符號的代碼。
將在空域上描述的圖象,經過某種變換(通常采用,余弦變換、傅立葉變換、沃爾什變換等),在某種變換域里進行描述。
在變換域里,首先降低了圖象的相關性;其次通過某種圖象處理(如頻域的二維濾波)以及熵編碼,則可進一步壓縮圖象的編碼比特率。
這種變換常用于JPEG圖像壓縮。
G : 輸入源圖像
G’ :解碼后的圖像
U: 二維正交變換
U’ : 二維正交逆變換
除了這些常見的壓縮算法,還有很多種其他算法,這里就不一一介紹啦,反正你有個感性的認識就行。
關于“unity3d中圖像壓縮原理是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。