【数模】奇异值分解SVD和图形处理

  • 介绍奇异值分解在图形压缩中的运用,并将简单介绍下Matlab对于图形和视频的处理

一、奇异值分解介绍

1.1 基本概念

  • 奇异值分解(Singular Value Decomposition,以下简称SVD)是线性代数中一种重要的矩阵分解:
    • U和V都是正交矩阵
    • ∑是奇异值矩阵(和A的大小相同,其主对角元素是从大到小排列的,这些对角元素称为奇异值,其他位置元素为0)

1.2 求∑的步骤

1.2.1 U的计算
1.2.2 V的计算
1.2.3 ∑的计算

1.3 利用SVD对数据进行"降维"

  • 举例:
  • 此处的"降维":更准确而言是使得矩阵的秩减小,矩阵大小并未改变。
  • 保留原矩阵的特征比例

二、Matlab对奇异值分解

  • 矩阵压缩

2.1 Matlab自带分解:[U,S,V] = svd(A)

% PPT_example.m文件
A = [4 0 1 6;0 0 5 1;2 1 3 2] % A : 3*4
[U,S,V] = svd(A)
% 注意:U*S*(V的转置) == A
% U:3*3 S:3*4 V : 4*4
U*S*V' - A 
% 因为浮点数计算的缘故,所以会有非常微小的偏差
% 1.0e-14 * 0.2665 = 0.000000000000002665
U(:,1:2)*S(1:2,1:2)*V(:,1:2)'
U(:,1:3)*S(1:3,1:3)*V(:,1:3)'  % 就是A

2.2 自定义的mysvd函数

  • 取自清风老师自定义的,不同于Matlab自带的:使用奇异值分解将矩阵A压缩到指定的特征比例

    % mysvd.m文件
    function [compress_A] = mysvd(A, ratio)
    % 输入变量
    % A:要压缩的m*n维的矩阵
    % ratio:(至少)要保留原矩阵的特征比例(100%表示不压缩)
    % 输出变量
    % compress_A:压缩后的矩阵



三、Matlab图形的处理

  • 图片压缩

3.1 RGB模式

  • RGB色彩(三原色):R代表Red(红色),G代表Green(绿色),B代表Blue(蓝色)。
    • 计算机定义颜色时R、G、 B三种成分的取值范围是0‐255,0表示没有刺激量,255表示刺激量达最大值。
    • R、G、B均为255时就合成了白光,R、G、B均为0时就形成了黑色。
    • 灰色图片:R、G、B三原色完全相同;否则称为彩色图片。

3.2 图片压缩的函数

  • 函数作用:利用SVD函数对图形进行压缩

  • 输入变量

    • photo_address:要压缩的图片存放的位置(建议输入完整的路径)
    • save_address:将压缩后的图片保存的位置(建议输入完整的路径)
    • ratio:要保留原矩阵的特征比例(100%表示不压缩)
    • greycompress: 如果该值等于1,则会彩色的原图片转换为灰色图片后再压缩;默认值为0,表示不进行转换
  • 输出变量:无(不需要输出,因为函数运行过程中已经将图片保存了)

    % photo_compress.m文件
    function []= photo_compress(photo_address, save_address,
    ratio, greycompress)

3.3 SVD压缩后的效果



四、视频分离为图片

4.1 video2photo.m代码文件

  • Matlab对视频的要求较高,有的原视频属性详细情况不带帧数,可以采用转化器转个视频格式(如迅捷视频转换器),否则可能会报如下错误:

    • 错误使用 VideoReader/init (line 619)
    • 无法确定所需的编解码器
  • video中的对象讲解

    %% 读取视频
    video_file='迅捷视频转换器转换后的新闻联播.mp4';
    video=VideoReader(video_file);
    frame_number = video.NumberOfFrames; %视频的总帧数

    %% 分离图片
    for i=1:30:frame_number % 这里演示的是每30帧数保存一次(如果每一帧都全部保存的话所要花费的时间很长)
    image_name=strcat('C:\Users\hc_lzp\Desktop\数学建模视频录制\第13讲.奇异值分解\代码和例题数据\将视频转成图片\图片\image_',num2str(i),'.jpg');
    Photo=read(video,i); %读出所在帧的图片对象
    imwrite(Photo,image_name); %将图片保存到指定的位置
    end

4.2 分离效果

4.3 批量处理文件夹内的所有图片

folder_name = 'C:\Users\hc_lzp\Desktop\数学建模视频录制\第13讲.奇异值分解\代码和例题数据\压缩文件夹内的所有图片\葫芦娃七兄弟';
dirOutput=dir(fullfile(folder_name, '*.jpg'));
files={dirOutput.name};
n = length(files);
ratio = 0.9;
for i = 1:n
	photoname = files(i);
	name = photoname{1};
	photo_address = fullfile(folder_name, name);
	disp(photo_address)
	save_address = fullfile(folder_name, strcat('compress_',name));
	photo_compress(photo_address, save_address, ratio)
end

五、SVD的评价和应用

5.1 SVD(奇异值分解)评价

  1. 优点:简化数据,去除噪声点,对数据降维(减少秩);
  2. 缺点:数据的转换可能难以理解;
  3. 适用于数据类型:数值型。
  • 通过SVD对数据的处理,可对原始数据进行精简,实际上是去除了噪声和冗余信息,以此达到了优化数据的目的。

5.2 SVD的另外两个重要应用

  • 潜在语义索引:最早的SVD应用之一就是信息检索,称利用SVD的方法为潜在语义检索(LSI)或隐形语义分析(LSA)
    • 有兴趣可以去阅读吴军老师的《数学之美》。
  • 推荐系统:SVD的另一个应用就是推荐系统,较为先进的推荐系统先利用SVD从数据中构建一个主题空间,然后再在该空间下计算相似度,以此提高推荐的效果。
相关推荐
Coovally AI模型快速验证18 分钟前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
可为测控1 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
Milk夜雨1 小时前
头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)
算法·贪心算法
BoBoo文睡不醒1 小时前
动态规划(DP)(细致讲解+例题分析)
算法·动态规划
apz_end2 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法
硬汉嵌入式2 小时前
《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风,开源流体吊坠,物联网在军工领域的应用,Unicode字符压缩解压
vscode·matlab·开源
仟濹3 小时前
【贪心算法】洛谷P1106 - 删数问题
c语言·c++·算法·贪心算法
CM莫问3 小时前
python实战(十五)——中文手写体数字图像CNN分类
人工智能·python·深度学习·算法·cnn·图像分类·手写体识别
sz66cm4 小时前
LeetCode刷题 -- 45.跳跃游戏 II
算法·leetcode
Amor风信子4 小时前
华为OD机试真题---战场索敌
java·开发语言·算法·华为od·华为