當前位置:首頁 » 操作系統 » 演算法縮法

演算法縮法

發布時間: 2023-05-04 15:14:21

① 簡述JPEG壓縮演算法

首先你需要了解幾個概念,有損壓縮,量化,行程編碼。
對一副圖片來說,bitmap就是原始格式,沒經過任何壓縮的。
量化就是把所有0-255的像素值進行歸類,然後分成盡量少的積累,這要存儲量就小很多了,對於JEPG來說量化是有損壓縮的起源。
最後就是對所有的已經歸類過的點進行行程編碼,然後就壓縮完了

② 常用的數據壓縮演算法有哪些

1、RLE演算法:又叫Run Length Encoding,是一個針對無損壓縮的非絕高伏常簡單的演算法。它用重復位元組和重復的次數來簡單描述來代替重復的位元組。

2、哈夫曼演算法:無損壓縮當中最好的方法。它使用預先二進制描述來替換每個符號,長度由特殊符號出現的頻率決定。常見的符號需要很少的位來表示,而不常見的符號需要很多為來表示。

3、Rice演算法:對於由大word組成的數據和教並攜低的數據值,Rice 編碼能夠獲得較好的壓縮比。念返

③ 壓縮演算法原理

哈夫曼
哈夫曼編碼是無損壓縮當中最好的方法。它使用預先二進制描述來替換每個符號,長度由特殊符號出現的頻率決定。常見的符號需要很少的位來表示,而不常見的符號需要很多為來表示。

哈夫曼演算法在改變任何符號二進制編碼引起少量密集表現方面是最佳的。然而,它並不處理符號的順序和重復或序號的序列。

2.1 原理
我不打算探究哈夫曼編碼的所有實際的細節,但基本的原理是為每個符號找到新的二進製表示,從而通常符號使用很少的位,不常見的符號使用較多的位。

簡短的說,這個問題的解決方案是為了查找每個符號的通用程度,我們建立一個未壓縮數據的柱狀圖;通過遞歸拆分這個柱狀圖為兩部分來創建一個二叉樹,每個遞歸的一半應該和另一半具有同樣的權(權是 ∑ N K =1 符號數 k , N 是分之中符號的數量,符號數 k 是符號 k出現的次數 )

這棵樹有兩個目的:

1. 編碼器使用這棵樹來找到每個符號最優的表示方法

2. 解碼器使用這棵樹唯一的標識在壓縮流中每個編碼的開始和結束,其通過在讀壓縮數據位的時候自頂向底的遍歷樹,選擇基於數據流中的每個獨立位的分支,一旦一個到達葉子節點,解碼器知道一個完整的編碼已經讀出來了。

壓縮後的數據流是 24 位(三個位元組),原來是 80 位( 10 個位元組)。當然,我應該存儲哈夫曼樹,這樣解碼器就能夠解碼出對應的壓縮流了,這就使得該例子中的真正數據流比輸入的流數據量大。這是相對較短的數據上的副作用。對於大數據量來說,上面的哈夫曼樹就不佔太多比例了。

解碼的時候,從上到下遍歷樹,為壓縮的流選擇從左 / 右分支,每次碰到一個葉子節點的時候,就可以將對應的位元組寫到解壓輸出流中,然後再從根開始遍歷。

2.2 實現
哈夫曼編碼器可以在基本壓縮庫中找到,其是非常直接的實現。

這個實現的基本缺陷是:

1. 慢位流實現

2. 相當慢的解碼(比編碼慢)

3. 最大的樹深度是 32 (編碼器在任何超過 32 位大小的時候退出)。如果我不是搞錯的話,這是不可能的,除非輸出的數據大於 2 32位元組。

另一方面,這個實現有幾個優點:

1. 哈夫曼樹以一個緊密的形式每個符號要求 12 位(對於 8 位的符號)的方式存儲,這意味著最大的頭為 384 。

2. 編碼相當容易理解

哈夫曼編碼在數據有噪音的情況(不是有規律的,例如 RLE )下非常好,這中情況下大多數基於字典方式的編碼器都有問題。

④ C語言都有哪些經典的無損壓縮演算法

C語言經典的無損壓縮演算法有:哈夫曼演算法、LZ。

哈夫曼演算法:
哈夫曼編碼是David A. Huffman於1952年發明的一種滿足對編碼演算法要求的一種編碼演算法。
哈夫曼演算法是利用頻率信息構造一棵二叉樹,頻率高的離根節點近(編碼長度短),頻率低的離根節點遠(編碼長度長),手動構造方法是先將字母按照頻率從小到大排序,然後不斷選擇當前還沒有父節點的節點中權值最小的兩個,構造新的父節點,父節點的值為這兩個節點值的和,直到構造成一棵二叉樹。

LZ演算法:
LZ演算法及其衍生變形演算法是壓縮演算法的一個系列。LZ77和LZ78演算法分別在1977年和1978年被創造出來。雖然他們名字差不多,但是演算法方法完全不同。這一系列演算法主要適用於字母數量有限的信息,比如文字、源碼等。流行的GIF和PNG格式的圖像,使用顏色數量有限的顏色空間,其壓縮就採用了兩種演算法的靈活變形應用。

⑤ 哪一種壓縮演算法壓縮效果最好

7Zip極限壓縮,效果最好,數據文件實測壓縮率可達15%,已壓縮文件可達80%!唯一缺點洞轎梁是解壓和壓縮同時極慢!想要速納運度可帆亮以用Zip!但Zip效果可能最差!

⑥ 壓縮的演算法都有哪些

只有最常見的zip的,估計你都要研究上n久了。。。
文本文件一般有zip,rar,
網頁文件有htz
視頻文件有rm,avi
語音文件有mp3,
圖片文件有png,gif,jpg

這些都是文件壓縮的。。。。

------------------------------------

ZIP文件的總體格式
分文件頭信息+文件壓縮數據
中心目錄+中心目錄記錄結束符

1.分文件頭信息:
位元組數 描述
4 分文件頭信息標志(0x04034b50)
2 解壓縮所需版本
2 通用比特標志位(置比特0位=加密;置比特1位=使用壓
縮方式6,並使用8k變化目錄,否則使用4k變化目錄;置比特2位=使用壓
縮方式6,並使用3個ShannonFano樹對變化目錄輸出編碼,否則使用2個
ShannonFano樹對變化目錄輸出編碼,其它比特位未用)
2 壓縮方式(0=不壓縮,1=縮小,2=以壓縮因素1縮小,3=以
壓縮因素2縮小,4=以壓縮因素3縮小,5=以壓縮因素4縮小,6=自展)
2 文件最後修改時間
2 文件最後修改日期
4 32位校驗碼
4 壓縮文件大小
4 未壓縮文件大小
2 文件名長
2 擴展段長
? 文件名(不定長)
? 擴展段(不定長)

2.中心目錄結構
文件頭信息...中心目錄記錄結束符
文件頭:
位元組數 描述
4 中心文件頭信息標志(0x02014b50)
2 主機操作系統(高位位元組表示主機操作系統,低位字
節表示ZIP壓縮軟體版本號,其值除以10表示主版本號,其值模10表示
次版本號。0=MS-DOS,OS/2 FAT文件系統,1=Ami ga,2=VMS,3=Unix及
變種,4=VM/CMS,5=AtariST,6=OS/2 HPFS,7=Macintosh,8=Z-System,9
=C P/M,10-255未用)
2 解壓縮所需版本
2 通用比特標志
2 壓縮方式
2 文件最後修改時間(用標準的MS-DOS時間日 期格式
編碼)
2 文件最後修改日期
4 32位校驗碼(使用David Schwaderer的CRC-32演算法產
生)
4 壓縮文件大小
4 未壓縮文件大小
2 文件名長
2 擴展段長
2 文件注釋長(分別為文件名長,擴展段,注釋 段,小於
64K)
2 磁碟起始號(本文件在磁碟中的起始號)
2 內部文件屬性(最低位若置1,表示為ASC文本,否則為
二進制數據,其它位未用)
4 外部文件屬性(依賴於主機操作系統)
4 分文件頭相對位移
? 文件名(不定長)
? 擴展段(不定長,用於未來擴展,低版本為0長)
? 文件注釋(不定長)

3.中心目錄記錄結束符
位元組數 描述
4 中心目錄標記結束符(0x06054b50)
2 磁碟號(其中包括中心目錄結束記錄)
2 磁碟中心目錄起始號
2 磁碟中心目錄入口總數
2 中心目錄入口總數(ZIP文件中的文件總數)
2 整個中心目錄大小
4 關於起始磁碟號的中心目錄初始偏移
2 ZIP文件注釋長度
? ZIP文件注釋(不定長)

加密方法
PKZIP中使用的加密方法由Roger Schlafly提供。ZIP文件在解壓
縮前必須先解密。每個加密文件具有一個12位元組的加密文件頭擴展信
息,存儲於數據區的起始位置,加密前先設置一個起始值,然後被三個3
2位的密鑰加密。密鑰被使用者提供的口令初始化。12個位元組加密之
後,由PKZIP的偽隨機數產生方法,結合PKZIP中使用CRC-32演算法對密鑰
進行更新。
具體實施分為三步:

1.用口令對三個32位密鑰初始化。
K(0)=305419896,K(1)=591751049,K(2)=878082192
循環 for i=0 to length(password)-1
調用更新密鑰函數 update_keys(password(i))
結束循環(循環口令長度次)
其中更新密鑰函數為:
update_keys(char):
Key(0)=crc32(key(0),char)
Key(1)=Key(1)+(Key(0)& 000000ffH)
Key(1)=Key(1)*134775813+1
Key(2)=crc32(Key(2),Key(1)〉〉24)
end update_keys
CRC32函數中,給定一個4位元組的CRC值和一個字元,返回一個由CRC
-32演算法更新的CRC。具體為:
crc32(c,b)=crc32tab[(c^b)&0xff]^(c>>8),crc32tab[256]的值
為固定的256個4位元組數。

2.讀取並加密12位元組的加密頭,再次對密鑰進行初始化。
將12個位元組的加密頭讀入緩沖區buffer(0)至buffer(11),循環fo
r i=0 to 11
C=buffer(i)^decrypt_byte()
update_keys(C)
buffer(i)=C
結束循環(循環12次)
其中的decrypt_byte()函數為:
unsigned char decrypt_byte()
local unsigned short temp
temp=Key(2)¦2
decrypt_byte=((temp*(temp^1))>>8)&0xff
end decrypt_byte
該步結束後,緩沖區中最後的二個位元組buffer(10)和buffer(11)
將成為加密文件校驗碼的二個最高位(按低至高順序存放)。對ZIP加
密文件進行解壓縮前,PKUNZIP軟體將使用者提供的口令按上述二個步
驟進行處理,得到的結果與校驗碼的二個高位位元組進行比較,只有當提
供了正確的口令時,結果一致,才能進行後續的解壓縮過程,否則,PKZI
P報告錯誤信息,程序自動結束。

3.讀取壓縮的數據流並以加密密鑰對其進行加密。
壓縮數據流按下述過程加密:
循環 直至數據流結束
C=數據流的一個位元組
temp=C^decrypt_byte()
update_keys(temp)
輸出temp
結束循環

⑦ 圖像縮放的縮放演算法

假設源圖像如下圖所示:
要將該圖像放大兩倍,可以有很多種演算法,最簡單的方法為鄰域插值,即將每一個原像素原封不動地復制映射到擴展後對應四個像素中:
這種方法在放大圖像的同時保留了所有的原圖像的所搜漏凳有信息,但是會產生鋸齒現象。
雙線性插值的效果對於放大的圖像而言較領域插值來得平滑,但是卻使得圖像變得模糊而且仍然會有一部分鋸齒現象。
雙三次插值更好比雙線性插值更好世旅。
對於低解析度或顏色很少的(通常是從2到256色)圖像的放大問題,效果最好的演算法是hq2x演算法或類似的縮放演算法。這些演算法將會產生銳邊並保留大量的細節,其效果如下:
對於照片(以及有許多色階的光柵圖像)的縮放演算法可以參看一種搜薯被稱為超采樣(supersampling)的反鋸齒演算法。

⑧ 二進制壓縮演算法有哪些

二進制數據壓縮演算法二進制是計算技術中廣泛採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是「逢二進一」,借位規則是「借一當二」,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用「開」來表示1,「關」來表示0。

20世紀被稱作第三次科技革命的重要標志之一的計算機的發明與應用,因為數字計算機只能識別和處理由『0』。『1』符號串組成的代碼。其運算模式正是二進制。19世紀愛爾蘭邏輯學家喬治布爾對邏輯命題的思考過程轉化為對符號「0『』。『』1『』的某種代數演算,二進制是逢2進位的進位制。0、1是基本算符。因為它只使用0、1兩個數字元號,非常簡單方便,易於用電子方式實現。

二進制壓縮 - 演算法

二進制壓縮

編程時遇到每個數據只有兩種狀態,且 dfs 或者 bfs 時遍歷時間復雜度高時,可以採用二進制壓縮數據,尤其是二維數組。LZFSE

1,zlib和gzip都對deflate進行了封裝,比deflate多了數據頭和尾

1,蘋果開源了新的無損壓縮演算法 LZFSE ,該演算法是去年在iOS 9和OS X 10.10中 引入 的。按照蘋果公司的說法,LZFE的壓縮增益和ZLib level 5相同,但速度要快2~3倍,能源效率也更高。

LZFSE基於Lempel-Ziv,並使用了 有限狀態熵編碼,後者基於Jarek Duda在

非對稱數字系統(ANS)方面所做的熵編碼工作。簡單地講,ANS旨在「終結速度和比率的平衡」,既可以用於精確編碼,又可以用於快速編碼,並且具有數據加密功能。使用ANS代替更為傳統的

Huffman和 算術編碼方法的壓縮庫 越來越多,LZFSE就位列其中。

顯然,LZFSE的目標不是成為最好或最快的演算法。事實上,蘋果公司指出,

LZ4的壓縮速度比LZFSE快,而 LZMA提供了更高的壓縮率,但代價是比Apple

SDK提供的其他選項要慢一個數量級。當壓縮率和速度幾乎同等重要,而你又希望降低能源效率時,LZFSE是蘋果推薦的選項。

GitHub上提供了LZFSE的參考實現。在MacOS上構建和運行一樣簡單:

$ xcodebuild install DSTROOT=/tmp/lzfse.dst

如果希望針對當前的iOS設備構建LZFSE,可以執行:

xcodebuild -configuration 「Release」 -arch armv7 install DSTROOT=/tmp/lzfse.dst

除了 API文檔之外,蘋果去年還提供了一個 示例項目,展示如何使用LZFSE 進行塊和流壓縮,這是一個實用的LZFSE入門資源。

LZFSE是在谷歌 brotli之後發布的,後者在去年開源。與LZFSE相比,brotli 似乎是針對一個不同的應用場景進行了優化,比如壓縮靜態Web資產和Android APK,在這些情況下,壓縮率是最重要的。

⑨ 矢量數據的常用壓縮方法

矢量數據的常用壓縮方法:間隔取點法、垂距法、光欄法。

數據有計量尺度:

1、名類尺度(Nominal scale,亦稱分類尺度、列名尺度等)是這樣一種品質標志,按照它可對研究客體進行平行的分類或分組,使同類同質,異類異質。例如,按照性別將人口分為男、女兩類;按照經濟性質將企業分為國有、集體、私營、混合制企業等。

2、順序尺度(Ordinal scale,亦稱序數尺度、順位尺度等)是這樣一種品質標志,利用它不僅能將事物分成不同的類別,還可確定這些類別的等級差別或序列差別。例如「產品等級」就是一種測度產品質量好壞的順序尺度,它可將產品分為一等品、二等品、三等品、次品等。

3、區間尺度(Interval scale,亦稱間隔尺度、等距尺度、定距尺度等)是能測度事物類別或次序之間間距的數量標志,更具體些說,區間尺度是可將事物區分為不同類別,對這些類別進行排序,並較准確度量類別之間數量差距的一種計量尺度。

4、比尺度(Ratio scale,亦稱為比率尺度)的計量結果也表示為數值,跟區間尺度屬同一層次,有時對兩者可不作區分。比尺度這種數量標志不僅能測度各類別的大小和多少,還有一個絕對零點(Absolute zero)作為起點。

⑩ 現今的圖像壓縮演算法有哪些急...

淺談圖像壓縮演算法

余科亮

本文僅討論靜止圖像的壓縮基本演算法,圖像壓縮的目的在於以較少的數據來
表示圖像以節約存儲費用,或者傳輸時間和費用。
JPEG壓縮演算法可以用失真的壓縮方式來處理圖像,但失真的程度卻是肉眼所
無法辯認的。這也就是為什麼JPEG會有如此滿意的壓縮比例的原因。
下面主要討論,JPEG基本壓縮法。
一.JPEG壓縮過程

JPEG壓縮分四個步驟實現:
1.顏色模式轉換及采樣;
2.DCT變換;
3.量化;
4.編碼。

二.1.顏色模式轉換及采樣

RGB色彩系統是我們最常用的表示顏色的方式。JPEG採用的是YCbCr色彩系統。
想要用JPEG基本壓縮法處理全彩色圖像,得先把RGB顏色模式圖像數據,轉換為
YCbCr顏色模式的數據。Y代表亮度,Cb和Cr則代表色度、飽和度。通過下列計算
公式可完成數據轉換。
Y=0.2990R+0.5870G+0.1140B
Cb=-0.1687R-0.3313G+0.5000B+128
Cr=0.5000R-0.4187G-0.0813B+128
人類的眼晴對低頻的數據比對高頻的數據具有更高的敏感度,事實上,人類
的眼睛對亮度的改變也比對色彩的改變要敏感得多,也就是說Y成份的數據是比較
重要的。既然Cb成份和Cr成份的數據比較相對不重要,就可以只取部分數據來處
理。以增加壓縮的比例。JPEG通常有兩種采樣方式:YUV411和YUV422,它們所代
表的意義是Y、Cb和Cr三個成份的數據取樣比例。

2.DCT變換

DCT變換的全稱是離散餘弦變換(Discrete Cosine Transform),是指將一組
光強數據轉換成頻率數據,以便得知強度變化的情形。若對高頻的數據做些修飾,
再轉回原來形式的數據時,顯然與原始數據有些差異,但是人類的眼睛卻是不容
易辨認出來。
壓縮時,將原始圖像數據分成8*8數據單元矩陣,例如亮度值的第一個矩陣內
容如下:

JPEG將整個亮度矩陣與色度Cb矩陣,飽和度Cr矩陣,視為一個基本單元稱作
MCU。每個MCU所包含的矩陣數量不得超過10個。例如,行和列采樣的比例皆為4:
2:2,則每個MCU將包含四個亮度矩陣,一個色度矩陣及一個飽和度矩陣。
當圖像數據分成一個8*8矩陣後,還必須將每個數值減去128,然後一一代入
DCT變換公式中,即可達到DCT變換的目的。圖像數據值必須減去128,是因為DCT
轉換公式所接受的數字范圍是在-128到+127之間。
DCT變換公式:

x,y代表圖像數據矩陣內某個數值的坐標位置
f(x,y)代表圖像數據矩陣內的數個數值
u,v代表DCT變換後矩陣內某個數值的坐標位置
F(u,v)代表DCT變換後矩陣內的某個數值
u=0 且 v=0 c(u)c(v)=1/1.414
u>0 或 v>0 c(u)c(v)=1
經過DCT變換後的矩陣數據自然數為頻率系數,這些系數以F(0,0)的值最
大,稱為DC,其餘的63個頻率系數則多半是一些接近於0的正負浮點數,一概稱
之為AC。
3、量化
圖像數據轉換為頻率系數後,還得接受一項量化程序,才能進入編碼階段。
量化階段需要兩個8*8矩陣數據,一個是專門處理亮度的頻率系數,另一個則是
針對色度的頻率系數,將頻率系數除以量化矩陣的值,取得與商數最近的整數,
即完成量化。
當頻率系數經過量化後,將頻率系數由浮點數轉變為整數,這才便於執行最
後的編碼。不過,經過量化階段後,所有數據只保留整數近似值,也就再度損失
了一些數據內容,JPEG提供的量化表如下:

4、編碼
Huffman編碼無專利權問題,成為JPEG最常用的編碼方式,Huffman編碼通常
是以完整的MCU來進行的。
編碼時,每個矩陣數據的DC值與63個AC值,將分別使用不同的Huffman編碼
表,而亮度與色度也需要不同的Huffman編碼表,所以一共需要四個編碼表,才
能順利地完成JPEG編碼工作。
DC編碼
DC是彩採用差值脈沖編碼調制的差值編碼法,也就是在同一個圖像分量中取
得每個DC值與前一個DC值的差值來編碼。DC採用差值脈沖編碼的主要原因是由於
在連續色調的圖像中,其差值多半比原值小,對差值進行編碼所需的位數,會比
對原值進行編碼所需的位數少許多。例如差值為5,它的二進製表示值為101,如
果差值為-5,則先改為正整數5,再將其二進制轉換成1的補數即可。所謂1的補
數,就是將每個Bit若值為0,便改成1;Bit為1,則變成0。差值5應保留的位數
為3,下表即列出差值所應保留的Bit數與差值內容的對照。

在差值前端另外加入一些差值的霍夫曼碼值,例如亮度差值為5(101)的位
數為3,則霍夫曼碼值應該是100,兩者連接在一起即為100101。下列兩份表格分
別是亮度和色度DC差值的編碼表。根據這兩份表格內容,即可為DC差值加上霍夫
曼碼值,完成DC的編碼工作。

AC編碼
AC編碼方式與DC略有不同,在AC編碼之前,首先得將63個AC值按Zig-zag排
序,即按照下圖箭頭所指示的順序串聯起來。

63個AC值排列好的,將AC系數轉換成中間符號,中間符號表示為RRRR/SSSS,
RRRR是指第非零的AC之前,其值為0的AC個數,SSSS是指AC值所需的位數,AC系
數的范圍與SSSS的對應關系與DC差值Bits數與差值內容對照表相似。
如果連續為0的AC個數大於15,則用15/0來表示連續的16個0,15/0稱為ZRL
(Zero Rum Length),而(0/0)稱為EOB(Enel of Block)用來表示其後所
剩餘的AC系數皆等於0,以中間符號值作為索引值,從相應的AC編碼表中找出適
當的霍夫曼碼值,再與AC值相連即可。
例如某一組亮度的中間符為5/3,AC值為4,首先以5/3為索引值,從亮度AC
的Huffman編碼表中找到1111111110011110霍夫曼碼值,於是加上原來100(4)
即是用來取[5,4]的Huffman編碼1111111110011110100,[5,4]表示AC值為4的
前面有5個零。
由於亮度AC,色度AC霍夫曼編碼表比較長,在此省略去,有興趣者可參閱相
關書籍。
實現上述四個步驟,即完成一幅圖像的JPEG壓縮。

參考資料
[1] 林福宗 《圖像文件格式(上)——Windows 編程》,清華大學出版社,
1996年
[2] 李振輝、李仁各編著,《探索圖像文件的奧秘》,清華大學出版社,1996年
[3] 黎洪松、成實譯《JPEG靜止數據壓縮標准》,學苑出版社,1996年

熱點內容
hw存儲 發布:2025-05-17 00:50:56 瀏覽:345
wifi密碼為什麼顯示不能連接呢 發布:2025-05-17 00:46:45 瀏覽:459
安卓車載軟體哪個好 發布:2025-05-17 00:30:42 瀏覽:497
商城網站免費源碼 發布:2025-05-17 00:13:09 瀏覽:703
制圖什麼配置電腦夠用 發布:2025-05-17 00:12:58 瀏覽:368
安卓root之後怎麼屏蔽彈窗 發布:2025-05-16 23:54:01 瀏覽:978
領克01如何存儲歌曲 發布:2025-05-16 23:53:23 瀏覽:343
新社保初始密碼是多少 發布:2025-05-16 23:53:13 瀏覽:940
安卓手機應用怎麼恢復到桌面 發布:2025-05-16 23:53:09 瀏覽:610
sql替換特殊字元 發布:2025-05-16 23:48:02 瀏覽:805