1. 程式人生 > >有關霍夫曼編碼的兩個習題解答

有關霍夫曼編碼的兩個習題解答

1、利用程式huff_enc和huff_dec進行以下操作(在每種情況下,利用由被壓縮影象生成的碼本)。

(a)對Sena、Sensin和Omaha影象時行編碼。

(b)編寫一段程式,得到相鄰之差,然後利用huffman對差值影象進行編碼。

a)執行結果:


影象壓縮情況如下:

檔名(壓縮前)

大小

檔名(壓縮後)

大小

壓縮比

Sena.img

64kb(65536位元組)

sena.en.img

55kb56623位元組)

1.16:1

Sensin.img

64kb(65536位元組)

sensin.img

59kb60149位元組)

1.09:1

Omaha.img

64kb(65536位元組)

omaha.img

56kb57094位元組)

1.15:1

(b)程式執行結果如下:


差值影象編碼:

檔名(壓縮前)

大小

檔名(壓縮後)

大小

壓縮比

Sena.img

64kb(65536位元組)

cha_sena.img

31kb31685位元組)

2.07:1

Sensin.img

64kb(65536位元組)

cha_sensin.img

37kb37262位元組)

1.76:1

Omaha.img

64kb(65536

位元組)

cha_omaha.img

51kb51564位元組)

1.27:1

從表中可以看出,

(1)採用Huffman編碼對上述影象均可以進行壓縮,同時說明在影象中每個亮度值的概率是不均衡的;

(2)對差分影象再用Huffman編碼,可進一步減小檔案大小,說明影象中相鄰畫素之間存在著很強的相關性。

3、利用程式huff_enc和huff­_dec,並使用Sensin影象生成的碼本,對Bookshelf1和Sena影象進行編碼。對比原碼錶和此碼錶壓縮影象的情況。

程式執行結果如下:



 壓縮情況對比如下:

檔名(壓縮前)

原檔案大小

本碼壓縮大小

檔名(壓縮後)

Sensin碼本壓縮大小

Sena.img

64kb(65536位元組)

55kb56623位元組)

S_sena.img

101kb102972位元組)

bookshelf1.img

64kb(65536位元組)

   59kb (59667位元組)

S_bookshelf.img

90kb91481位元組)

從上述結果可以看出,採用不適當的碼錶進行編碼,可能會造成編碼後的檔案增大,這是因為不同影象的亮度值的概率分佈差別可能很大。

相關推薦

有關編碼習題解答

1、利用程式huff_enc和huff_dec進行以下操作(在每種情況下,利用由被壓縮影象生成的碼本)。 (a)對Sena、Sensin和Omaha影象時行編碼。 (b)編寫一段程式,得到相鄰之差,然後利用huffman對差值影象進行編碼。 (a)執行結果: 影象壓縮情況

編碼

符號 alt 組成 gpo AC width 樹的高度 ace 通信 霍夫曼編碼使用變長編碼表對源符號(如文件中的一個字母)進行編碼,其中變長編碼表是通過一種評估來源符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之後的

編碼(C++ 優先佇列)

霍夫曼編碼 一般採用字首編碼 -- -- 對字符集進行編碼時,要求字符集中任一字元的編碼都不是其它字元的編碼的字首,這種編碼稱為字首(編)碼。 演算法思想: 構造哈夫曼樹非常簡單,將所有的節點放到一個佇列中,用一個節點替換兩個頻率最低的節點,新節點的頻率就是這兩個節點的頻率之和。這

Huffman樹、編碼

Huffman樹指的是帶權路徑長度WPL最小的二叉樹 Huffman編碼實現: package HuffmanTree; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; impo

基於實現編碼的無失真壓縮-C++實現

一、設計任務 1、把任務十中的文字字元轉為國標碼,計算共需要多少位元。 2、用你所學的方法(霍夫曼編碼、遊長編碼或算數編碼)壓縮這些字元,得到的壓縮碼流共計多少位元。說明資料的冗餘度在哪裡。 3、手動

C++實現編碼檔案壓縮解壓

演算法設計與分析作業,程式碼如下: #include <iostream> #include <map> #include <limits.h> #include <iterator> #include &l

樹和編碼

#include <stdio.h> #include <stdlib.h> #include <cstring> using namespace std; typedef struct HuffNode { int weight;

編碼(Huffman Coding)

霍夫曼編碼(Huffman Coding)是一種編碼方法,霍夫曼編碼是可變字長編碼(VLC)的一種。 霍夫曼編碼使用變長編碼表對源符號(如檔案中的一個字母)進行編碼,其中變長編碼表是通過一種評估來源符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則

C++實現編碼

Huffman類宣告與實現: Huffman.h #ifndef HUFFMAN_H #define HUFFMAN_H #include<vector> #include<string> #include<sstream> struct

編碼c++實現

        exit(0);    }    }演算法2:編碼演算法 ////////////////////////////編碼//value 代編碼的權值//tree 霍夫曼樹//code 編碼結果(01串)bool Coding(int value,const BinaryTree<int&g

編碼(Huffman coding)的那些事,(編碼技術介紹和程序實現)

信號 truct 依次 while 交換 需要 .text 示例 system 前言   哈夫曼編碼(Huffman coding)是一種可變長的前綴碼。哈夫曼編碼使用的算法是David A. Huffman還是在MIT的學生時提出的,並且在1952年發表了名為《

編碼解碼 C++實現

錯誤 urn using 過程 簡單 cin n) struct ren 哈夫曼編碼是一個通過哈夫曼樹進行的一種編碼,一般情況下,以字符:‘0’與‘1’表示。編碼的實現過程很簡單,只要實現哈夫曼樹,通過遍歷哈夫曼樹,這裏我們從每一個葉子結點開始向上遍歷,如果該結點為父節點的

編碼

http sdn chm cstring htc 位數 child 個數 ostream 在電文傳輸中,需要將電文中出現的每個字符進行二進制編碼。在設計編碼時需要遵守兩個原則: (1)發送方傳輸的二進制編碼,到接收方解碼後必須具有唯一性,即解碼結果與發送方發送的電文完全一樣

【BZOJ 4198】[Noi2015]荷馬史詩 哈編碼

clu tor space zoj col 具體實現 %d sca bool 合並果子加強版....... 哈夫曼樹是一種特別的貪心算法,它的作用是使若幹個點合並成一棵樹,每次合並新建一個節點連接兩個合並根並形成一個新的根,使葉子節點的權值乘上其到根的路徑長的和最短(等價

轉載:哈樹的構造和哈編碼(C++代碼實現)

作者 pos blank 字符 element start man null == 作者:qiqifanqi 原文:http://blog.csdn.net/qiqifanqi/article/details/6038822 #include<stdio.h>

【視頻編解碼·學習筆記】7. 熵編碼算法:基礎知識 & 哈編碼

html 節點 表示 效率 article tchar vector nod code 一、熵編碼概念: 熵越大越混亂 信息學中的熵: 用於度量消息的平均信息量,和信息的不確定性 越是隨機的、前後不相關的信息,其熵越高 信源編碼定理: 說明了香農熵越信源符號概率之間的

編碼大全

cad 節點 pos ada 哈夫曼 描述 多少 一個數 關於 題目: 哈夫曼編碼大全 描述: 關於哈夫曼樹的建立,編碼,解碼。 輸入 第一行輸入數字N,代表總共有多少個字符以及權值 第二第三行分別是一行字符串,以及每個字符對應的權值 接下來輸入一個數M,表示接下來有M

5.2哈樹——哈樹與哈編碼

node i++ insert 編碼 urn all IV right style #include <stdio.h> #include <stdlib.h> struct TreeNode{ int Weight; Huffm

樹】poj 1339 poker card game

game 霍夫曼樹 printf i++ OS IT amp ostream ++ poj.org/problem?id=1339 #include<iostream> #include<cstdio> #include<string>

word2vec 中的數學原理二 預備知識

append 哈夫曼編碼 har html ant 世界 word2vec tree plus 主要參考: word2vec 中的數學原理詳解 自己動手寫 word2vec 編碼的話,根是不記錄在編碼中的 這一篇主要講的就是