【老生谈算法】matlab实现图像压缩算法源码——图像压缩

Matlab的图像压缩技术源码

1、算法详解:

一.目的要求
掌握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');

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第1张图片

图2 显示颜色映像
3、colorbar显示当当前坐标轴的颜色映像

>> [x,y,z]=peaks;
>> mesh(x,y,z);

>> colormap(hsv);
>> axis([-3 3 -3 3 -6 8]);
>> colorbar;

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第2张图片

图3 显示当前坐标轴的颜色映像

4、图像格式转换

g=rgb2gray(I);
g=rgb2gray(I);
>> imshow(g),colorbar;

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第3张图片

图4-1 原图像saturn.png
【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第4张图片

图4-2转换后的图像

5、求解图像的二唯傅里叶频谱

I=imread('cameraman.tif');
>> imshow(I)
>>

J=fftshift(fft2(I));
>> figure;
>> imshow(log(abs(J)),[8,10])

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第5张图片
图5-1 原图像cameraman.png

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第6张图片
图5-2 频谱图

将图像更换一下

I=imread('pout.tif');
imshow(I)
J=fftshift(fft2(I));
figure;
imshow(log(abs(J)),[8,10])

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第7张图片
图5-3 原始图 pout.tif
【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第8张图片
图5-4 频谱图

6、利用DCT变换进行图像压缩

RGB=imread('peppers.png');
>> I=rgb2gray(RGB);
>> J=dct2(I);
>> imshow(log(abs(J)),[]),colormap(jet(64)),colorbar

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第9张图片
图6-1 DCT变换后二维变换谱

J(abs(J)<10)=0;
>> K=idct2(J);  %逆变换
>> figure,imshow(I)
figure,imshow(K,[0 255])

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第10张图片
图6-2 原始图像
【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第11张图片
图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('压缩图像');

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第12张图片

图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

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第13张图片

图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

【老生谈算法】matlab实现图像压缩算法源码——图像压缩_第14张图片

图7-3 原图像和第三种压缩后的图像

比较三种情况。mask舍弃系数越多,图像越模糊。压缩应在最合理近似原图像下使用最少系数。

1、图像中哪些信息主要,哪些信息次要?
需要传达给别人的部分是主要的。其他是次要的。例如肖像图片,肖像部分是主要的,其背景是次要的。为了证明当时的场景,场景就是主要的了,而人物就变成次要的。描述风景,人物是次要的,背景是主要的。主要和次要是相对的。
DCT变换后 图像变成了1.0 代号 0 的就是次要 冗余信息 1 就是主要信息
DCT变换 主要作用就是把图像信息集中在较小的一部分 利于图像处理。

2、简述离散余弦变换原理。
DCT变换和FFT变换都属于变换压缩方法(TransformCompression),变换压缩的一个特点是将从前密度均匀的信息分布变换为密度不同的信息分布。在图像中,低频部分的信息量要大于高频部分的信息量,尽管低频部分的数据量比高频部分的数据量要小的多。例如删除掉占50%存储空间的高频部分,信息量的损失可能还不到5%。

压缩过程为:
首次将输入图像分解为88或1616的块,然后对每个子块进行DCT变换。
将变换后得到的量化的DCT系数进行编码和传送形成压缩后电脑图像格式。
解压过程:
对每个88或1616的块进行DCT反变换。
将每个反变换矩阵的块合成一个单一的图像。

余弦变换有把高度相关数据能量集中的趋势,DCT变换后能量集中在矩阵的左上角,右下角大多数DCT系数接近于0。对于通常图像,舍弃这些系数,并不会对重构图像的画面质量带来显著下降。所以利用DCT变换可以节约大量压缩空间。压缩应在最合理近似原图像下使用最少系数。

你可能感兴趣的:(matlab精选项目源码,matlab,算法,图像处理)