?? main.asv
字號:
function main
%% 讀取圖像 Img為圖像值
Img = imread('LENA256.bmp'); %讀入圖像,256*256的灰度圖像
subplot(2,3,1); %畫出源圖像
imshow(Img);
title('原圖像');
%% 做原始DCT變換
Img = double(Img) - 128; %由unit8格式轉(zhuǎn)換double類型,因?yàn)橛胾nit8格式做DCT轉(zhuǎn)換會產(chǎn)生溢出
fun = @dct2D; %把原始DCT變換的函數(shù)句柄賦給fun。dct2D為原始DCT變換函數(shù)
IMG = blkproc(Img,[8 8],fun); %做原始8*8 DCT變換 變換后賦值給 IMG
subplot(2,3,2); %畫出原始DCT變換后的圖像
imshow(IMG,[]);
title('原始DCT變換后的圖像');
%% 做快速DCT變換
F_IMG = fast_dct2D(Img); %fast_dct2D為快速DCT變換函數(shù),Img為原圖像
subplot(2,3,5); %畫出快速DCT變換后的圖像
imshow(F_IMG,[]);
title('快速DCT變換后的圖像');
%% 使用JPEG的量化矩陣對8*8變換系數(shù)做均勻量化
Q_IMG = quantization(IMG); %量化函數(shù)。IMG為原始DCT變換后的圖像
%這里不對快速DCT變換做均勻量化
Q_IMG = blkproc(IMG,[8 8],'x./P1',JPEG_data);
subplot(2,3,3); %畫出DCT變換,均勻量化后的圖像
imshow((Q_IMG),[]);
title('DCT變換,均勻量化后的圖像');
%% 均勻量化后,做DCT逆變換
ifun = @idct2D; %把按定義編寫的DCT逆變換函數(shù)句柄賦給ifun
i_qimg = blkproc(IMG,[8 8],ifun); %利用 idct2D 函數(shù)做DCT逆變換
subplot(2,3,4); %畫出DCT變換,均勻量化后,再做逆變換的圖像
imshow(i_qimg,[]);
title('DCT逆變換后的圖像');
%% 做zigzag掃描,經(jīng)游程編碼,輸出文本文件
k=1;
sout=ones(k,2);
for i=1:32
for j=1:32
q=zigzag(IMG((j-1)*8+1:j*8,(i-1)*8+1:i*8)); %逐個(gè)8*8圖像做zig_zag掃描
[sout,k]=runlength(q,sout,k); %游程編碼
if( ~(i==32 & j==32))
k=k+1;
sout(k,2)=1;
end
end
end
fid=fopen('LENA256_data.txt','w+');
fprintf(fid,'(%d,%d)',sout'); %將結(jié)果輸出到文本rel.txt
fclose(fid);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -