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

📄 main.asv

📁 在matlab环境下实现dtc变换
💻 ASV
字号:
function main
%% 读取图像 Img为图像值
Img = imread('LENA256.bmp');     %读入图像,256*256的灰度图像

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

%% 做原始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变换后的图像');     

%% 做快速DCT变换

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

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

Q_IMG = quantization(IMG);       %量化函数。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逆变换函数句柄赋给ifun
i_qimg = blkproc(IMG,[8 8],ifun);   %利用 idct2D 函数做DCT逆变换

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

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

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));        %逐个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 + -