日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字图像处理实验6图像编码

發布時間:2024/7/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字图像处理实验6图像编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、實驗目的

(1)了解圖像編碼的目的及意義,加深對圖像編碼的感性認識。

(2)熟練掌握哈夫曼編碼的實現與應用。

(3)掌握行程長度編碼的實現與應用,尤其是BMP和PCX文件的行程長度編碼*。

二、實驗內容

(1)選擇圖像,對其進行哈夫曼編碼,總結哈夫曼編碼的壓縮思想。

(2)選擇圖像,對其進行行程編碼,觀察將圖像保存為PCX文件后,圖像占用空間的變化,并總結PCX的編碼特點*三、實驗代碼及結果、分析

三、實驗原理、代碼、結果、分析

(1)哈夫曼編碼

  • 原理:η

哈夫曼編碼是一種無損編碼,依據信源符號出現的概率來構造其碼字,對出現概率大的字符使用較短的碼字,對出現概率低的字符則使用較長的碼字,從而達到壓縮數據的目的,哈夫曼編碼又稱為最佳編碼。

編碼的基本步驟:

  • 統計信源字符中各符號出現的概率,將各字符出現的概率由大到小的順序排列;
  • 將最小的兩個概率相加,合并成新的概率,與其他概率重新按由大到小的順序排列;
  • 重新排列后將兩個最小概率合并相加合并為新的概率,即重復步驟b),直到最后兩個概率之和為1;
  • 將每個相加的組合中,概率大的指定為0,概率小的指定為1,相等則任意指定
  • 找出由每一個信源字符到達概率為1.0處的路徑,順序記錄路徑的每一個1和0的數字編碼
  • 反向寫出編碼,即為該信源字符的哈夫曼編碼
    • 代碼:

    HuffmanCode.m:

    I=imread('lena.jpg');

    Gray=rgb2gray(I);

    [zipped,info]=huffencode(Gray);%調用哈夫曼編碼程序進行壓縮

    unzipped=huffdecode(zipped,info);%調用哈夫曼解碼程序進行解碼

    disp('平均碼長');L=info.avalen

    disp('壓縮比');CR=info.ratio

    disp('信息熵');H=info.h

    disp('編碼效率');CE=info.ce

    subplot(131);imshow(Source);title('原始圖像');

    subplot(132);imshow(Gray);title('灰度圖像');

    subplot(133);imshow(unzipped);title('哈夫曼編碼并解碼重構圖像');

    huffencode.m與huffdecode.m實際代碼展示一部分:

    info.zeropad=zp;%添加的比特數

    info.huffcodes=huffcodes;

    info.length=length(vector);%灰度圖矩陣長度

    info.rows=m;

    info.cols=n;

    info.avalen=avawordlen;%平均碼長

    info.ratio=8/avawordlen;%壓縮比

    info.h=H;

    info.ce=H/avawordlen;%編碼效率

    • 結果:

    平均碼長L = 7.4626

    壓縮比CR =1.0720

    信息熵H =7.4384

    編碼效率CE =0.9968

    • 分析:

    1、哈夫曼編碼是無失真編碼,則原始矩陣與解碼之后的矩陣相同

    ?

    ?

  • 哈夫曼編碼的效率的計算公式:
    • 3、當圖像灰度值分布不均勻時,哈夫曼編碼效率比較高,如該題中,編碼效率達到的99.7%

    4、哈夫曼編碼方法對圖像數據進行編碼時,須兩次讀取圖像數據,第一次是為了計算每個數據出現的概率,并對各數據進行排序,第二次讀取數據轉換表格中的編碼值代替圖像數據存入圖像編碼文件中

    (2)行程編碼

    • 原理:

    僅存儲一個像素值以及具有相同顏色的像素數目的圖象數據編碼方式稱為行程編碼,或稱游程編碼,常用RLE(Run-Length Encoding)表示,是一種統計編碼,該編碼屬于無損壓縮編碼,對于二值圖有效。在此方式下每兩個字節組成一個信息單元。第一個字節給出其后面相連的象素的個數,第二個字節給出這些象素使用的顏色索引表中的索引。游程編碼所能獲得的壓縮比有多大,主要取決于圖像本身的特點。如果圖像中具有相同顏色的圖像塊越大,圖像塊數目越少,獲得的壓縮比就越高。反之,壓縮比就越小

    • 代碼:

    clc;clear('all');close all;

    Source=imread('lena.png'); %讀入圖像 ?

    Gray=rgb2gray(Source);

    %以下程序為對原圖像進行行程編碼,壓縮 ?

    Gray_Linear=Gray(:); ?

    Gray_Length=length(Gray_Linear); ?

    j=1; ?index(1)=1; ?

    for z=1:1:(length(Gray_Linear)-1) %行程編碼程序段 ?

    ????if Gray_Linear(z)==Gray_Linear(z+1); ?

    ????????index(j)=index(j)+1; ?

    ????else ?

    ????????Encode(j)=Gray_Linear(z);

    ????????j=j+1; ?

    ????????index(j)=1;

    ????end ?

    end

    Encode(j)=Gray_Linear(length(Gray_Linear)); ??%最后一個像素數據

    index=uint8(index);

    k=1;

    for i=1:1:j

    ????if index(i)==1

    ????????Encode_hex(k)=Encode(i);???% 十六進制的次數或者灰度值

    ????????k=k+1;

    ????else

    ????????Encode_hex(k)=192+index(i);

    ????????k=k+1;

    ????????Encode_hex(k)=Encode(i);

    ????????k=k+1;

    ????end

    end

    Encode_hex=dec2hex(Encode_hex);

    Encode_hex_Length=size(Encode_hex,1);%計算行程編碼后的所占字節數,Encode_hex_Length

    index_Lenght=length(index); ?

    CR=Gray_Length/Encode_hex_Length; ??%比較壓縮前與壓縮后的大小 ?

    %行程編碼解碼 ?

    l=1; ?

    for m=1:index_Lenght ?

    ????for n=1:1:index(m) ?

    ????????Decode_temp(l)=Encode(m);

    ????????l=l+1; ?

    ????end ?

    end ?

    Decode=reshape(Decode_temp,500,500); ???%重建二位圖像數組 ?

    figure(1);

    subplot(121);imshow(Gray);title('原始灰度圖'); ???%顯示原圖的二值圖像 ?

    subplot(122);imshow(Decode);title('解壓縮恢復后的圖像'); ?%顯示解壓縮恢復后的圖像 ?

    disp('壓縮比:'); ?

    disp(CR); ?

    disp('原圖像數據的長度:'); ?

    disp(Gray_Length); ?

    disp('壓縮后圖像數據的長度'); ?

    disp(Encode_hex_Length); ?

    disp('解壓縮后的數據長度'); ?

    disp(length(Decode_temp));

    • 結果:

    ? ? ? ??

    ?

    原圖像數據的長度:250000

    壓縮后圖像數據的長度:229014

    解壓縮后的數據長度:250000

    壓縮比:1.0916

    • 分析:
  • reshape函數中的m*n需要重灰度變換后的Gray矩陣的維度獲取
  • ? ? ? ?2.行程編碼的實驗結果可根據以下三個圖來得到:

    index對應Encode相應列灰度值出現的次數,Encode_hex表示編碼之后的十六進制

    (2,162)-----(1100_0010,1010_0010)---(C2,A2)

    (1,163)-----A3

    (2,164)-----(1100_0010,1010_0100)---(C2,A4)

    (1,163)-----A3

    (2,162)-----(1100_0010,1010_0010)---(C2,A2)

    (1,154)-----9A

    (1,155)-----9B

    (4,156)-----(1100_0100,1001_1010)---(C4,9C)......

    行程編碼則用(次數十六進制,灰度值十六進制)表示:

    • 當灰度值出現的次數大于1小于等于63時,前一個字節表示出現的次數,且前兩位為11,后一個字節表示本來的數據;
    • 當灰度值出現的次數大于63時,將這個數據出現的數據分為幾部分;
    • 當只出現1次時,數據大于或等于C0時,仍用兩個字節表示,(C1,數據),小于C0時,直接用數據表示

    ?

    ?

    總結

    以上是生活随笔為你收集整理的数字图像处理实验6图像编码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。