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

編碼演算法

發布時間: 2022-01-08 15:08:37

演算法設計和編碼之間的區別是什麼哪種更難

演算法設計更難,編碼只是根據演算法的偽代碼去實現演算法。需要一些寫代碼的功底。
演算法設計更注重的是想法。基本上演算法設計出來了,寫程序就不難了。
演算法設計的工資比編碼的工資高得多,一個高中生就能編碼了。
在印度,程序員基本上是高中生。而中國的計算機本科生出來基本上做了程序員。

② utf-8編碼轉utf-16編碼的演算法是

比如一個三位元組的UTF8編碼為:
1110ABCD 10EFGHIJ 10KLMNOP
那麼它對應的UTF16編碼就是:
ABCDEFGH IJKLMNOP

其實你的那個例子反著寫就是UTF8變換UTF16的例子:
11100110 10110001 10001001 = E6 B1 89
變換回UTF16就是
01101100 01001001 = 6C 49

③ 有8個待編碼的符號A,B,C,D,E,F,G,H,使用霍夫曼編碼演算法

1、將A到H按其概率的大小,從上到下依次排列寫出。
2、每次都將兩個最小的概率合並成一個概率,然後重新按概率從大到小排列。
例如:第一次需要將H(0.01)和G(0.03)合並,合並後概率為0.04,這時從大到小排列0.04最小,且有兩個0.04,一個為F的概率,一個為H和G合並後的概率。此時,再將兩個0.04合並,重復以上步驟。
3、重復步驟2,直至概率合並為1。
4、將被合並的兩個消息分支分別賦予0和1。
5、從概率為1的一頭向其自身概率一頭讀數。
具體答案:
A 1
B 011
C 010
D 001
E 0001
F 00001
G 000001
H 000000

④ 什麼是視頻編碼的演算法 它有哪幾種典型的演算法 試比較各種典型的視頻編碼演算法。 謝謝了!

1、無聲時代的FLC
FLC、FLI是Autodesk開發的一種視頻格式,僅僅支持256色,但支持色彩抖動技術,因此在很多情況下很真彩視頻區別不是很大,不支持音頻信號,現在看來這種格式已經毫無用處,但在沒有真彩顯卡沒有音效卡的DOS時代確實是最好的也是唯一的選擇。最重要的是,Autodesk的全系列的動畫製作軟體都提供了對這種格式的支持,包括著名的3D Studio X,因此這種格式代表了一個時代的視頻編碼水平。直到今日,仍舊有不少視頻編輯軟體可以讀取和生成這種格式。但畢竟廉頗老矣,這種格式已經被無情的淘汰。

2、載歌載舞的AVI
AVI——Audio Video Interleave,即音頻視頻交叉存取格式。1992年初Microsoft公司推出了AVI技術及其應用軟體VFW(Video for Windows)。在AVI文件中,運動圖像和伴音數據是以交織的方式存儲,並獨立於硬體設備。這種按交替方式組織音頻和視像數據的方式可使得讀取視頻數據流時能更有效地從存儲媒介得到連續的信息。構成一個AVI文件的主要參數包括視像參數、伴音參數和壓縮參數等。AVI文件用的是AVI RIFF形式,AVI RIFF形式由字串「AVI」標識。所有的AVI文件都包括兩個必須的LIST塊。這些塊定義了流和數據流的格式。AVI文件可能還包括一個索引塊。
只要遵循這個標准,任何視頻編碼方案都可以使用在AVI文件中。這意味著AVI有著非常好的擴充性。這個規范由於是由微軟制定,因此微軟全系列的軟體包括編程工具VB、VC都提供了最直接的支持,因此更加奠定了AVI在PC上的視頻霸主地位。由於AVI本身的開放性,獲得了眾多編碼技術研發商的支持,不同的編碼使得AVI不斷被完善,現在幾乎所有運行在PC上的通用視頻編輯系統,都是以支持AVI為主的。AVI的出現宣告了PC上啞片時代的結束,不斷完善的AVI格式代表了多媒體在PC上的興起。
說到AVI就不能不提起英特爾公司的Indeo video系列編碼,Indeo編碼技術是一款用於PC視頻的高性能的、純軟體的視頻壓縮/解壓解決方案。Indeo音頻軟體能提供高質量的壓縮音頻,可用於互聯網、企業內部網和多媒體應用方案等。它既能進行音樂壓縮也能進行聲音壓縮,壓縮比可達8:1而沒有明顯的質量損失。Indeo技術能幫助您構建內容更豐富的多媒體網站。目前被廣泛用於動態效果演示、游戲過場動畫、非線性素材保存等用途,是目前使用最廣泛的一種AVI編碼技術。現在Indeo編碼技術及其相關軟體產品已經被Ligos Technology 公司收購。隨著MPEG的崛起,Indeo面臨著極大的挑戰。

3、容量與質量兼顧的MPEG系列編碼
和AVI相反,MPEG不是簡單的一種文件格式,而是編碼方案。
MPEG-1(標准代號ISO/IEC11172)制定於1991年底,處理的是標准圖像交換格式(standard interchange format,SIF)或者稱為源輸入格式(Source Input Format,SIF)的多媒體流。是針對1.5Mbps以下數據傳輸率的數字存儲媒質運動圖像及其伴音編碼(MPEG-1 Audio,標准代號ISO/IEC 11172-3)的國際標准,伴音標准後來衍生為今天的MP3編碼方案。MPEG-1規范了PAL制(352*288,25幀/S)和NTSC制(為352*240,30幀/S)模式下的流量標准, 提供了相當於家用錄象系統(VHS)的影音質量,此時視頻數據傳輸率被壓縮至1.15Mbps,其視頻壓縮率為26∶1。使用MPEG-1的壓縮演算法,可以把一部120分鍾長的多媒體流壓縮到1.2GB左右大小。常見的VCD就是MPEG-1編碼創造的傑作。MPEG-1編碼也不一定要按PAL/NTSC規范的標准運行,你可以自由設定影像尺寸和音視頻流量。隨著光頭拾取精度的提高,有人把光碟的信息密度加大,並適度降低音頻流流量,於是出現了只要一張光碟就存放一部電影的DVCD。DVCD碟其實是一種沒有行業標准,沒有國家標准,更談不上是國際標準的音像產品。
當VCD開始向市場普及時,電腦正好進入了486時代,當年不少朋友都夢想擁有一塊硬解壓卡,來實現在PC上看VCD的夙願,今天回過頭來看看,覺得真有點不可思議,但當時的現狀就是486的系統不藉助硬解壓是無法流暢播放VCD的,上萬元的486系統都無法流暢播放的MPEG-1被打上了貴族的標志。隨著奔騰的發布,PC開始奔騰起來,直到後來Windows Media Player也直接提供了MPEG-1的支持,至此MPEG-1使用在PC上已經完全無障礙了。
MPEG-2(標准代號IOS/IEC13818)於1994年發布國際標准草案(DIS),在視頻編碼演算法上基本和MPEG-1相同,只是有了一些小小的改良,例如增加隔行掃描電視的編碼。它追求的是大流量下的更高質量的運動圖象及其伴音效果。MPEG-2的視頻質量看齊PAL或NTSC的廣播級質量,事實上MPEG-1也可以做到相似效果,MPEG-2更多的改進來自音頻部分的編碼。目前最常見的MPEG-2相關產品就是DVD了,SVCD也是採用的MPEG-2的編碼。MPEG-2還有一個更重要的用處,就是讓傳統的電視機和電視廣播系統往數碼的方向發展。
MPEG-3最初為HDTV制定,由於MPEG-2的快速發展,MPEG-3還未徹底完成便宣告淘汰。
MPEG-4於1998年公布,和MPEG-2所針對的不同,MPEG-4追求的不是高品質而是高壓縮率以及適用於網路的交互能力。MPEG-4提供了非常驚人的壓縮率,如果以VCD畫質為標准,MPEG-4可以把120分鍾的多媒體流壓縮至300M。MPEG-4標准主要應用於視像電話(Video Phone),視像電子郵件(Video Email)和電子新聞(Electronic News)等,其傳輸速率要求較低,在4800-64000bits/sec之間,解析度為176X144。MPEG-4利用很窄的帶寬,通過幀重建技術,壓縮和傳輸數據,以求以最少的數據獲得最佳的圖象質量。
MJPEG,這並不是專門為PC准備的,而是為專業級甚至廣播級的視頻採集與在設備端回放的准備的,所以MJPEG包含了為傳統模擬電視優化的隔行掃描電視的演算法,如果在PC上播放MJPEG編碼的文件,效果會很難看(如果你的顯卡不支持MJPEG的動態補償),但一旦輸出到電視機端,你立刻會發現這種演算法的好處。

4、屬於網路的流媒體
RealNetworks RealVideo,採用的是 RealNetworks 公司自己開發的 Real G2 Codec,它具有很多先進的設計,例如,SVT (Scalable Video Technology);雙向編碼(Two—Encoding,類似於VBR)。RealMedia 音頻部分採用的是 RealAudio ,可以接納很多音頻編碼方案,可實現聲音在單聲道、立體聲音樂不同速率下的壓縮。最新的RealAudio竟然採用ATRAC3編碼方案,以挑戰日益成熟的MP3。
Windows Media,視頻編碼採用的是非常先進的 MPEG-4 視頻壓縮技術,被稱作 Microsoft MPEG-4 Video Codec,音頻編碼採用的是微軟自行開發的一種編碼方案,目前沒有公布技術資料,在低流量下提供了令人滿意的音質和畫質。最新的Windows Media Encoding Utility V8.0將流技術推向到一個新的高度,我們常見的ASF、WMV、WMA就是微軟的流媒體文件。
事實上我們常見的MPG文件,也具有流媒體的最大特徵——邊讀邊放。

二、常見的編碼與常見的文件格式的對應關系及其常用用途

1、Audodesk FLC
這是一種古老的編碼方案,常見的文件後綴為FLC和FLI。由於FLC僅僅支持256色的調色板,因此它會在編碼過程中盡量使用抖動演算法(也可以設置不抖動),以模擬真彩的效果。這種演算法在色彩值差距不是很大的情況下幾乎可以達到亂真的地步,例如紅色A(R:255,G:0,B:0)到紅色B(R:255,G:128,B:0)之間的抖動。這種格式現在已經很少被採用了,但當年很多這種格式被保留下來,這種格式在保存標准256色調色板或者自定義256色調色板是是無損的,這種格式可以清晰到像素,非常適合保存線框動畫,例如CAD模型演示。現在這種格式很少見了。

2、Microsoft RLE
這是微軟開發為AVI格式開發的一種編碼,文件擴展名為AVI,使用了RLE壓縮演算法,這是一種無損的壓縮演算法,我們常見的tga格式的圖像文件就使用了RLE演算法。
什麼是RLE演算法呢?這是一種很簡單的演算法,舉一個很簡單的例子:
假設一個圖像的像素色彩值是這樣排列的:紅紅紅紅紅紅紅紅紅紅紅紅藍藍藍藍藍藍綠綠綠綠,經過RLE壓縮後就成為了:紅12藍6綠4。這樣既保證了壓縮的可行性,而且不會有損失。而且可以看到,但顏色數越少時,壓縮效率會更高。由於Microsoft RLE僅僅支持256色,而且沒有抖動演算法,在色彩處理方面,FLC明顯的比Microsoft RLE要好很多。當然這也不表示Microsoft RLE一無是處,和FLC一樣,Microsoft RLE在處理相鄰像素時也沒有色染,可以清晰的表現網格。因此同樣可以優秀的表現單色字體和線條。只要色彩不是很復雜,FLC能做的,Microsoft RLE也可以做到。由於AVI可以擁有一個音頻流,而且Windows系統給與了直接的支持,Microsoft RLE最常用的用途是,在256色顯示模式下,通過配合抓屏生成AVI的工具製作一個軟體的操作演示過程,以達到圖文並茂,形聲兼備的效果。

3、Microsoft Video1
這也是由微軟提供的一個AVI編碼,任何Windows系統都自帶了了它的Codec,這個編碼支持真彩,畫面質量很不錯,Microsoft Video1的壓縮效率非常低下,編碼後的文件龐大得讓人受不了。這個Microsoft Video1究竟有什麼用呢?一般被用在保存一些沒有漸變的小型視頻素材方面。

4、Indeo video R3.2
這個編碼由intel架構實驗室開發,對應的文件格式是AVI,相對之前的流行的編碼,Indeo video R3.2最大的特點就是高壓縮比(當然,比起現在的壓縮方案,實在是不值得一提),intel聲稱壓縮比可達8:1而沒有明顯的質量損失,解碼速度也非常快,對系統要求不高,由於Windows9X中自帶Indeo video R3.2的Codec,所以Indeo video R3.2一度成為了最流行的AVI編碼方案。有不少游戲的過場動畫和啟動動畫都是Indeo video R3.2編碼的。Indeo video R3.2同樣不適合高要求的環境,在要表現細線條或大色彩值變化的漸變時,Indeo video R3.2會表現得非常糟糕。如果畫面的色彩值差異不是很大,也沒有明顯的色彩區域界限,Indeo video R3.2還是合適的,例如海天一色的場景。Indeo video R3.2已經基本被淘汰,如果不是為了播放以前遺留的一些Indeo video R3.2編碼視頻,恐怕Windows ME/2000都不會有Indeo video R3.2的Codec了。

5、Indeo video 5.10
這個編碼方案同樣也是intel架構實驗室開發的,它繼承了Indeo video R3.2的優點,對應的文件格式仍然是AVI,解碼速度同樣非常快。Windows ME/2000自帶了Indeo video 5.1的Codec,很多游戲也適用Indeo video 5.10來編碼自己的演示動畫。在沒有DivX普及前,這幾乎是最流行的AVI編碼了,由於微軟和intel的同時支持,這種編碼方案被廣泛採用。

6、None
顧名思義,這是一個沒有損失的視頻編碼方案,對應的文件擴展名為AVI。這種編碼幾乎是不壓縮的,文件大得驚人!那麼這種編碼有什麼用途呢?用途就是保存視頻素材,因為是無損的,保存素材非常合適,代價就是大量的存儲空間。

7、MPEG1
我們熟知的VCD就是MPEG1編碼的,對應的文件擴展名為MPG、MPEG或者DAT。事實上MPEG1可以工作於非PAL制和非NTSC制標准下。它可以自由設置數據流量和畫面尺寸,只是這樣非標準的文件無法直接刻錄成VCD。

8、MPEG2
DVD的視頻部分就是採用的MPEG2,SVCD同樣也採用了MPEG2編碼。對應的文件擴展名一般為VOB、MPG。MPEG2的設計目標就是提供接近廣播級的高品質輸出。

9、DivX
DivX是近2年開始被大家認識的,DivX 視頻編碼技術可以說是一種對 DVD 造成威脅的新生視頻壓縮格式(有人說它是 DVD 殺手)對應的文件擴展名為AVI或者DivX,它由 Microsoft mpeg-4v3 修改而來,使用 MPEG-4 壓縮演算法。據說是美國禁止出口的編碼技術。DivX最大的特點就是高壓縮比和不錯的畫質,更可貴的是,DivX的對系統要求也不高,只要主頻300的CPU就基本可以很流暢的播放了,因此從DivX誕生起,立刻吸引了大家的注意力。DivX擁有比Indeo video 5.10高太多的壓縮效率,編碼質量也遠遠比Indeo video 5.10好,我實在想不出Indeo video 5.10還會有什麼前途。

10、PICVideo MJPEG
MJPEG是很多視頻卡支持的一種視頻編碼,隨卡提供了Codec,安裝完成後可以象使用其它編碼一樣生成AVI文件。MJPEG編碼常用於非線性系統,批上了一層很專業的外衣。MJPEG的編碼質量是相當高的,是一種以質量為最高要求的編碼,這種編碼的設置比較復雜,可以得到很高的壓縮比,但犧牲了解碼速度,如果要保證解碼速度,編碼後的壓縮比確不是很理想,如果您希望從專業的非線性系統上捕捉視頻,然後自行進行處理,這種格式是很有必要去了解一些的。

11、RealNetworks RealVideo
REAL VIDEO(RA、RAM)格式由Real Networks公司開發的,一開始就定位在視頻流應用方面的,也可以說是視頻流技術的始創者。它可以在用 56K MODEM 撥號上網的條件實現不間斷的視頻播放。從RealVideo的定位來看,就是犧牲畫面質量來換取可連續觀看性。其實RealVideo也可以實現不錯的畫面質量,由於RealVideo可以擁有非常高的壓縮效率,很多人把VCD編碼成RealVideo格式的,這樣一來,一張光碟上可以存放好幾部電影。REAL VIDEO存在顏色還原不準確的問題,RealVideo就不太適合專業的場合,但RealVideo出色的壓縮效率和支持流式播放的特徵,使得RealVideo在網路和娛樂場合佔有不錯的市場份額。

12、Windows Media video
Windows Media video就是微軟為了和現在的Real Networks的RealVideo競爭而發展出來的一種可以直接在網上觀看視頻節目的文件壓縮格式!由於它使用了MPEG4的壓縮演算法,所以壓縮率和圖像的質量都很不錯。我們經常看到的ASF和WMV就是Windows Media video。Windows Media video的編碼質量明顯好於RealVideo,因為Windows Media video是微軟的傑作,所以Windows系統給Windows Media video給與了很好的支持,Windows Media Player可以直接播放這些文件。

各種主流音頻編碼(或格式)的介紹

1、PCM編碼
PCM 脈沖編碼調制是Pulse Code Molation的縮寫。前面的文字我們提到了PCM大致的工作流程,我們不需要關心PCM最終編碼採用的是什麼計算方式,我們只需要知道PCM編碼的音頻流的優點和缺點就可以了。PCM編碼的最大的優點就是音質好,最大的缺點就是體積大。我們常見的Audio CD就採用了PCM編碼,一張光碟的容量只能容納72分鍾的音樂信息。

2、WAVE
這是一種古老的音頻文件格式,由微軟開發。WAV是一種文件格式,符合 PIFF Resource Interchange File Format規范。所有的WAV都有一個文件頭,這個文件頭音頻流的編碼參數。WAV對音頻流的編碼沒有硬性規定,除了PCM之外,還有幾乎所有支持ACM規范的編碼都可以為WAV的音頻流進行編碼。很多朋友沒有這個概念,我們拿AVI做個示範,因為AVI和WAV在文件結構上是非常相似的,不過AVI多了一個視頻流而已。我們接觸到的AVI有很多種,因此我們經常需要安裝一些Decode才能觀看一些AVI,我們接觸到比較多的DivX就是一種視頻編碼,AVI可以採用DivX編碼來壓縮視頻流,當然也可以使用其他的編碼壓縮。同樣,WAV也可以使用多種音頻編碼來壓縮其音頻流,不過我們常見的都是音頻流被PCM編碼處理的WAV,但這不表示WAV只能使用PCM編碼,MP3編碼同樣也可以運用在WAV中,和AVI一樣,只要安裝好了相應的Decode,就可以欣賞這些WAV了。
在Windows平台下,基於PCM編碼的WAV是被支持得最好的音頻格式,所有音頻軟體都能完美支持,由於本身可以達到較高的音質的要求,因此,WAV也是音樂編輯創作的首選格式,適合保存音樂素材。因此,基於PCM編碼的WAV被作為了一種中介的格式,常常使用在其他編碼的相互轉換之中,例如MP3轉換成WMA。

3、 MP3編碼
請參閱 MP3全攻略 一文

4、OGG編碼
網路上出現了一種叫Ogg Vorbis的音頻編碼,號稱MP3殺手!Ogg Vorbis究竟什麼來頭呢?OGG是一個龐大的多媒體開發計劃的項目名稱,將涉及視頻音頻等方面的編碼開發。整個OGG項目計劃的目的就是向任何人提供完全免費多媒體編碼方案!OGG的信念就是:OPEN!FREE!Vorbis這個詞彙是特里·普拉特柴特的幻想小說《Small Gods》中的一個"花花公子"人物名。這個詞彙成為了OGG項目中音頻編碼的正式命名。目前Vorbis已經開發成功,並且開發出了編碼器。
Ogg Vorbis是高質量的音頻編碼方案,官方數據顯示:Ogg Vorbis可以在相對較低的數據速率下實現比MP3更好的音質!Ogg Vorbis這種編碼也遠比90年代開發成功的MP3先進,她可以支持多聲道,這意味著什麼?這意味著Ogg Vorbis在SACD、DTSCD、DVD AUDIO抓軌軟體(目前這種軟體還沒有)的支持下,可以對所有的聲道進行編碼,而不是MP3隻能編碼2個聲道。多聲道音樂的興起,給音樂欣賞帶來了革命性的變化,尤其在欣賞交響時,會帶來更多臨場感。這場革命性的變化是MP3無法適應的。
和MP3一樣,Ogg Vorbis是一種靈活開放的音頻編碼,能夠在編碼方案已經固定下來後還能對音質進行明顯的調節和新演算法的改良。因此,它的聲音質量將會越來越好,和MP3相似,Ogg Vorbis更像一個音頻編碼框架,可以不斷導入新技術逐步完善。和MP3一樣,OGG也支持VBR。

5、MPC 編碼
MPC是又是另外一個令人刮目相看的實力派選手,它的普及過程非常低調,也沒有什麼復雜的背景故事,她的出現目的就只有一個,更小的體積更好的音質!MPC以前被稱作MP+,很顯然,可以看出她針對的競爭對手是誰。但是,只要用過這種編碼的人都會有個深刻的印象,就是她出眾的音質。

6、mp3PRO 編碼
2001年6月14日,美國湯姆森多媒體公司(Thomson Multimedia SA)與佛朗赫弗協會(Fraunhofer Institute)於6月14日發布了一種新的音樂格式版本,名稱為mp3PRO,這是一種基於mp3編碼技術的改良方案,從官方公布的特徵看來確實相當吸引人。從各方面的資料顯示,mp3PRO並不是一種全新的格式,完全是基於傳統mp3編碼技術的一種改良,本身最大的技術亮點就在於SBR(Spectral Band Replication 頻段復制),這是一種新的音頻編碼增強演算法。它提供了改善低位率情況下音頻和語音編碼的性能的可能。這種方法可在指定的位率下增加音頻的帶寬或改善編碼效率。SBR最大的優勢就是在低數據速率下實現非常高效的編碼,與傳統的編碼技術不同的是,SBR更像是一種後處理技術,因此解碼器的演算法的優劣直接影響到音質的好壞。高頻實際上是由解碼器(播放器)產生的,SBR編碼的數據更像是一種產生高頻的命令集,或者稱為指導性的信號源,這有點駇idi的工作方式。我們可以看到,mp3PRO其實是一種mp3信號流和SBR信號流的混合數據流編碼。有關資料顯示,SBR技術可以改善低數據流量下的高頻音質,改善程度約為30%,我們不管這個30%是如何得來的,但可以事先預知這種改善可以讓64kbps的mp3達到128kbps的mp3的音質水平(註:在相同的編碼條件下,數據速率的提升和音質的提升不是成正比的,至少人耳聽覺上是這樣的),這和官方聲稱的64kbps的mp3PRO可以媲美128kbps的mp3的宣傳基本是吻合的。

7、WMA
WMA就是Windows Media Audio編碼後的文件格式,由微軟開發,WMA針對的不是單機市場,是網路!競爭對手就是網路媒體市場中著名的Real Networks。微軟聲稱,在只有64kbps的碼率情況下,WMA可以達到接近CD的音質。和以往的編碼不同,WMA支持防復制功能,她支持通過Windows Media Rights Manager 加入保護,可以限制播放時間和播放次數甚至於播放的機器等等。WMA支持流技術,即一邊讀一邊播放,因此WMA可以很輕松的實現在線廣播,由於是微軟的傑作,因此,微軟在Windows中加入了對WMA的支持,WMA有著優秀的技術特徵,在微軟的大力推廣下,這種格式被越來越多的人所接受。

8、RA
RA就是RealAudio格式,這是各位網蟲接觸得非常多的一種格式,大部分音樂網站的在線試聽都是採用了RealAudio,這種格式完全針對的就是網路上的媒體市場,支持非常豐富的功能。最大的閃爍點就是這種格式可以根據聽眾的帶寬來控制自己的碼率,在保證流暢的前提下盡可能提高音質。RA可以支持多種音頻編碼,包括ATRAC3。和WMA一樣,RA不但都支持邊讀邊放,也同樣支持使用特殊協議來隱匿文件的真實網路地址,從而實現只在線播放而不提供下載的欣賞方式。這對唱片公司和唱片銷售公司很重要,在各方的大力推廣下,RA和WMA是目前互聯網上,用於在線試聽最多的音頻媒體格.

⑤ 有誰知道,JPEG壓縮編碼演算法的主要步驟

JPEG壓縮編碼演算法的主要計算步驟如下:

1.正向離散餘弦變換(FDCT)。

2.量化(quantization)。

3.Z字形編碼(zigzag scan)。

4.使用差分脈沖編碼調制(differential pulse code molation,DPCM)對直流系數(DC)進行編碼。

5.使用行程長度編碼(run-length encoding,RLE)對交流系數(AC)進行編碼。

6.熵編碼(entropy coding)。

2. 量化

量化是對經過FDCT變換後的頻率系數進行量化。量化的目的是減小非「0」系數的幅度以及增加「0」值系數的數目。量化是圖像質量下降的最主要原因。

對於有損壓縮演算法,JPEG演算法使用均勻量化器進行量化,量化步距是按照系數所在的位置和每種顏色分量的色調值來確定。因為人眼對亮度信號比對色差信號更敏感,因此使用了兩種量化表:亮度量化值和色差量化值。此外,由於人眼對低頻分量的圖像比對高頻分量的圖像更敏感,因此圖中的左上角的量化步距要比右下角的量化步距小。

3. Z字形編排

量化後的系數要重新編排,目的是為了增加連續的「0」系數的個數,就是「0」的遊程長度,方法是按照Z字形的式樣編排,如圖5-17所示。這樣就把一個8 ? 8的矩陣變成一個1 ? 64的矢量,頻率較低的系數放在矢量的頂部。

4. 直流系數的編碼

8 ? 8圖像塊經過DCT變換之後得到的DC直流系數有兩個特點,一是系數的數值比較大,二是相鄰8 ? 8圖像塊的DC系數值變化不大。根據這個特點,JPEG演算法使用了差分脈沖調制編碼(DPCM)技術,對相鄰圖像塊之間量化DC系數的差值(Delta)進行編碼,

Delta=DC(0, 0)k-DC(0, 0)k-1 ........ (5-5)

5. 交流系數的編碼

量化AC系數的特點是1 ? 64矢量中包含有許多「0」系數,並且許多「0」是連續的,因此使用非常簡單和直觀的遊程長度編碼(RLE)對它們進行編碼。

JPEG使用了1個位元組的高4位來表示連續「0」的個數,而使用它的低4位來表示編碼下一個非「0」系數所需要的位數,跟在它後面的是量化AC系數的數值。

6. 熵編碼

使用熵編碼還可以對DPCM編碼後的直流DC系數和RLE編碼後的交流AC系數作進一步的壓縮。

在JPEG有損壓縮演算法中,使用霍夫曼編碼器來減少熵。使用霍夫曼編碼器的理由是可以使用很簡單的查表(lookup table)方法進行編碼。壓縮數據符號時,霍夫曼編碼器對出現頻度比較高的符號分配比較短的代碼,而對出現頻度較低的符號分配比較長的代碼。這種可變長度的霍夫曼碼表可以事先進行定義。

⑥ 詞典編碼的演算法舉例

C語言
//編碼
# include<stdio.h>
# include<string.h>
//拷貝字元串
void 1(char *prefix,char *s,int i,int j)
{
int k;
for(k=0;k<20;k++)
prefix[k]='';
for(k=i;k<i+j;k++)
prefix[k-i]=s[k];
}
void main ()
{
char s[30],prefix[30],dic[20][30]={,A,B,C};
int i,j,k,m,n;
i=0;j=1;k=4;m=0;
printf(please input string : );
gets(s);
while(i<strlen(s))
{
1(prefix,s,i,j);
for(n=1;n<k;n++)
{
if(strcmp(prefix,dic[n])==0)
{
j=j+1;
m=n;
if((i+j)<=strlen(s))
1(prefix,s,i,j);
else
{
strcpy(prefix, );
}
}
}
printf(%d ,m);
if(strlen(prefix)!=0)
{
strcpy(dic[k],prefix);
printf(%s ,dic[k]);
}
k=k+1;
i=i+j-1;
j=1;
}
}
//解碼
# include<stdio.h>
# include<string.h>
# define N 20 // The max string length
# define M 20 //The max codestream number in the dictionary
# define L 20
struct wordstream
{
char w[N];
}word[L];
void main()
{
int code[M];//存貯碼字流
//int code[]={1,2,3,4,7,3};
int i,k,t;
int j;//詞典中綴符串
int cW;//當前碼字
int pW;//先前碼字
unsigned char C;//當前字元
char p[20];//綴-符串
word[1].w[0]='A';//輸入詞典的初始化
word[2].w[0]='B';
word[3].w[0]='C';
j=4;
//輸出需要解碼的碼字流
printf( Please input the codestream number:);
scanf(%d,&k);
printf( Please input the codestream number:);
for(i=0;i<k;i++)
scanf(%d,(code+i));
cW=code[0];
printf( output the wordstream:%s,word[cW].w);
pW=cW;
for(i=1;i<k;i++)
{
cW=code[i];
if(cW<j)
{
printf( output the wordstream:%s,word[cW].w);//輸出到字元流
C=word[cW].w[0];
strcpy(p,(const char *)word[pW].w);
t=strlen((const char *)p);
p[t]=C;
p[t+1]='';
strcpy(word[j].w,(const char*)p);
j=j+1;
pW=cW;
}
else
{
strcpy(p,(const char *)word[pW].w);
C=word[pW].w[0];
t=strlen((const char *)p);
p[t]=C;
p[t+1]='';
strcpy(word[j].w,(const char *)p);
printf( output the wordstream: %s,p);
j=j+1;
pW=cW;
}
}
for(i=1;i<j;i++)
printf( The dictionary is %s,word[i].w);
printf( this is over );
}

⑦ slnr預編碼演算法中slnr什麼意思

為了消除或降低多用戶MIMO系統下行鏈路存在的共信道干擾( CCI),提出一種結合功率分配的基於最大化信漏噪比( SLNR)的預編碼演算法。首先,根據SLNR演算法求出最優預編碼矩陣,再結合最優功率分配演算法,藉助拉格朗日乘數法,優化分配每個用戶的發送功率,從而提 高系統和容量以及降低誤碼率( BER)性能。為了簡化計算復雜度,還提出了SLNR演算法結合次優化功率分配演算法。模擬表明,所提出的演算法比塊對角化( BD)演算法和最小均方誤差准則( MMSE)演算法在系統和容量以及誤碼率性能上都有所改善。

⑧ 詞典編碼的演算法步驟

步驟一:開始的時候詞典包含所有可能的單字元,而當前前綴P是空的。
步驟二:當前字元C:=字元流中的下一個字元。
步驟三:判斷P+C是否在詞典中。
如果是,則用C擴展P,即P=P+C
如果否,則
①輸出代表當前前綴P的碼字
②將前綴-字元串P+C添加到字典中
③令P:=C
步驟四:判斷字元流中是否還有字元需要編碼。
如果是,則返回到步驟二
如果不是,輸出代表當前前綴P的碼字,並結束 步驟一:在開始解碼時詞典包含所有可能的前綴根。
步驟二:cW:=碼字流中的第一個碼字。
步驟三:輸出當前綴符串string.cW到字元流。
步驟四:先前碼字pW:=當前碼字cW.
步驟五:當前碼字cW:=碼字流中的下一個碼字。
步驟六:判斷先前綴符串是否在詞典中。
如果「是」,則:1把當前綴符串string.cW輸出到字元流;2當前前綴p:=先前綴符串pW;3當前前綴符串string.cW的第一個字元;4把綴符串P+C添加到詞典中。
如果「否」,則:1當前前綴p:=先前綴符串pW;2當前字元C:=當前綴符串pW的第一個字元;3輸出綴符串P+C到字元流,然後把它添加到詞典中。
步驟七:判斷碼字流中是否還有碼字要譯。
如果「是」,就返回到步驟4,如果「否」,結束。

⑨ 請教算術編碼的演算法

h = StartC + g* K;
l = Endc + g* K1;
其具體程序如下:

const Ca = 0.2; Ce = 0.3;
Ci = 0.2; Co = 0.2;
Cu = 0.1;
var
Form1: TForm1;
s: string;
StartC, EndC: Extended;
implementation
{$R *.dfm}
procere ConvertTo(s: string; var StartC, EndC: Extended);{將字元串變為數值}
var n, i: integer;
c: char;
g: Extended;
begin
StartC := 0;
EndC := 1;
n := Strlen(Pchar(s));
for i := 1 to n do
begin
c := s[i];
g := EndC - StartC;
case C of
'a':
begin
EndC :=StartC + g * Ca;
StartC := StartC + g * 0;
end;
'e':
begin
EndC := StartC + g * (Ca + Ce);
StartC := StartC + g * Ca;
end;
'i':
begin
EndC := StartC + g * (Ca + Ce + Ci);
StartC := StartC + g * (Ca + Ce);
end;
'o':
begin
EndC := StartC + g * (Ca + Ce + Ci + Co);
StartC := StartC + g * (Ca + Ce + Ci);
end;
'u':
begin
EndC := StartC + g * (Ca + Ce + Ci + Co + Cu);
StartC := StartC + g * (Ca + Ce + Ci + Co);
end;
else
begin
Showmessage(' 輸入的字元串有誤 ');
exit;
end;
end;
end;
end;
procere NemuricalToStr(var s: String; var StartC, EndC: Extended);
{將數值轉換為字元串}
const eps = -1e-5;
begin
if StartC-0.2 < -eps then
if (EndC- 0.2<= -eps) and (EndC > StartC) then
begin
StartC := StartC / 0.2;
EndC := EndC / 0.2;
s := s + 'a';
if (StartC <>0) or (EndC <> 1) then
NemuricaltoStr(s,StartC,EndC);
end;
if (StartC- 0.2 >= eps) and (StartC-0.5 < -eps) then
if (EndC-0.5<= -eps) and (EndC>StartC) then
begin
StartC := StartC - 0.2;
EndC := EndC - 0.2;
StartC := StartC / 0.3;
EndC := EndC / 0.3;
s := s + 'e';
if (StartC <>0) or (EndC <> 1) then
NemuricaltoStr(s,StartC,EndC);
end ;
if (StartC- 0.5>= eps) and (StartC- 0.7< -eps) then
if (EndC-0.7<= -eps) and (EndC>StartC) then
begin
StartC := StartC - 0.5;
EndC := EndC - 0.5;
StartC := StartC / 0.2;
EndC := EndC / 0.2;
s := s + 'i';
if (StartC <>0) or (EndC <> 1) then
NemuricaltoStr(s,StartC,EndC);
end ;
if (StartC-0.7 >= eps) and (StartC-0.9 < -eps) then
if (EndC-0.9<=-eps) and (EndC>StartC) then
begin
StartC := StartC - 0.7;
EndC := EndC - 0.7;
StartC := StartC / 0.2;
EndC := EndC / 0.2;
s := s + 'o';
if (StartC <>0) or (EndC <> 1) then
NemuricaltoStr(s,StartC,EndC);
end ;
if (StartC -0.9>=eps) and (StartC-1 < -eps) then
if (EndC-1<= -eps) and (EndC>StartC) then
begin
StartC := StartC - 0.9;
EndC := EndC - 0.9;
StartC := StartC / 0.1;
EndC := EndC / 0.1;
s := s + 'u';
if (StartC <>0) or (EndC <> 1) then
NemuricaltoStr(s,StartC,EndC);
end;
end;
procere TForm1.Button1Click(Sender: TObject);
begin
s := Edit1.Text;
ConvertTo(s,StartC,EndC);
Edit2.Text := FloattoStr(StartC);
Edit3.Text := FloattoStr(EndC);
end;
procere TForm1.Button2Click(Sender: TObject);
begin
s := '';
StartC := StrToFloat(Edit2.Text);
EndC := StrtoFloat(Edit3.Text);
NemuricalToStr(s,StartC,Endc);
Edit1.Text := s;
end;
end.

⑩ 簡述無損預測編碼演算法的基本思想(編碼和解碼)

壓縮後的圖像數據與原來的圖像數據進行比較,沒有一定的差別。這個系統有一個解碼器和一個編碼器組成,每部分都包含一個相同的預測器。由於輸入圖像的連續像素都要送入編碼器,所以預測器能夠根據以往的一些輸入生成輸入像素的預期值。因為通過預測和差分處理消除了大量像素間冗餘,所以預測誤差的概率密度函數通常在零處有一個很高的峰,並表現出變化相對較小的特徵。

熱點內容
單片機android 發布:2024-09-20 09:07:24 瀏覽:764
如何提高三星a7安卓版本 發布:2024-09-20 08:42:35 瀏覽:663
如何更換伺服器網站 發布:2024-09-20 08:42:34 瀏覽:310
子彈演算法 發布:2024-09-20 08:41:55 瀏覽:288
手機版網易我的世界伺服器推薦 發布:2024-09-20 08:41:52 瀏覽:816
安卓x7怎麼邊打游戲邊看視頻 發布:2024-09-20 08:41:52 瀏覽:161
sql資料庫安全 發布:2024-09-20 08:31:32 瀏覽:93
蘋果連接id伺服器出錯是怎麼回事 發布:2024-09-20 08:01:07 瀏覽:506
編程鍵是什麼 發布:2024-09-20 07:52:47 瀏覽:657
學考密碼重置要求的證件是什麼 發布:2024-09-20 07:19:46 瀏覽:480