當前位置:成語大全網 - 新華字典 - matlab的dct壓縮問題 求專家幫忙有重謝

matlab的dct壓縮問題 求專家幫忙有重謝

您好,這樣的:

clc; clear all; close all;

I = imread('rice.png'); % 讀取圖片

I = im2double(I) ;%圖片存儲類型轉換

T = dctmtx(8);%離散余弦變換矩陣

B = blkproc(I,[8 8],'P1*x*P2',T,T');%對源圖像進行DCT變換

mask = [1 1 1 0 0 0 0 0

1 1 1 0 0 0 0 0

1 1 1 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0];

B2 = blkproc(B,[8 8],'P1.*x',mask);%數據壓縮,丟棄右下角高頻數據

I2 = blkproc(B2,[8 8],'P1*x*P2',T',T);%進行反DCT變換

figure;

subplot(1, 2, 1); imshow(I, []);

subplot(1, 2, 2); imshow(I2, []);

imwrite(I, 'c:\\c1.png');

imwrite(I2, 'c:\\c2.png');

f1 = imfinfo('c:\\c1.png');

f2 = imfinfo('c:\\c2.png');

r = f2.FileSize/f1.FileSize

r =

0.7855

>>

個人覺得壓縮比並非文件大小之比,因為文件中不可避免要存儲各種信息(文件頭、信息鬥等),直接用文件大小來進行計算的話圖像以外的數據也計算進去了,計算結果很可能跟存儲格式有關。

DCT變換後圖像數據的壓縮比應該是zig-zag掃描保留的點數/(8*8),比如您的例子,就是9/64。