在压缩过程的第2步中,可以合理地舍弃一些系数,从而得到压缩的目的。在压缩过程的第2步,还可以采用RLE和Huffman编码来进一步压缩。
2)行程编码(RLE)原理: 例如如下这幅 的二值图像,
如果采用行程编码可以按如下格式保存
其中10和8表示图像的宽和高。在这个小例子中行程编码并没有起到压缩图像的作用。这是由于这个图的尺寸过小,当图像尺寸较大时行程编码还是不错的无损压缩方法。对于灰度图像和二值图像,用行程编码—般都有很高的压缩率。行程编码方法实现起来很容易,对于具有长重复值的串的压缩编码很有效,例如:对于有大面积的阴影或颜色相同的图像,使用这种方法压缩效果很好。很多位图文件格式都采用行程编码,如TIFF,PCX,GEM,BMP等。
3. 图像压缩编码的MATLAB程序语句
1)利用DCT变换进行图像压缩的MATLAB程序 RGB = imread('tire.tif'); I = rgb2gray(RGB); J = dct2(I);
imshow(log(abs(J)),[]), colormap(jet(64)), colorbar; J(abs(J) < 10) = 0; K = idct2(J); figure,imshow(I);
figure,imshow(K,[0 255]);
2)利用离散余弦变换进行JPEG图像压缩 I=imread('tire.tif'); %读入原图像;
I=im2double(I); %将原图像转为双精度数据类型; T=dctmtx(8); %产生二维DCT变换矩阵
B=blkproc(I,[8 8],'P1*x*P2',T,T'); %计算二维DCT,矩阵T及其转置T'是
DCT函数P1*x*P2的参数
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]; %二值掩膜,用来压缩DCT系
数,只留下DCT系数中左上角的10个
B2=blkproc(B,[8 8],'P1.*x',mask); %只保留DCT变换的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('压缩图像');%显示压缩后的图像。对比原始图像和压缩后的
图像,虽然舍弃了85%的DCT系数,但图像仍然清晰(当然有一些质量损失)
3)利用行程编码(RLE)进行图像压缩 I=checkerboard(10,2); %调入原图像 [m n]=size(I); J=[]; for i=n:m
value=I(i,1); num=1; for j=2:n
if I(i,j)==value num=num+1; else
J=[J num value]; num=1; value=I(i,j); end end
I=[J num value 0 0]; %添加的行判断位 0 0 end
disp('原图像大小:') whos('I');
disp('压缩图像大小:') whos('J');
disp('图像的压缩比:') disp(m*n/length(J))
I=checkerboard(10,2); %调入原图像 [m n]=size(I); J=[]; for i=n:m
value=I(i,1); num=1; for j=2:n
if I(i,j)==value num=num+1; else
J=[J num value]; num=1; value=I(i,j); end end
I=[J num value 0 0]; %添加的行判断位 0 0 end
disp('原图像大小:') whos('I');
disp('压缩图像大小:') whos('J');
disp('图像的压缩比:') disp(m*n/length(J))
Name Size Bytes Class
I 1x10 80 double array
Grand total is 10 elements using 80 bytes
压缩图像大小:
Name Size Bytes Class
J 1x6 48 double array
Grand total is 6 elements using 48 bytes
图像的压缩比: 266.6667 四、实验步骤
1.打开计算机,启动MATLAB程序;
2.调入给定的数字图像,并进行数据的行程(RLE)编码压缩处理; 3.将原图像分别以不同的位图文件格式进行“另保存”,比较它们的数据量。 4.记录和整理实验报告
五、实验仪器
1.计算机Pentium Ⅳ;CPU 586以上;32M以上内存;Windows XP操作系统;Matlab 7软件;
2.MATLAB等程序;
3.移动式存储器(软盘、U盘等)。 4.记录用的笔、纸。
六、实验报告内容
1.叙述实验过程;
2.提交实验的原始图像和结果图像。
七、思考题
1.图像中哪些信息是主要的,哪些信息是次要的? 2.简述离散余弦变换(DCT)和行程编码(RLE)的原理。
实验六 图像运算与区域处理
一、实验目的
学习并掌握图像运算的一些方法,便于图像的分析与理解。
二、实验内容和要求
a) 实现图像的算术运算(加、减、乘、除及求补运算)。 b) 实现图像的位逻辑运算。 c) 实现图像的几何运算。 d) 实现图像的空间变换。 e) 实现图像的区域处理。
学习使用以下函数:
imadd imnoise imsubtract imabsdiff immultiply imdivide imcomplement
bitand(位与) bitcmp(位补) bitor(位或) bitxor(位异或) bitshift(位移) roicolor roipoly roifilt2 roifill
例1 图像的位逻辑运算 I=imread('tire.tif'); J=imdivide(I,2); K1=bitand(I,J);
subplot(321),imshow(K1) title('图像的位与运算')
K2=bitcmp(I,8); %等价于28-I
…
例2 棋盘图像的创建 I=checkerboard(20); imshow(I)
J=checkerboard(20,2,3); %创建2*3的矩形棋盘 figure,imshow(J)
例3 仿射变换 I=imread('tire.tif');
tform=maketform('affine',[1 0 0;.5 1 0;0 0 1] ); %定义仿射变换的变换结构 J=imtransform(I,tform); %仿射变换 Subplot(1 2 1),imshow(I); Subplot(1 2 2),imshow(J);
三、实验步骤
1.打开计算机,启动MATLAB程序;
2.调入给定的数字图像,并进行图像运算; 3.对给定图像分别做区域处理。 4.记录和整理实验报告
四、实验仪器
1.计算机Pentium Ⅳ;CPU 586以上;32M以上内存;Windows XP操作系统;Matlab 7软件;