基于dct变换的图像编解码(包含Z扫描与反Z扫描)的matlab程序
2014-11-06 20:13
671 查看
function dct_code orgbgr = imread('lena.jpg'); orggray = rgb2gray(orgbgr); figure('color','white'),imshow(orggray),title('原始图像'); org = im2double(orggray); D = dctmtx(8); //DCT变换矩阵 [m n] = size(orggray); %使用的量化表 standard = [ 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 0 0 0 0; 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0; ]; %z 编排所用数组 z = [0 1 8 16 9 2 3 10 17 24 32 25 18 11 4 5 12 19 26 33 40 48 41 34 27 20 13 6 7 14 21 28 35 42 49 56 57 50 43 36 29 22 15 23 30 37 44 51 58 59 52 45 38 31 39 46 53 60 61 54 47 55 62 63]; z=z';z=z(:); %% 编码程序 fdctdata = zeros(m,n); for row = 1 : m/8 for col = 1 : n/8 src_tem = org((row-1)*8+1:(row-1)*8+8,(col-1)*8+1:(col-1)*8+8); fdctdata((row-1)*8+1:(row-1)*8+8,(col-1)*8+1:(col-1)*8+8) = D * src_tem * D'; end end %量化DCT系数 for row = 1 : m/8 for col = 1 : n/8 for i=1:8 for j=1:8 fdctdata((row-1)*8+i,(col-1)*8+j) = fdctdata((row-1)*8+i,(col-1)*8+j)*standard(i,j); end end end end %Z型扫描 zdata = zeros(512*512,1); ind = 1; cout = 1; for i = 1 : 8 for j = 1 : 8 for row = 1 : m/8 for col = 1 : n/8 zdata(ind) = fdctdata((row-1)*8+floor(z(cout)/8)+1,(col-1)*8+mod(z(cout),8)+1); ind = ind + 1; end end cout = cout+1; end end %% 解码程序 %反Z型扫描 ifdctdata = zeros(m,n); ind = 1; cout = 1; for i = 1 : 8 for j = 1 : 8 for row = 1 : m/8 for col = 1 : n/8 ifdctdata((row-1)*8+floor(z(cout)/8)+1,(col-1)*8+mod(z(cout),8)+1) = zdata(ind); ind = ind + 1; end end cout = cout+1; end end %反DCT变换 for row = 1 : m/8 for col = 1 : n/8 dct_tem = ifdctdata((row-1)*8+1:(row-1)*8+8,(col-1)*8+1:(col-1)*8+8); ifdctdata((row-1)*8+1:(row-1)*8+8,(col-1)*8+1:(col-1)*8+8) = D' * dct_tem * D; end end figure('color','white'),imshow(ifdctdata,[]),title('反变换恢复图像');
相关文章推荐
- 基于多项滤波的数字正交变换MATLAB仿真程序
- 基于DCT变换的JPEG图像压缩原理
- 基于小波包变换和高阶统计量的高斯判别准则的红外小目标的分割程序V2.0-MATLAB版
- OpenCV实现基于8*8块DCT变换的图像压缩
- 基于DCT的图像压缩及Matlab实现
- 基于SIFT点特征匹配的图像配准MATLAB程序
- 基于DCT变换的信息隐藏(数字水印)嵌入算法的设计(Matlab)
- 【MATLAB】基于DCT变换的数字水印
- SSE图像算法优化系列二十一:基于DCT变换图像去噪算法的进一步优化(100W像素30ms)。
- 基于SIFT点特征匹配的图像配准MATLAB程序
- 基于MATLAB的图像自适应阈值分割程序
- 基于DCT变换的数字图像分层压缩编码
- 基于小波包变换和高阶统计量的高斯判别准则的红外小目标的分割程序V1.0-MATLAB版
- 基于Python二维离散余弦变换(DCT)及其反变换(IDCT)---程序对比
- 基于matlab的图像小波降噪程序
- 基于PCNN的图像分割的matlab实现 推荐
- 尺度不变特征变换(SIFT算法)Matlab程序代码测试例子
- MATLAB聚类分割程序 图像聚类分割
- matlab图像缩放程序
- 利用希尔伯特变换进行的单边带幅度调制matlab程序