先上一張當前openni壓縮模組的類圖。
如上類圖,xncodec類是編譯碼的虛基類。裡面最重要的兩個純虛函式是compress(壓縮),decompress(解壓縮)。xncodecbase類是繼承xncodec類的虛基類,其以模板函式的方法實現了xncodec類的兩個純虛函式compress和decompress。並且在實現過程中引入了另外兩個xncodecbase類的純虛函式,compressimpl及decompressimpl。具體的壓縮演算法虛繼承xncodecbase類,並且實現compressimpl及decompressimpl方法。如上類圖中最下面的五個類xnuncompressedcodec, xn16zembtablescodec,xnjpegcodec, xn8zcodec及xn16zcodec
類是實現了五個具體壓縮演算法的派生類。xnuncompressedcodec表示不進行壓縮,xn16zembtablescodec當前用來對深度圖進行壓縮,xnjpegcodec類底層呼叫了libjpeg這個庫,用來對rgb影象進行壓縮。剩下的xn8zcodec類與xn16zcodec類,當前openni master分支中沒有使用。如何指定什麼格式的影象使用什麼壓縮演算法?openni原始碼中有乙個filerecorder類,該類有乙個filerecorder::onattach(xnuint32 nodeid, videostream* pstream)方法,可以在該方法中指定針對不同的pixel format:如下
typedef enum
onipixelformat;
使用不同的壓縮演算法進行處理,如果需要對oni_pixel_format_gray16 16位ir圖進行處理,則只需要給oni_pixel_format_gray16格式指定乙個編譯碼的類就可以了。經過測試xn16zcodec可以用來對16位的ir影象進行壓縮,解壓縮,但是壓縮率不是很高,大概40%左右。如果想使用新的定製的編譯碼類對影象進行壓縮,解壓縮的處理,則可以xndodecbase類派生出新的類。比如這次對16位ir影象進行壓縮的過程中,就從xndodecbase類派生出乙個類xnjpeg16ircodec,該類在編譯碼的過程中使用了libjpeg,壓縮率可以通過調節控制在百分之幾到百分之十幾之間。
《壓縮》的總結
哈夫曼壓縮 1 讀取檔案,並統計檔案中各字元出現的次數,儲存到乙個陣列中,陣列長度為256,然後每個索引都代表字元的ascii碼所代表的值,每當多乙個,就在這個索引下的值加一。如下 public void output 關閉流 bs.close is.close catch filenotfound...
VBScript中的LZW壓縮演算法
介紹本文向您展示如何在vbscript中實現lzw無失真壓縮演算法。它也可以按原樣或幾乎按原樣在vba中使用。lzw演算法lzw演算法是一種壓縮技術,不會造成資料丟失。它構建了動態壓縮中使用的 和值的字典。字典不與壓縮檔案一起儲存,並且在壓縮後將其丟棄。在解壓縮期間,將從壓縮的資料重建字典。lzw演...
lzw壓縮演算法 VBScript中的LZW壓縮演算法
lzw壓縮演算法 介紹本文向您展示如何在vbscript中實現lzw無失真壓縮演算法。它也可以按原樣或幾乎按原樣在vba中使用。lzw演算法lzw演算法是一種壓縮技術,不會導致資料丟失。它構建了動態壓縮中使用的 和值的字典。該詞典不與壓縮檔案一起儲存,並且在壓縮後將被丟棄。在解壓縮期間,將從壓縮的資...