从前几讲SVD等就可以隐约感觉出,换基可以大幅度减少计算量,尤其是换成正交基,这一讲就讲两个非常好的基,傅里叶基和小波基。他们主要用于图像和视频压缩
图像压缩(Compression of images)
考虑一个图像压缩的例子: 我们有一张512x512的图像。在我们的标准基中,每个像素的标识就是像素中的灰度/颜色值。 这样一张图片就至少需要
在JPEG标准中,图像被分解成8x8 的小方块,共64像素。每一个小方阵的亮度信息(原基)被换基。换基之后有一些系数很小的基向量(在图像中占的成本比例很低)就被删除(压缩)掉。从而达到压缩的目的:
在视频压缩中,我们不仅仅要考虑每帧图像的压缩,还要考虑帧与帧之间的压缩。一帧和一帧之间的变换一般是连续的,这一帧和下一帧很可能很大一部分都一样,只有一部分会变,其余的部分不变。这样就给压缩提供了条件。
小波基(The Haar wavelet basis)
除了傅里叶基,还有一个基非常火爆: 小波基:
最近的JPEG标准已经使用小波基了。小波基基本是由一半1和一半-1组成的,而且两两基向量正交。性质非常之好。
压缩和矩阵
线性代数让我们可以选择一组很厉害的基,比如傅里叶基或者小波基,进行如下转换:
对于同一个变换,可以采用N多种基,这些基组成的矩阵是相似的
选择基需要:
- 这组基所组成的矩阵对于矩阵乘法和取逆要比较好算
- 转换后一些基的系数趋近于0,这样我们就可以把这些系数干成0,实现压缩的目的。
换基
假设W是由新的基下的每一个基作为列向量所组成的矩阵,x是旧基下的向量,那么x转到新基下的向量c可以表示为:
假设有一个线性变换T, A是描述这个线性变换的矩阵,工作在
习题
题1 验证小波基的正交性,调整他们的长度使得小波基长度为1
答 这题简直暴力透了,一点技术含量都没有。。上课的时候给的小波基如下:
可以验证第一列和后面所有列点积为0,你可以随便调一列和另外所有各列点积来验证正交性。然后第二问。。咋办?单位化呗。
例
回头再补,先直接看视频: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)');
原图和处理后的图如下:
原图经过DCT变换后的图像如下:
可以看到,绝大部分能量都集中在了低频部分,高频部分能量不多