簡體   English   中英

在算術代碼算法,C ++中以有效的方式選擇符號

[英]Choosing Symbols in an efficient way, in Arithmetic Code Algorithm, C++

我正在嘗試實現算術代碼算法來壓縮二進制圖像(JPG圖像使用opencv轉換為二進制庫)。 問題是我要保存在壓縮文件,編碼字符串和我用來生成這個編碼字符串的符號以及它們的頻率,所以我能夠解碼它。 即使我將它們轉換為ascii,符號也會占用大量空間,如果我嘗試為每個符號使用較少數量的字符,則編碼字符串的大小會變大。 所以我想知道是否有一種有效的方法來保存壓縮文件中的符號,並盡可能減小尺寸。 我想知道從原始文件中選擇符號的最有效方法。 提前致謝 :)

325,592,005字節是310兆字節。 您設法將此圖像壓縮為2.8 + 6.1 = 8.9兆字節,因此您將大小減小了97%。 這是一個很好的結果,我不會在這擔心。 除了6.1兆字節的64位長符號意味着你有大約800K的符號。 它遠遠小於可能符號的最大可能數量,即2 ^ 64-1。這又是一個好結果。

關於使用多種壓縮算法的問題。 首先,您必須知道在無松動壓縮的情況下,每個符號的最佳比特數等於熵。 並且算術編碼接近最佳(參見本文 )。 這意味着如果其中一個是算術編碼,則一個接一個地使用多於1個算法沒有多大意義。

至於算術編碼與霍夫曼碼。 后者實際上是前者的特例。 據我所知,算術編碼總是至少和霍夫曼碼一樣好。

值得添加一件事。 如果你可以考慮有損壓縮,那么壓縮率實際上沒有限制。 或者換句話說,只要質量損失仍然可以接受,您就可以根據需要壓縮數據。 但是,即使在這種情況下,也不需要使用多個壓縮算法。 一個就夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM