資源簡介
編寫一個Matlab程序,實現(xiàn)基于DCT的圖像變換編碼。
編碼過程:將原始圖像劃分成8×8的圖像塊,采用離散余弦變換(DCT)對圖像塊進行變換。
解碼過程:對于每個圖像塊,使用一定比例的最低頻DCT系數(shù)(被舍棄的高頻DCT系數(shù)設(shè)為0)做逆離散余弦變換(IDCT),得到重構(gòu)的圖像塊。最后,將所有重構(gòu)的圖像塊按順序拼接成完整的解碼圖像。
分別取32、16、8個最低頻DCT系數(shù)(如圖1所示)進行反變換得到重構(gòu)的圖像,比較圖像的質(zhì)量,計算這三種情況下的峰值信噪比。
峰值信噪比的計算公式:PSNR = 10 log10 (2552/ MSE)
其中,MSE(Mean Squared Error)指原始圖
代碼片段和文件信息
%程序思路:
%對圖像進行DCT變化有2個函數(shù),dct()和dctmtx()
%為了對圖像分塊處理,使用dctmtx函數(shù)產(chǎn)生一個8*8的DCT變換矩陣T
%分塊處理使用blkproc函數(shù),利用T*x*T‘對每個8*8圖像塊x分別進行DCT變換,T‘*x*T進行IDCT變換
%進行離散余弦逆變換時,分別取32、16、8個最低頻DCT系數(shù)矩陣MASK1MASK2MASK3
%使用blkpro函數(shù)分塊舍棄高頻DCT系數(shù),利用M.*x
I=imread(‘lena.jpg‘‘jpg‘);%讀入圖片
I_double=im2double(I);%將圖像轉(zhuǎn)換為雙精度格式
T=dctmtx(8);%生成一個8×8的DCT變換矩陣T
I_dct=blkproc(I_double[88]‘P1*x*P2‘TT‘);%對每個圖像塊分別進行DCT變換?
MASK1=[?1?1?1?1?1?1?1?1?????
????????1?1?1?1?1?1?1?0?
????????1?1?1?1?1?1?0?0?
????????1?1?1?1?1?0?0?0???
????????1?1?1?0?0?0?0?0????
????????1?1?0?0?0?0?0?0????
????????1?0?0?0?0?0?0?0????
????????0?0?0?0?0?0?0?0];?
MASK2=[?1?1?1?1?1?1?0?0?????
????????1?1?1?1?0?0?0?0?
????????1?1?1?0?0?0?0?0?
????????1?1?0?0?0?0?0?0???
????????1?0?0?0?0?0?0?0????
????????0?0?0?0?0?0?0?0????
????????0?0?0?0?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2521??2018-06-21?09:26??code.m
評論
共有 條評論