matlab图像压缩_MIT线性代数笔记3.7(图像压缩,换基)

本文介绍了图像压缩的基本原理,特别是在JPEG标准中的应用。通过换基,如傅里叶基和小波基,可以减少计算量并实现图像压缩。小波基因其正交性和利于压缩的特性在现代图像压缩标准中得到应用。文章还提到了MATLAB中的dct2函数在图像低通滤波中的作用,展示了原图与处理后的图像对比。
摘要由CSDN通过智能技术生成

4b97c308a3a27e9813adee31a40a1709.png

从前几讲SVD等就可以隐约感觉出,换基可以大幅度减少计算量,尤其是换成正交基,这一讲就讲两个非常好的基,傅里叶基和小波基。他们主要用于图像和视频压缩

图像压缩(Compression of images)

考虑一个图像压缩的例子: 我们有一张512x512的图像。在我们的标准基中,每个像素的标识就是像素中的灰度/颜色值。 这样一张图片就至少需要

equation?tex=%28512%29%5E%7B2%7D 的空间,太大了。换基!换什么基呢?比如这个傅里叶基(JPEG里就用的这种基)

5c9cfe3a07968d9a705a0bb05ceb16fd.png
傅里叶基

在JPEG标准中,图像被分解成8x8 的小方块,共64像素。每一个小方阵的亮度信息(原基)被换基。换基之后有一些系数很小的基向量(在图像中占的成本比例很低)就被删除(压缩)掉。从而达到压缩的目的:

4ba4ff91470c8a1a5057701c948dedd5.png
图像压缩的过程

在视频压缩中,我们不仅仅要考虑每帧图像的压缩,还要考虑帧与帧之间的压缩。一帧和一帧之间的变换一般是连续的,这一帧和下一帧很可能很大一部分都一样,只有一部分会变,其余的部分不变。这样就给压缩提供了条件。

小波基(The Haar wavelet basis)

除了傅里叶基,还有一个基非常火爆: 小波基:

3e00e4be59385536fc7dd36a248ab6bc.png
小波基

最近的JPEG标准已经使用小波基了。小波基基本是由一半1和一半-1组成的,而且两两基向量正交。性质非常之好。

压缩和矩阵

线性代数让我们可以选择一组很厉害的基,比如傅里叶基或者小波基,进行如下转换:

equation?tex=%5Cmathbf%7Bx%7D%3Dc_%7B1%7D+%5Cmathbf%7Bw%7D_%7B1%7D%2B%5Ccdots%2Bc_%7B8%7D+%5Cmathbf%7Bw%7D_%7B8%7D

对于同一个变换,可以采用N多种基,这些基组成的矩阵是相似的

选择基需要:

  • 这组基所组成的矩阵对于矩阵乘法和取逆要比较好算
  • 转换后一些基的系数趋近于0,这样我们就可以把这些系数干成0,实现压缩的目的。

换基

假设W是由新的基下的每一个基作为列向量所组成的矩阵,x是旧基下的向量,那么x转到新基下的向量c可以表示为:

equation?tex=%5Cmathbf%7Bx%7D%3DW+%5Cmathbf%7Bc%7D

假设有一个线性变换T, A是描述这个线性变换的矩阵,工作在

equation?tex=%5Cmathbf%7BV%7D_%7B1%7D%2C+%5Cmathbf%7BV%7D_%7B2%7D%2C+%5Cdots%2C+%5Cmathbf%7BV%7D_%7B8%7D 这一组基下,B也是描述这个线性变换的矩阵,工作在另外一组基下
equation?tex=%5Cmathbf%7BW%7D_%7B1%7D%2C+%5Cmathbf%7BW%7D_%7B2%7D%2C+%5Cldots%2C+%5Cmathbf%7BW%7D_%7B8%7D 。事实上,A和B必然是相似矩阵!,有
equation?tex=B%3DM%5E%7B-1%7D+A+M

习题

题1 验证小波基的正交性,调整他们的长度使得小波基长度为1

答 这题简直暴力透了,一点技术含量都没有。。上课的时候给的小波基如下:

bf9e80d782d4b25db51a93e98ed64642.png

可以验证第一列和后面所有列点积为0,你可以随便调一列和另外所有各列点积来验证正交性。然后第二问。。咋办?单位化呗。

1f3706b4238d4af91b5f7c10f52e75d7.png

8e25f2977ac45ce0592cb2ed10ef673c.png

回头再补,先直接看视频:https://www.bilibili.com/video/av36568126/?p=68

番外

写到这里感觉不过瘾,心理空空的,图像压缩这么一个厉害的应用题目到这里就完了?。抽空看了下matlab ,我打算用一个小例子来结束这一讲的笔记吧:matlab的 dct2函数

这是matlab2019 dct2的原生例子,描述的是利用dct(余弦变换将一副图像的高频分量去掉(低通滤波))。

clear;
clc;


RGB = imread('autumn.tif');
I = rgb2gray(RGB);

% 把I 进行dct变换
J = dct2(I);


figure
% 打印J(频谱图)
imshow(log(abs(J)),[])
colormap(gca,jet(64))
colorbar

%去掉高频分量
J(abs(J) < 20) = 0;

%逆变换成时域图像
K = idct2(J);

figure
imshowpair(I,K,'montage')
title('Original Grayscale Image (Left) and Processed Image (Right)');

原图和处理后的图如下:

6fc108b8b330f1981fb8a2761f2327da.png

原图经过DCT变换后的图像如下:

a46dd143426a04782a6ae4065da48aae.png

可以看到,绝大部分能量都集中在了低频部分,高频部分能量不多

调用自定义函数解决题目: 1.读取自然图像、生成合成图像、高相关图像、高去相关图像,调用yasuo.m函数,完成压缩,并显示不同像素值的图像 2.读取自然图像、生成合成图像、高相关图像、高去相关图像,调用yasuo.m函数,完成压缩,并显示不同像素值的图像;调用dfff.m,得到傅里叶变换后的图像 3.读取自然图像、生成合成图像、高相关图像、高去相关图像,fft中心变换,得到傅里叶变换后的图像,调用fwhtdya2d.m,得到walsh变换后的图像,进行两种变换的对比 4.读取自然图像、生成合成图像、高相关图像、高去相关图像,调用yasuo.m函数,完成压缩,并显示不同像素值的图像;调用dfff.m,得到傅里叶变换后的图像傅里叶变换需要的时间,显示变换后的图像,显示傅里叶变换时间随图像像素的变化 5.调用butterworthw.m,使用不同的阶数:2,5,10,显示不同阶数butterworth高通滤波和低通滤波滤波器的传递函数和处理后的图像,用于对比阶数对图像处理的影响 6.调用butterworthw.m,显示原图像、原图像频谱、低通滤波、高通滤波的传递函数,以及滤波器处理后的图像 7.读取自然图像、生成合成图像、高相关图像、高去相关图像,使用标准差为0.1、0.5、0.9的拉普拉斯高斯滤波器进行滤波处理4种图像,同时显示原图像和滤波处理后图像 8.读取自然图像,转换成灰度图片,计算其直方图,并两次增强,储存两次增强的图像,同时显示原图像、增强图像、再次增强图像和它们的直方图 9.读出自然图象,转换成灰度图片,生成合成图片,调用kirsch.m,提取图像边缘并显示,调用sobele.m,提取图像边缘并显示,同时显示自然图像、合成图像、它们kirsch提取边缘处理的图像、它们sobel提取边缘处理的图像,便于对比 10.读取自然图像、生成合成图像、高相关图像、高去相关图像,调用yasuo.m函数,完成压缩,并显示不同像素值的图像;调用dfff.m,得到傅里叶变换后的图像傅里叶变换、傅里叶中心变换需要的时间,显示不同种类图像变换后的图像,显示傅里叶变换、傅里叶中心变换所需时间时间随图像像素的变化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值