Matlab的图像压缩技术
MATLAB图象压缩
MATLAB图象压缩预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制1.图像压缩的概念减少表示数字图像时需要的数据量2.图像压缩的基本原理去除多余数据.以数学的观点来看,这一过程实际上就是将二维像素阵列变换为一个在统计上无关联的数据集合图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码.图像数据之所以能被压缩,就是因为数据中存在着冗余。
图像数据的冗余主要表现为:(1)图像中相邻像素间的相关性引起的空间冗余;(2)图像序列中不同帧之间存在相关性引起的时间冗余;(3)不同彩色平面或频谱带的相关性引起的频谱冗余。
3数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。
由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。
信息时代带来了“信息爆炸”,使数据量大增,因此,无论传输或存储都需要对数据进行有效的压缩。
在遥感技术中,各种航天探测器采用压缩编码技术,将获取的巨大信息送回地面。
图像压缩是数据压缩技术在数字图像上的应用,它的目的是减少图像数据中的冗余信息从而用更加高效的格式存储和传输数据。
4、图像压缩基本方法图像压缩可以是有损数据压缩也可以是无损数据压缩。
对于如绘制的技术图、图表或者漫画优先使用无损压缩,这是因为有损压缩方法,尤其是在低的位速条件下将会带来压缩失真。
如医疗图像或者用于存档的扫描图像等这些有价值的内容的压缩也尽量选择无损压缩方法。
有损方法非常适合于自然的图像,例如一些应用中图像的微小损失是可以接受的(有时是无法感知的),这样就可以大幅度地减小位速。
从压缩编码算法原理上可以分为以下3类:(1)无损压缩编码种类哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。
(2)有损压缩编码种类预测编码,DPCM,运动补偿;频率域方法:正交变换编码(如DCT),子带编码;空间域方法:统计分块编码;模型方法:分形编码,模型基编码;基于重要性:滤波,子采样,比特分配,向量量化;(3)混合编码。
图像压缩的matlab代码
(1) file_name='baboon.bmp';H=imread(file_name);H=double(H);Grgb=0.2990*H(:,:,1)+0.5870*H(:,:,2)+0.1140*H(:,:,3); NbColors=255;%对矩阵进行量化编码G=wcodemat(Grgb,NbColors);%gray线性的灰阶色调map2=gray(NbColors);%建立图形窗口1figure(1);%建立图像Gimage(G);%应用调色板colormap(map2);title('原图像的灰度图');%显示workplace的变量的详细信息whos('G');%转换成为灰度级索引图像%dwt2单尺度二维离散小波变换[CA1,CH1,CV1,CD1]=dwt2(G,'bior3.7');%从分解系数中提取近似和细节% upcoef2二维系数的直接小波重构A1=upcoef2('a',CA1,'bior3.7',1);H1=upcoef2('h',CH1,'bior3.7',1);V1=upcoef2('v',CV1,'bior3.7',1);D1=upcoef2('d',CD1,'bior3.7',1);%第二幅图像%显示近似和细节figure (2);colormap(map2);subplot(2,2,1);%对矩阵进行量化编码image(wcodemat(A1,192));title('近似A1');subplot(2,2,2);image(wcodemat(H1,192));title('水平细节H1');subplot(2,2,3);image(wcodemat(V1,192));title('垂直细节V1');subplot(2,2,4);image(wcodemat(D1,192));title('对角细节D1');%对图像进行多尺度分解[C,S]=wavedec2(G,2,'bior3.7');%提取分解后的近似和细节系数%提取一维小波变换低频系数CA2=appcoef2(C,S,'bior3.7',2);%提取小波变换高频系数[CH2,CV2,CD2]=detcoef2('all',C,S,2); [CH1,CV1,CD1]=detcoef2('all',C,S,1); %从系数C重构第二层近似A2=wrcoef2('a',C,S,'bior3.7',2);H1=wrcoef2('h',C,S,'bior3.7',1);V1=wrcoef2('v',C,S,'bior3.7',1);D1=wrcoef2('d',C,S,'bior3.7',1);H2=wrcoef2('h',C,S,'bior3.7',2);V2=wrcoef2('v',C,S,'bior3.7',2);D2=wrcoef2('d',C,S,'bior3.7',2);%第三幅图像%显示多尺度分解的结果figure (3);colormap(map2);subplot(2,4,1);image(wcodemat(A1,192));title('近似A1');subplot(2,4,2);image(wcodemat(H1,192));title('水平细节H1');subplot(2,4,3);image(wcodemat(V1,192));title('垂直细节V1');subplot(2,4,4);image(wcodemat(D1,192));title('对角细节D1');subplot(2,4,5);image(wcodemat(A2,192));title('近似A2');subplot(2,4,6);image(wcodemat(H2,192));title('水平细节H2');subplot(2,4,7);image(wcodemat(V2,192));title('垂直细节V2');subplot(2,4,8);image(wcodemat(D2,192));title('对角细节D2');%第四幅图像%从多尺度分解后的系数重构原始图像并显示结果G0=waverec2(C,S,'bior3.7');%建立图形窗口4figure (4);%建立图像G0image(G0);%应用调色板colormap(map2);%绘制调色板的内容colorbar;whos('G0')(2)file_name=('bab.bmp');H=imread(file_name);H=double(H);ca=0.2990*H(:,:,1)+0.5870*H(:,:,2)+0.1140*H(:,:,3);NbColors=255;G=wcodemat(ca,NbColors);map2=gray(NbColors);figure(1);image(G);colormap(map2);title('原图像的灰度图');whos('G');%对图像进行多尺度二维小波分解[c,s]=wavedec2(G,2,'bior3.7');ca1=appcoef2(c,s,'bior3.7',1);ch1=detcoef2('h',c,s,1);cv1=detcoef2('v',c,s,1);cd1=detcoef2('d',c,s,1);%对各频率进行小波重构a1=wrcoef2('a',c,s,'bior3.7',1);h1=wrcoef2('h',c,s,'bior3.7',1);v1=wrcoef2('v',c,s,'bior3.7',1);d1=wrcoef2('d',c,s,'bior3.7',1);G1=[a1,h1;v1,d1];figure(2);image(G1);colormap(map2);axis square;title('分解后低频和高频信息') whos('G1');ca1=appcoef2(c,s,'bior3.7',1);ca1=wcodemat(ca1,440,'mat',1);ca2=0.6*ca1;figure(3);image(ca2);colormap(map2);title('低频压缩图像');whos('ca2');ca3=appcoef2(c,s,'bior3.7',2);ca3=wcodemat(ca3,440,'mat',0); ca4=0.5*ca3;figure(4);image(ca4);title('二层分解后低频压缩图像'); colormap(map2);whos('ca4');。
使用Matlab进行图像压缩的技巧
使用Matlab进行图像压缩的技巧引言图像是一种重要的信息表达方式,广泛应用于数字媒体、通信和计算机视觉等领域。
然而,由于图像所占用的存储空间较大,如何有效地进行图像压缩成为了一个重要的问题。
Matlab作为一种强大的数学计算和数据处理工具,可以提供多种图像压缩的技巧,本文将介绍一些常用且有效的图像压缩技巧。
一、离散余弦变换(Discrete Cosine Transformation, DCT)离散余弦变换是一种将空间域中图像转换为频域中的图像的技术。
在Matlab中,可以通过dct2函数实现离散余弦变换。
该函数将图像分块,并对每个块进行DCT变换,然后将变换后的系数进行量化。
通过调整量化步长,可以实现不同程度的压缩。
DCT在图像压缩中的应用广泛,特别是在JPEG压缩中得到了广泛的应用。
二、小波变换(Wavelet Transformation)小波变换是一种将时域信号转换为时频域信号的技术。
在图像压缩中,小波变换可以将图像表示为不同尺度和频率的小波系数。
通过对小波系数进行量化和编码,可以实现图像的有效压缩。
Matlab提供了多种小波变换函数,如wavedec2和waverec2。
这些函数可以对图像进行多尺度小波分解和重构,从而实现图像的压缩。
三、奇异值分解(Singular Value Decomposition, SVD)奇异值分解是一种将矩阵分解为三个矩阵乘积的技术。
在图像压缩中,可以将图像矩阵进行奇异值分解,并保留较大的奇异值,从而实现图像的压缩。
Matlab提供了svd函数,可以方便地实现奇异值分解。
通过调整保留的奇异值个数,可以实现不同程度的图像压缩。
四、量化(Quantization)量化是将连续数值转换为离散数值的过程。
在图像压缩中,量化用于将变换后的图像系数转换为整数值。
通过调整量化步长,可以实现不同程度的压缩。
在JPEG压缩中,量化是一个重要的步骤,通过调整量化表的参数,可以实现不同质量的压缩图像。
MATLAB中的图像压缩和编码方法
MATLAB中的图像压缩和编码方法图像压缩和编码是数字图像处理的重要领域,在各种图像应用中起着至关重要的作用。
在本文中,我们将探讨MATLAB中的图像压缩和编码方法,包括无损压缩和有损压缩,并介绍其中的一些经典算法和技术。
一、图像压缩和编码概述图像压缩是指通过一定的算法和技术来减少图像数据的存储量或传输带宽,以达到节约存储空间和提高传输效率的目的。
而图像编码则是将原始图像数据转换为一系列二进制编码的过程,以便存储或传输。
图像压缩和编码通常可以分为无损压缩和有损压缩两种方法。
无损压缩是指压缩后的数据可以完全还原为原始图像数据,不会引入任何失真或变化。
常见的无损压缩算法有Run-Length Encoding (RLE)、Lempel-Ziv-Welch (LZW)、Huffman编码等。
这些算法通常针对图像中的冗余数据进行编码,如重复的像素值或相似的图像区域。
有损压缩则是在保证一定程度的视觉质量下,通过舍弃或近似原始图像数据来减小存储或传输的数据量。
常见的有损压缩算法有JPEG、JPEG2000、GIF等。
这些算法通过离散余弦变换(DCT)、小波变换或颜色量化等方法,将图像数据转换为频域或颜色空间的系数,并通过量化、编码和压缩等步骤来减小数据量。
二、无损压缩方法1. Run-Length Encoding (RLE)RLE是一种简单高效的无损压缩算法,通过计算连续重复像素值的数量来减小数据量。
在MATLAB中,可以使用`rle`函数实现RLE编码和解码。
例如,对于一幅图像,可以将连续的像素值(如白色)编码为重复的个数,然后在解码时根据重复的个数恢复原始像素值。
2. Lempel-Ziv-Welch (LZW)LZW是一种字典压缩算法,通过将图像中连续的像素序列映射为一个短代码来减小数据量。
在MATLAB中,可以使用`lzwencode`和`lzwdecode`函数实现LZW 编码和解码。
例如,对于一段连续的像素序列,可以将其映射为一个短代码,然后在解码时根据代码恢复原始像素序列。
图像编程霍夫曼图像压缩重建【matlab源码】
毕业论文(设计)题目学院学院专业学生姓名学号年级级指导教师教务处制表matlab图像编程霍夫曼图像压缩重建一、程序说明本团队长期从事matlab编程与仿真工作,擅长各类毕业设计、数据处理、图表绘制、理论分析等,程序代做、数据分析具体信息联系二、程序示例function SnapImage()imagesPath = '.\\snap_images';if ~exist(imagesPath, 'dir')mkdir(imagesPath);end[FileName,PathName,FilterIndex] = uiputfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...'*.*','All Files' },'保存截图',...'.\\snap_images\\temp.jpg');if isequal(FileName, 0) || isequal(PathName, 0)return;endfileStr = fullfile(PathName, FileName);f = getframe(gcf);f = frame2im(f);imwrite(f, fileStr);msgbox('抓图文件保存成功!', '提示信息');function SaveImage(Img)imagesPath = '.\\results';if ~exist(imagesPath, 'dir')mkdir(imagesPath);end[FileName,PathName,FilterIndex] = uiputfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...'*.*','All Files' },'保存截图',...'.\\results\\result.jpg');if isequal(FileName, 0) || isequal(PathName, 0)return;endfileStr = fullfile(PathName, FileName);imwrite(mat2gray(Img), fileStr);function S=PSNR(sss,aaa)[m n p]=size(sss);A=double(sss);B=double(aaa);sumaDif=0;maxI=m*n*max(max(A.^2));for u=1:mfor v=1:nsumaDif=sumaDif+(A(u,v)-B(u,v))^2;endendif (sumaDif==0)sumaDif=1;endS=maxI/sumaDif;S=10*log10(S);function [zvec, zi] = Mat2Huff(vec)if ~isa(vec,'uint8')fprintf('\n请确认输入uint8类型数据向量!\n');return;endvec = vec(:)';f = Frequency(vec);syminfos = find(f~=0);f = f(syminfos);[f, sind] = sort(f);syminfos = syminfos(sind);len = length(syminfos);syminfos_ind = num2cell(1:len);cw_temp = cell(len,1);while length(f)>1ind1 = syminfos_ind{1};ind2 = syminfos_ind{2};cw_temp(ind1) = AddNode(cw_temp(ind1),uint8(0));cw_temp(ind2) = AddNode(cw_temp(ind2),uint8(1));f = [sum(f(1:2)) f(3:end)];syminfos_ind = [{[ind1 ind2]} syminfos_ind(3:end)]; [f,sind] = sort(f);syminfos_ind = syminfos_ind(sind);endcw = cell(256,1);cw(syminfos) = cw_temp;len = 0;for i = 1 : length(vec),len = len+length(cw{double(vec(i))+1}); endstr_temp = repmat(uint8(0),1,len);pt = 1;for index=1:length(vec)cd = cw{double(vec(index))+1};len = length(cd);str_temp(pt+(0:len-1)) = cd;pt = pt+len;endlen = length(str_temp);pad = 8-mod(len,8);if pad > 0str_temp = [str_temp uint8(zeros(1,pad))]; endcw = cw(syminfos);cl = zeros(size(cw));ws = 2.^(0:51);mcl = 0;for index = 1:length(cw)len = length(cw{index});if len>mclmcl = len;endif len>0cd = sum(ws(cw{index}==1));cd = bitset(cd,len+1);cw{index} = cd;cl(index) = len;endendcw = [cw{:}];cols = length(str_temp)/8;str_temp = reshape(str_temp,8,cols);ws = 2.^(0:7);zvec = uint8(ws*double(str_temp));huffcodes = sparse(1,1);for index = 1:numel(cw)huffcodes(cw(index),1) = syminfos(index);endzi.pad = pad;zi.huffcodes = huffcodes;zi.ratio = cols./length(vec);zi.length = length(vec);zi.maxcodelen = mcl;function vec = Huff2Mat(zvec, zi)if ~isa(zvec,'uint8')fprintf('\n请确认输入uint8类型数据向量!\n');return;endlen = length(zvec);str_tmp = repmat(uint8(0),1,len.*8);bi = 1:8;for index = 1:lenstr_tmp(bi+8.*(index-1)) = uint8(bitget(zvec(index),bi));endstr_tmp = logical(str_tmp(:)');len = length(str_tmp);str_tmp((len-zi.pad+1):end) = [];len = length(str_tmp);vec = repmat(uint8(0),1,zi.length);vi = 1;ci = 1;cd = 0;for index = 1:lencd = bitset(cd,ci,str_tmp(index));ci = ci+1;byte = Decode(bitset(cd,ci),zi);if byte > 0vec(vi) = byte-1;ci = 1;cd = 0;vi = vi+1;endendfunction InitFig(hObject,handles)axes(handles.axes1);cla; axis on; box on;set(gca, 'Color', [0.8039 0.8784 0.9686]);set(gca, 'XTickLabel', [], 'YTickLabel', [], 'XTick', [], 'YTick', []);axes(handles.axes2);cla; axis on; box on;set(gca, 'Color', [0.8039 0.8784 0.9686]);set(gca, 'XTickLabel', [], 'YTickLabel', [], 'XTick', [], 'YTick', []);set(handles.textInfo, 'String', ...'图像压缩系统,载入图像,选择压缩算法,比较压缩效果。
MATLAB通过DCT对图像进行区域编码以及门限编码压缩
实验作业7分别用区域编码和阈值编码方法实现图像压缩,用8×8DCT变换,保留50%的大系数,并对解码图像进行比较。
要求:DCT要自己实现,不能用matlab中的DCT函数区域编码程序代码:clear;I=imread('d:\3.jpg');I=double(rgb2gray(I));figure(1);imshow(uint8(I));title('原图像');Y=zeros(8,8);for i=1:8for j=1:8if i==1Y(i,j)=sqrt(1/8);elseY(i,j)=sqrt(2/8)*cos((pi*(2*(j-1)+1)*(i-1))/16);endendends=blkproc(I,[8 8],'P1*x*P2',Y,Y'); figure(2);imshow(uint8(s));for j=1:8for i=1:8if j<=8-i+1a(i,j)=1;elsea(i,j)=0;end;end;end;s=blkproc(s,[8 8],'P1.*x',a); figure(3);imshow(uint8(s));s=blkproc(s,[8 8],'P1*x*P2',Y',Y); figure(4);imshow(uint8(s));title('经过压缩处理的图像')运行结果:阈值编码程序代码clear;I=imread('d:\3.jpg'); I=rgb2gray(I); imshow(uint8(I)); title('原图像'); I=double(I); for i=1:8 for j=1:8 if (i==1)Y(i,j)=sqrt(1/8); elseY(i,j)=sqrt(2/8)*cos((i-1)*(2*j-1)*pi/(2*8)); end; end; end; s=blkproc(I,[8 8],'P1*x*P2',Y,Y'); a=ones(8,8); b=reshape(Y,1,64); midvalue=median(b); for i=1:8 for j=1:8if(abs(Y(i,j))<midvalue) a(i,j)=0; end; end; end;s=blkproc(s,[8 8],'P1.*x',a); s=blkproc(s,[8 8],'P1*x*P2',Y',Y); figure(2); imshow(uint8(s));title('被与之编码方式压缩的图像');运行结果:心得体会:由于第八章内容上课听的不是很明白,所以作业题拿到之后不知道怎么做,重新把第八章看了一遍,可是很多地方看了好久好多次还是不明白其原理,就像这次所涉及的DCT (虽然会做作业,但是实在是不理解),区域编码,门限编码,都是不明白什么意思!后来网上搜罗资料,看了颇久,请教了同学,才慢慢知道是什么一回事,做这题目的时候,遇到过不知道怎么分块的问题,后来也是同学告诉有个blkproc 的函数可以用,才使到程序精简化。
基于MATLAB的图像压缩技术研究
・
山 西 焦 煤 科 技
S a x k ng Co lSce c & Te h o o y h n iCo i a i n e c n lg
No 2 .1 De . 00 e2 8
试 验研究 ・
基于 M TA A L B的图像压缩技术研究
吕金 花①
( 山西汾 西煤化 高级技 工学校 )
摘 要
介 绍 了 MA L B在 图像 压 缩研 究方 面 的应 用 , 讨 基 于 B TA 探 P人 工神 经 网络 的 图像 压 缩
的 MA L B 实现 和 基 于小 波 的 图像 压缩技 术 。MA L B软件 使 用 MA L 2 0 a版本 , TA TA T AB R 0 7 并且 通 过
介休 0 20 30 0
B P网络 是 目前最 为 常用 的一 种人 工 神经 网络模
① 作 者简介 : 花 女 吕金
15 9 9年出生 19 年毕业于 山西矿业学 院 工程师 98
・
3 6・
ห้องสมุดไป่ตู้
山 西 焦 煤 科 技
20 0 8年第 l 2期
2 基于 B P人工 神经 网络 图像压 缩 的实现
能 , 本 上囊 括 了 目前 很 多 典 型应 用 的数 字 图 形 处 基 理 。在 MA L B的神 经 网络工 具 箱 中提 供 了很 多用 TA 于 图像 处 理 的函数 。MA L BR 07 T A 2 0 a中的小 波工 具 箱 ( vl olo . 中包 含 的各 种 小 波 分 析 函 Waee To x3 0) t b 数, 可用 于对信 号 与 图像 的压 缩 处 理 , 缩 后 能 保 持 压 信 号 与图像 的特 征基 本 不变 , 压缩 比高 , 缩速 度 快 , 压 且 在传 递过 程 中具 有 抗 干 扰 能 力 。本 文 讨 论 了应 用 M T A 中的 B A LB P神 经 网络 工 具 箱 函数 和 小 波 工 具
JPEG图像压缩Matlab程序
% function ReconImage=func_DCTJPEG(I,q)%% 1.This function tests the DCTJPEG codec%% ReconImage=DCTJPEG(I,q),I为待压缩图像,q为量化因子,ReconImage为解压缩重建图像。
%% 2.This function calls:%% blkproc.m,DCHuffmanEncoding.m,ACHuffmanEncoding.m,zigzag.m,PSNR.m, %% 对灰度图像进行DCT变换,量化,ZigZag扫描,Huffman编解码,反量化,反DCT 变换而重建图像。
%% 其中,blkproc.m为分块DCT变换函数;%% DCHuffmanEncoding.m,ACHuffmanEncoding.m分别为DC和AC变换系数的Huffman码表函数;%% zigzag.m为ZigZag扫描函数;PSNR.m为求图像峰值信噪比函数。
%% Copyright 2008 Reserved @ Wang Chengyou @ Tianjin University, P.R.China.%%******************************************************************* *******************%%%%Testclose all;clear all;clc;% fname=input('Please input the bmp image name:','s');%%读一幅bmp灰度图像% [I,map]=imread(fname,'bmp');I=imread('lena512.bmp');%%读bmp灰度图像q=1;%%设定量化因子OriginalImage=I;Q=q;OriginalImage=double(OriginalImage);%%图像数据类型转换ImageSub=OriginalImage-128;%%电平平移128[Row,Col]=size(OriginalImage);%%图像的大小BlockNumber=Row*Col/64;%%8*8分块数%% dct2变换:把ImageSub分成8*8像素块,分别进行dct2变换,得变换系数矩阵CoefCoef=blkproc(ImageSub,[8,8],'dct2(x)');%% 量化:用量化矩阵L量化Coef得CoefAfterQ%% JPEG建议量化矩阵L=Q*[16 11 10 16 24 40 51 6112 12 14 19 26 58 60 5514 13 16 24 40 57 69 5614 17 22 29 51 87 80 6218 22 37 56 68 109 103 7724 35 55 64 81 104 113 9249 64 78 87 103 121 120 10172 92 95 98 112 100 103 99];CoefAfterQ=blkproc(Coef,[8,8],'round(x./P1)',L);%%向靠近的整数取圆整%% 把CoefAfterQ分成8*8的块得分块矩阵CoefBlockm=0;for row=1:Row/8for col=1:Col/8m=m+1;CoefBlock(:,:,m)=CoefAfterQ(((row-1)*8+1):(row*8),((col-1)*8+1):(col*8));endendm;%% 把量化后各个分块的DC系数存放到行矩阵DC中DC(m)=0;for i=1:mDC(i)=CoefBlock(1,1,i);endDC;%% 求由各个DC系数的差值组成的行矩阵DCdifDCdif(BlockNumber)=0;DCdif(1)=DC(1);for i=2:BlockNumberDCdif(i)=DC(i)-DC(i-1);endDCdif;%% 用行矩阵DCdif中的差值替换原来系数矩阵CoefBlock中各个分块的DC系数m=0;for i=1:Row/8for j=1:Col/8m=m+1;CoefBlock(1,1,m)=DCdif(m);endendm;%% 把分块矩阵CoefBlock放到变换系数大矩阵CoefDCchanged中n=0;forrow=1:Row/8for col=1:Col/8n=n+1;CoefDCchanged(((row-1)*8+1):(row*8),((col-1)*8+1):(col*8))=CoefBlock(:,:,n);endendn;%%******************************************************************* *******************************%% 至此,完成了所有块中DC系数的替换(除第一个分块以外),为以后的DC系数差分编码做好了准备%%******************************************************************* *******************************%%*********************** the first--end blocks ************************%% 以下对每个分块进行量化,ZigZag扫描和编码(分别对DC系数和AC系数)%%******************************************************************* ***%% 整个图像编码后的bit序列以及bit序列的长度ImageBitSeq=[];ImageBitLen=[];%% 调试用,用来记循环的次数rowloop=0;for row=1:Row/8colloop=0;for col=1:Col/8m(1:8,1:8)=CoefDCchanged((row-1)*8+1:(row-1)*8+8,(col-1)*8+1:(col-1)*8+8);k= round(m); %% 就近取整%k;%% k为变换系数矩阵经量化并就近取整后的矩阵%% ZigZag Scaning%%*********************************************************t=zigzag(k);%t;%% t为zigzag扫描结果。
如何使用Matlab进行图像压缩和图像恢复技术实现
如何使用Matlab进行图像压缩和图像恢复技术实现图像压缩和图像恢复技术在数字图像处理领域中起着至关重要的作用。
随着数字图像的广泛应用,图像压缩已经成为了一种必要的手段。
而图像恢复技术则可以使压缩后的图像更好地还原,提高图像质量。
本文将介绍如何使用Matlab进行图像压缩和图像恢复技术的实现。
首先,我们需要了解图像压缩的基本原理。
图像压缩通常包括有损压缩和无损压缩两种方式。
有损压缩是指在压缩图像的过程中会有一定的信息损失,而无损压缩则是保证图像质量不受损失的压缩方式。
在Matlab中,我们可以使用多种算法实现图像压缩。
其中,最常用的算法是基于离散余弦变换(DCT)的JPEG压缩算法。
JPEG算法的基本思想是将图像分成若干个8x8的小块,然后对每个小块进行DCT变换,再对变换后的系数进行量化,最后采用熵编码的方式进行压缩。
具体操作如下:1. 将彩色图像转换为灰度图像:在Matlab中,可以使用rgb2gray函数将彩色图像转换为灰度图像。
2. 将图像分成若干个8x8的小块:可以使用im2col函数将图像转换为列,然后使用reshape函数将列重新组合成8x8的小块。
3. 对每个小块进行DCT变换:可以使用dct2函数对每个小块进行DCT变换。
4. 对变换后的系数进行量化:将变换后的系数除以一个预定义的量化矩阵,然后四舍五入取整。
5. 采用熵编码进行压缩:根据量化后的系数,使用Huffman编码或算术编码等方法进行压缩。
在实际应用中,我们还可以对JPEG算法进行一些改进,以提高压缩效果。
例如,可以根据图像内容的特点对量化矩阵进行优化,可以使用小波变换代替DCT变换等。
接下来,我们将介绍如何使用Matlab进行图像的恢复。
图像恢复通常包括去噪和超分辨率重建两个步骤。
对于图像去噪,Matlab提供了多种滤波器和去噪算法,例如中值滤波、均值滤波、小波去噪等。
我们可以使用这些工具对图像进行去噪处理。
对于图像的超分辨率重建,Matlab中有多种算法可供选择,例如插值法、边缘增强法、小波插值法等。
在Matlab中进行图像压缩与图像解密的方法与技巧
在Matlab中进行图像压缩与图像解密的方法与技巧Matlab是一种强大的工具,被广泛用于图像处理和计算机视觉领域。
在本文中,我们将讨论如何利用Matlab进行图像压缩与图像解密,并探讨一些相应的方法和技巧。
首先,让我们来了解一下图像压缩的基本概念和原理。
图像压缩是通过减少图像占用的存储空间或传输带宽来减小图像文件的大小。
压缩分为有损压缩和无损压缩两种类型。
有损压缩会丢失一些图像信息,以达到压缩的目的,而无损压缩则尽量保留所有图像信息。
在Matlab中,我们可以使用多种方法进行图像压缩。
常见的方法之一是使用离散余弦变换(Discrete Cosine Transform,DCT)。
DCT将图像分解为一系列互不相关的频率成分,然后根据其重要性对这些成分进行量化和编码。
通过调整量化步长可以控制压缩比率和图像质量。
除了DCT,还有其他一些常用的压缩方法,如小波变换(Wavelet Transform),它可以提供更好的局部逼近能力,适用于不同尺度和方向的图像特征。
Matlab中有许多内置函数可以实现小波变换,例如waverec和wavedec函数。
另一个常用的图像压缩方法是基于向量量化(Vector Quantization,VQ)的编码。
VQ将图像划分为不重叠的块,并使用聚类算法将每个块映射到具有较少位数的代表向量。
然后,通过编码代表向量和其在图像中的位置来表示整个图像。
这种方法对于有损压缩非常有效,但在无损压缩方面效果较差。
一旦我们对图像进行了压缩,接下来我们需要了解如何进行图像解密。
在Matlab中,解密可以通过逆向操作来实现。
对于DCT压缩,我们可以通过应用逆离散余弦变换(Inverse Discrete Cosine Transform,IDCT)来恢复原始图像。
同样,对于小波变换压缩,我们可以使用逆小波变换(Inverse Wavelet Transform)来还原图像。
需要注意的是,如果进行了有损压缩,解密后的图像与原始图像之间很可能有一些质量损失。
基于MATLAB的图像压缩感知算法的实现毕业设计说明书
毕业设计(论文)课题名称基于MATLAB的图像压缩感知算法的实现目录目录 (I)第1章绪论 (1)1.1 研究背景和意义 (1)1.2 数据压缩技术 (2)1.2.1 传统数据压缩技术 (2)1.2.2 压缩感知理论(Compressed/Compressive Sensing/Sampling, CS) (3)1.3 无线传感器网络 (6)1.3.1 无线传感器网络概述 (6)1.3.2 无线传感器网络数据压缩的必要性 (7)1.4 本文主要工作和内容安排 (8)第2章压缩感知理论 (9)2.1压缩感知的前提条件—稀疏性和不相干性 (10)2.2 三个关键技术 (13)2.3信号的稀疏表示 (13)2.4 观测矩阵设计 (15)2.5 稀疏信号的重构 (17)2.6 重构算法 (18)2.7 压缩感知优势及不足 (20)2.8 压缩感知在传感网中的观测方式 (21)第3章压缩感知理论应用概述 (22)3.1 压缩成像 (22)3.2 模拟信息转换 (23)3.3 生物传感 (23)3.4 本章小结 (24)第4章 CS在无线传感网中的应用 (24)4.1 研究背景 (25)4.1.1 基于感知数据相关性的压缩 (25)4.1.2传统压缩重构方法 (25)4.1.3 图像压缩重构质量的评价 (26)4.2 压缩感知理论算法对一维信号的实现 (28)4.2.1 CS用于WSN的优势 (28)4.2.2 观测重构模型 (28)4.2.2 正交匹配追踪算法(OMP) (29)4.2.3 算法的实现及结果分析 (30)4.3 压缩感知理论算法对二维图像重构的实现 (34)4.3.1 基于小波变换的分块压缩感知理论 (34)4.3.2 实现步骤 (35)4.3.3 重构结果及分析 (38)4.4 本章小结 (42)第5章总结与展望 (42)5.1 工作总结 (42)5.2 后续展望 (43)参考文献 (43)致谢 (45)附录 (46)摘要数据压缩技术是提高无线数据传输速度的有效措施之一。
Matlab技术图像压缩算法
Matlab技术图像压缩算法图像压缩是数字图像处理中的一项重要技术,它通过减少图像数据的冗余性,实现图像数据的压缩和存储。
在实际应用中,我们常常需要在保证图像质量的前提下,尽可能减少图像的存储空间和传输带宽。
Matlab作为一种功能强大的科学计算软件,提供了一系列图像压缩的算法和工具,本文将介绍一些常用的Matlab技术图像压缩算法。
一、离散余弦变换(DCT)算法离散余弦变换是一种广泛应用于图像压缩的算法。
DCT算法将图像分解为一系列互不相关的频域分量,通过对这些分量进行量化和编码,实现图像的压缩。
在Matlab中,可以使用dct2函数对图像进行离散余弦变换。
首先,需要将原始图像转换为灰度图像,然后将像素值缩放到(-127,127)的范围内。
接下来,可以使用dct2函数对图像进行离散余弦变换,得到图像的频域分量。
在量化阶段,可以选择不同的量化步长来控制图像的压缩比。
较大的量化步长将导致更高的压缩比,但同时也会引入更多的失真。
在编码阶段,可以使用Huffman编码等技术对量化后的系数进行编码,进一步减小图像的存储空间。
二、小波变换(Wavelet Transform)算法小波变换是另一种常用的图像压缩算法。
相比于离散余弦变换,小波变换能够更好地捕捉到图像的局部特征,提供更高的压缩效果。
在Matlab中,可以使用wavedec2函数对图像进行小波变换。
首先,需要将原始图像转换为灰度图像,然后对图像进行小波分解。
分解得到的低频分量和高频分量之间存在一种层次结构,可以选择保留较低频的分量来实现不同程度的压缩。
在重构阶段,可以使用waverec2函数将图像的小波分量进行重构,得到压缩后的图像。
与DCT算法类似,小波变换也可以通过量化和编码来进一步减小图像的存储空间。
三、向量量化(Vector Quantization)算法向量量化是一种基于聚类的图像压缩算法。
它将图像分成多个不重叠的区域,然后将每个区域表示为一个固定长度的向量。
matlab压缩JPEG实验及程序
实验四JPEG压缩一、实验原理1、数据分块对图像进行编码前,将每个分量图像分割成不重叠的8×8像素块,每一个8×8像素块称为一个数据单元(DU)。
在彩色图像中,JPEG分别压缩图像的每个彩色分量。
虽然JPEG可以压缩通常的红绿蓝分量,但在YCbCr 空间的压缩效果会更好。
这是因为人眼对色彩的变化不如对亮度的变化敏感,因而对色彩的编码可以比对亮度的编码粗糙些,这主要体现在不同的采样频率和量化精度上。
因此,编码前一般先将图像从RGB空间转换到YCbCr 空间,再把各分量图像分割成8×8数据块。
在对图像采样时,可以采用不同的采样频率,这种技术称为二次采样。
由于亮度比色彩更重要,因而对Y分量的采样频率可高于对Cb、Cr的采样频率,这样有利于节省存储空间。
常用的采样方案有YUV422和YUV411。
把采样频率最低的分量图像中一个DU所对应的像区上覆盖的所有各分量上的DU按顺序编组为一个最小编码单元(MCU)。
对灰度图像而言,只有一个Y分量,MCU就是一个数据单元。
而对彩色图像而言,以4:1:1的采样方案为例,则一个MCU由4个Y分量的DU、1个Cb分量的DU和1个Cr 分量的DU组成。
2、DCT处理图像数据块分割后,即以MCU为单位顺序将DU进行二维离散余弦变换。
对以无符号数表示的具有P位精度的输入数据,在DCT前要减去2P-1,转换成有符号数,而在IDCT后,应加上2P-1,转换成无符号数。
对每个8×8的数据块DU进行DCT后,得到的64个系数代表了该图像块的频率成分,其中低频分量集中在左上角,高频分量分布在右下角。
系数矩阵左上角的叫做直流(DC)系数,它代表了该数据块的平均值,其余63个叫交流(AC)系数。
3、系数量化在DCT处理中得到的64个系数中,低频分量包含了图像亮度等主要信息。
在从空间域到频域的变换中,图像中的缓慢变化比快速变化更易引起人眼的注意,所以在重建图像时,低频分量的重要性高于高频分量。
在Matlab中进行数据压缩的技术实现
在Matlab中进行数据压缩的技术实现数据压缩是一种常见的数据处理技术,用于减少数据占用的存储空间和传输带宽。
在大数据时代,数据压缩成为了非常重要的技术之一。
Matlab作为一种强大的数学计算软件,也提供了丰富的数据压缩工具和算法。
本文将介绍在Matlab中进行数据压缩的技术实现。
1. 概述数据压缩可以分为有损压缩和无损压缩两种类型。
有损压缩是指在压缩过程中会丢失部分数据变化的细节,但可以大幅减少数据的存储空间。
无损压缩则是保证经压缩和解压缩后数据的完全一致性。
2. 无损压缩在Matlab中,无损压缩常常使用的是一些经典的算法,如Huffman编码、Lempel-Ziv-Welch (LZW)编码和自适应算术编码等。
Huffman编码是一种基于字符频率统计的压缩算法。
在Matlab中,可以使用`huffmandict`函数生成Huffman编码所需的编码字典,然后使用`huffmanenco`函数对数据进行编码,使用`huffmandeco`函数进行解码。
LZW编码是一种无损的字典压缩算法。
在Matlab中,可以使用`lzwenc`函数对数据进行编码,使用`lzwdec`函数进行解码。
自适应算术编码是一种根据数据概率动态更新编码表的压缩算法。
在Matlab 中,可以使用`arithenco`函数对数据进行编码,使用`arithdeco`函数进行解码。
这些无损压缩算法在Matlab中的实现简单而高效,能够有效地减少数据的存储空间。
3. 有损压缩有损压缩常用于图像、音频和视频等需要高压缩比的数据。
在Matlab中,有损压缩常常使用的是一些经典的算法,如JPEG和MP3等。
JPEG(Joint Photographic Experts Group)是一种广泛应用于图像压缩的有损压缩算法。
在Matlab中,可以使用`imresize`函数将图像进行降采样,使用`dct2`函数对图像进行离散余弦变换,然后使用量化矩阵将高频分量进行量化,再使用`huffmanenco`函数对量化后的数据进行哈夫曼编码。
如何在Matlab中进行图像压缩和图像加密
如何在Matlab中进行图像压缩和图像加密图像压缩和图像加密是图像处理中的两个重要方面。
图像压缩可以将图像的数据量减小,从而方便存储和传输;而图像加密可以保护图像的机密性,防止未授权的访问和篡改。
Matlab作为一种强大的数学软件,也提供了丰富的功能来实现图像压缩和图像加密。
本文将介绍如何在Matlab中进行图像压缩和图像加密的方法和技巧。
一、图像压缩图像压缩可以分为有损压缩和无损压缩两种方式。
有损压缩可以在保留人眼感知的主要信息的前提下,通过抛弃一些不重要的细节来减小图像的数据量。
无损压缩则可以完全恢复原始图像的每个像素点的数值,但通常会导致较大的压缩比。
在Matlab中,有许多算法可以用于图像压缩。
其中最常用的算法之一是离散余弦变换(DCT)。
DCT可以将图像转换为一组频域系数,通过保留部分重要的低频系数来实现压缩。
在Matlab中,可以使用dct2函数进行二维离散余弦变换,使用idct2函数进行反变换。
除了DCT,小波变换也是常用的图像压缩算法。
小波变换基于信号在时频域的分析,可以将图像划分为不同的尺度和方向,并通过保留部分重要的小波系数来实现压缩。
Matlab提供了多个小波变换的函数,如wavedec2和waverec2。
另外,还有一些其他的图像压缩算法,如JPEG、JPEG2000、PNG等。
这些算法可以在压缩比和图像质量之间做出不同的权衡。
Matlab中可以使用imwrite函数来实现这些压缩算法,你可以指定压缩比、图像质量等参数。
二、图像加密图像加密是保护图像的机密性和完整性的一种方法。
常见的图像加密算法包括DES、AES、RSA等。
这些算法使用不同的加密密钥和算法来对图像数据进行加密和解密。
在Matlab中,可以使用一些函数和工具箱来实现图像加密。
例如,可以使用.ftp.FTP这个类来实现对图像文件的加密上传和解密下载。
你可以使用ftp函数来连接FTP服务器,并使用put和get函数来上传和下载加密的图像文件。
如何使用Matlab进行图像压缩与解压
如何使用Matlab进行图像压缩与解压1.引言图像是数字时代中不可或缺的一部分,它们在各种领域中扮演着重要角色,如电视、电影、医学和计算机视觉等。
然而,随着图像质量和分辨率的提升,图像的文件大小也大幅增加,对存储和传输带来了不小的挑战。
为解决这一问题,图像压缩技术应运而生。
本文将介绍如何使用Matlab进行图像压缩与解压,以提升图像的存储和传输效率。
2.图像压缩的基本原理图像压缩的目标是通过减少图像文件的大小来节省存储空间和传输带宽。
它通常分为有损压缩和无损压缩两种类型。
有损压缩通过牺牲一部分图像细节来减小文件大小,而无损压缩则保持图像的完整性。
本文主要讨论有损压缩方法。
有损压缩的主要原理是通过利用图像的冗余性和视觉感知特性来去除冗余信息和减少图像细节。
常见的有损压缩方法有基于变换的压缩和基于预测的压缩。
其中,基于变换的压缩方法利用离散余弦变换(DCT)或小波变换等将图像转换成频域表示,然后通过量化和熵编码等步骤来减少数据量。
基于预测的压缩方法则通过对图像中的像素进行预测,并对预测误差进行编码来减小数据量。
3.使用Matlab进行图像压缩Matlab是一种功能强大的数学软件,也是进行图像处理和压缩的理想选择。
Matlab提供了丰富的图像处理工具箱,使我们能够轻松地实现图像压缩算法。
首先,我们需要将图像加载到Matlab中。
通过使用imread函数,我们可以将图像文件读取为一个矩阵。
```matlabimage = imread('image.jpg');```然后,我们可以使用不同的压缩算法对图像进行压缩。
以基于DCT的压缩为例,我们可以使用dct2函数将图像转换为频域表示。
```matlabdct_image = dct2(image);```接下来,我们可以对频域表示的图像进行量化。
量化是将图像的频域系数映射到一组有限的离散值的过程。
可以通过设计一个量化矩阵来控制图像的压缩比率。
MATLAB图象压缩讲解
1.图像压缩的概念减少表示数字图像时需要的数据量2.图像压缩的基本原理去除多余数据.以数学的观点来看,这一过程实际上就是将二维像素阵列变换为一个在统计上无关联的数据集合图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码.图像数据之所以能被压缩,就是因为数据中存在着冗余。
图像数据的冗余主要表现为:(1)图像中相邻像素间的相关性引起的空间冗余;(2)图像序列中不同帧之间存在相关性引起的时间冗余;(3)不同彩色平面或频谱带的相关性引起的频谱冗余。
3数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。
由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。
信息时代带来了“信息爆炸”,使数据量大增,因此,无论传输或存储都需要对数据进行有效的压缩。
在遥感技术中,各种航天探测器采用压缩编码技术,将获取的巨大信息送回地面。
图像压缩是数据压缩技术在数字图像上的应用,它的目的是减少图像数据中的冗余信息从而用更加高效的格式存储和传输数据。
4、图像压缩基本方法图像压缩可以是有损数据压缩也可以是无损数据压缩。
对于如绘制的技术图、图表或者漫画优先使用无损压缩,这是因为有损压缩方法,尤其是在低的位速条件下将会带来压缩失真。
如医疗图像或者用于存档的扫描图像等这些有价值的内容的压缩也尽量选择无损压缩方法。
有损方法非常适合于自然的图像,例如一些应用中图像的微小损失是可以接受的(有时是无法感知的),这样就可以大幅度地减小位速。
从压缩编码算法原理上可以分为以下3类:(1)无损压缩编码种类哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。
(2)有损压缩编码种类预测编码,DPCM,运动补偿;频率域方法:正交变换编码(如DCT),子带编码;空间域方法:统计分块编码;模型方法:分形编码,模型基编码;基于重要性:滤波,子采样,比特分配,向量量化;(3)混合编码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab的图像压缩技术
一.目的要求
掌握Matlab图像图像压缩技术原理和方法。
理解有损压缩和无损压缩的概念,了解几种常用的图像压缩编码方式,利用matlab进行图像压缩算法验证。
二.实验内容
1、观察颜色映像矩阵的元素
>> hot(8)
ans =
0.3333 0 0
0.6667 0 0
1.0000 0 0
1.0000 0.3333 0
1.0000 0.6667 0
1.0000 1.0000 0
1.0000 1.0000 0.5000
1.0000 1.0000 1.0000
数据显示第一行是1/3红色,最后一行是白色。
2、pcolor显示颜色映像
>> n=16;
>> colormap(jet(n));
>> pcolor([1:n+1;1:n+1]);
>> title('Using Pcolor to Display a Color )Map');
图2 显示颜色映像
3、colorbar显示当当前坐标轴的颜色映像>> [x,y,z]=peaks;
>> mesh(x,y,z);
>> colormap(hsv);
>> axis([-3 3 -3 3 -6 8]);
>> colorbar;
图3 显示当前坐标轴的颜色映像
4、图像格式转换
g=rgb2gray(I);
g=rgb2gray(I);
>> imshow(g),colorbar;
图4-1 原图像saturn.png
图4-2转换后的图像
5、求解图像的二唯傅里叶频谱
I=imread('cameraman.tif');
>> imshow(I)
>>
J=fftshift(fft2(I));
>> figure;
>> imshow(log(abs(J)),[8,10])
图5-1 原图像cameraman.png
图5-2 频谱图
将图像更换一下
I=imread('pout.tif'); imshow(I)
J=fftshift(fft2(I)); figure;
imshow(log(abs(J)),[8,10])
图5-3 原始图 pout.tif
图5-4 频谱图
6、利用DCT变换进行图像压缩
RGB=imread('peppers.png');
>> I=rgb2gray(RGB);
>> J=dct2(I);
>> imshow(log(abs(J)),[]),colormap(jet(64)),colorbar
图6-1 DCT变换后二维变换谱
J(abs(J)<10)=0;
>> K=idct2(J); %逆变换
>> figure,imshow(I)
figure,imshow(K,[0 255])
图6-2 原始图像
图6-3 压缩还原后的图像
仔细看我们可以发现,压缩还原后的图像比较模糊。
7、利用离散余弦变换进行JPEG图像压缩
>> I=imread('cameraman.tif');
>> I=im2double(I);
>> T=dctmtx(8); %产生二维DCT变换矩阵
>> B=blkproc(I,[8 8],'P1.*x',T,T'); %改成点乘
>> mask=[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 ;zeros(4,8)] %二值掩膜用来压缩DCT系数
mask =
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
>> B2=blkproc(B,[8 8],'P1*x',mask); %只保留10个系数>> I2=blkproc(B2,[8 8],'P1*x*P2',T,T'); %逆DCT
>> subplot(1,2,1);
>> imshow(I);title('原图像');
>> subplot(1,2,2);
>> imshow(I2);title('压缩图像');
图7-1 原图像和第一种压缩后的图像
>> mask=[1 1 0 0 0 0 0 0;1 0 0 0 0 0 0 0 ;zeros(6,8)] mask =
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
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
图7-2 原图像和第二种压缩后的图像
>> mask=[1 0 0 0 0 0 0 0 ;zeros(7,8)]
mask =
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 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
图7-3 原图像和第三种压缩后的图像
比较三种情况。
mask舍弃系数越多,图像越模糊。
压缩应在最合理近似原图像下使用最少系数。
1、图像中哪些信息主要,哪些信息次要?
需要传达给别人的部分是主要的。
其他是次要的。
例如肖像图片,肖像部分是主要的,其背景是次要的。
为了证明当时的场景,场景就是主要的了,而人物就变成次要的。
描述风景,人物是次要的,背景是主要的。
主要和次要是相对的。
DCT变换后图像变成了1.0 代号 0 的就是次要冗余信息 1 就是主要信息DCT变换主要作用就是把图像信息集中在较小的一部分利于图像处理。
2、简述离散余弦变换原理。
DCT变换和FFT变换都属于变换压缩方法(TransformCompression),变换压缩的一个特点是将从前密度均匀的信息分布变换为密度不同的信息分布。
在图像中,低频部分的信息量要大于高频部分的信息量,尽管低频部分的数据量比高频部分的数据量要小的多。
例如删除掉占50%存储空间的高频部分,信息量的损失可能还不到5%。
压缩过程为:
(1)首次将输入图像分解为8*8或16*16的块,然后对每个子块进行DCT 变换。
(2)将变换后得到的量化的DCT系数进行编码和传送形成压缩后电脑图像格式。
解压过程:
(1)对每个8*8或16*16的块进行DCT反变换。
(2)将每个反变换矩阵的块合成一个单一的图像。
余弦变换有把高度相关数据能量集中的趋势,DCT变换后能量集中在矩阵的左上角,右下角大多数DCT系数接近于0。
对于通常图像,舍弃这些系数,并不会对重构图像的画面质量带来显著下降。
所以利用DCT变换可以节约大量压缩空间。
压缩应在最合理近似原图像下使用最少系数。