⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.m

📁 在matlab环境下实现dtc变换
💻 M
字号:
function main
%本程序分为6个步骤,完成一个256*256的灰度图像的读入,dct变换,快速dct变换
% JPEG矩阵量化,DCT逆变换,zigzag扫描后经游程编码输出文本文件。

%% 1:读取图像 Img为图像值
Img = imread('LENA256.bmp');     %读入图像,256*256的灰度图像

subplot(2,3,1);                  %画出源图像
imshow(Img);
title('原图像');

%% 2:做原始DCT变换

Img = double(Img) - 128;         %由unit8格式转换double类型,因为用unit8格式做DCT转换会产生溢出

fun = @dct2D;                    %把原始DCT变换的函数句柄赋给fun。dct2D为原始DCT变换函数
IMG = blkproc(Img,[8 8],fun);    %做原始8*8 DCT变换 变换后赋值给 IMG

subplot(2,3,2);                  %画出原始DCT变换后的图像
imshow(IMG,[]);
title('原始DCT变换后的图像');     

%% 3:做快速DCT变换

F_IMG = fast_dct2D(Img);         %fast_dct2D为快速DCT变换函数,Img为原图像

subplot(2,3,5);                  %画出快速DCT变换后的图像
imshow(F_IMG,[]);
title('快速DCT变换后的图像');
%% 4:使用JPEG的量化矩阵对8*8变换系数做均匀量化

qfun = @quantization;            %量化函数。IMG为原始DCT变换后的图像
                                 %这里不对快速DCT变换做均匀量化
Q_IMG = blkproc(IMG,[8 8],qfun); %对IMG进行JPEG量化  Q_IMG 为返回量化后矩阵
                                 
subplot(2,3,3);                  %画出DCT变换,均匀量化后的图像
imshow(Q_IMG,[]);
title('DCT变换,均匀量化后的图像');
%% 5:均匀量化后,做DCT逆变换

ifun = @idct2D;                  %把按定义编写的DCT逆变换函数句柄赋给ifun
i_qimg = blkproc(Q_IMG,[8 8],ifun);   
                                 %利用 idct2D 函数做DCT逆变换

subplot(2,3,4);                  %画出DCT变换,均匀量化后,再做逆变换的图像
imshow(i_qimg,[]);
title('DCT逆变换后的图像');

%% 6:做zigzag扫描,经游程编码,输出文本文件

k=1;
sout=ones(k,2);
for i=1:32
   for j=1:32
      q=zigzag(Q_IMG((j-1)*8+1:j*8,(i-1)*8+1:i*8));     %逐个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');                           %将结果输出到文本rel.txt
fclose(fid);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -