精华内容
下载资源
问答
  • SVD图像压缩

    2018-10-19 18:40:09
    利用SVD分解师实现图像压缩,Python实现。奇异值数目暂定60,可更改
  • svd图像压缩

    2017-09-20 22:35:31
    matlab,利用svd算法进行图像压缩。代码主要是利用matlab提供的函数,通过简单的算法实现图像的压缩。压缩率高,同时失真率低,可以很好的实现压缩
  • 基于奇异值分解(SVD)的图像压缩  基于Matlab,将奇异值分解(SVD)用于图像的压缩,并同步显示奇异值的大小分布曲线、奇异值个数对压缩率的影响。对奇异值分解用于图像压缩整个过程的关键步骤都有图像记录。  ...

    基于奇异值分解(SVD)的图像压缩

           基于Matlab,将奇异值分解(SVD)用于图像的压缩,并同步显示奇异值的大小分布曲线、奇异值个数对压缩率的影响。对奇异值分解用于图像压缩整个过程的关键步骤都有图像记录。

           完整代码如下:

    %%%%%%%%%%%%%%%%%%%%%%%%%%
    %修改第9行的图像路径即可,图像格式不限
    %2013.1.12 yangxin_szu
    %%%%%%%%%%%%%%%%%%%%%%%%%%
    %%
    clear all;
    clc;
    %导入图像
    X = imread('F:\M_Material\egle.bmp');
    if (size(X,3) ~= 1) 
       X = rgb2gray(X);
    end
    %奇异值分解
    [U S V] = svd(double(X));
    %绘制奇异值的分布曲线
    plot(diag(S),'b-','LineWidth',3);
    title('图像矩阵的奇异值');
    ylabel('奇异值');
    %图像大小
    [m n] = size(X);
    %图像矩阵的秩
    Rank = rank(double(X));
    %显示原图
    figure,subplot(1,2,1),imshow(X);
    Image_Rank = ['图像矩阵的秩 = ' int2str(Rank)];
    title(Image_Rank,'Color','b');
    %%
    %循环改变奇异值选取的个数,动态观察图像压缩的效果
    %循环次数
    it = 1;
    iter = (Rank/4 - 1)/10 +1;
    %保存奇异值的个数
    K_Store = ones(iter);
    %保存不同奇异值个数对应的压缩比
    CR_store = ones(iter);
    for K=1:10:Rank/4
        K_Store(it) = K;
        %选取K个奇异值,并恢复原图
        R = U(:,1:K)*S(1:K,1:K)*V(:,1:K)';
        T = uint8(R);
        %显示恢复结果
        subplot(1,2,2),imshow(T);
        SVD_number = ['选取的奇异值的个数 = ' int2str(K)];
        title(SVD_number,'Color','b');
        %计算压缩比
        src_elements = m*n;
        compress_elements = m*K + K*K + K*n;
        compress_ratio = (1 - compress_elements/src_elements)*100;
        CR_store(it) = compress_ratio;
        it = it+1;
        fprintf('Rank = %d : K = %d 个: compress_ratio = %.2f\n',Rank,K,compress_ratio);
        %暂停0.5秒,便于观察效果
        pause(0.5);
    end
    %%
    %绘制奇异值个数与压缩比的关系曲线
    figure,plot(K_Store,CR_store,'b-','LineWidth',3);
    title('奇异值个数与压缩比的关系');
    xlabel('奇异值个数');
    ylabel('压缩比');
    

     

    程序运行结果如图所示:

    原图:

    奇异值大小的分布曲线:

    奇异值个数的不同对图像压缩率的影响:

    奇异值个数与图像压缩比的关系:

     

     

     

     

     

     

     


     

    展开全文
  • U,Sigma,VT = la.svd(myMat) SigRecon = mat(zeros((numSV, numSV))) for k in range(numSV):#construct diagonal matrix from vector SigRecon[k,k] = Sigma[k] reconMat = U[:,:numSV]*SigRecon*VT[:...
    # coding=utf-8
    from numpy import *
    from numpy import linalg as la
    
    def printMat(inMat, thresh=0.8):
        for i in range(32):
            for k in range(32):
                if float(inMat[i,k]) > thresh:
                    print (1,end='')
                else: print (0,end='')
            print ('')
    
    def imgCompress(numSV=3, thresh=0.8):
        myl = []
        for line in open(r'C:\Users\li\Downloads\machinelearninginaction\Ch14\0_5.txt').readlines():
            newRow = []
            for i in range(32):
                newRow.append(int(line[i]))
            myl.append(newRow)
        myMat = mat(myl)
        print( "****original matrix******")
        printMat(myMat, thresh)
        U,Sigma,VT = la.svd(myMat)
        SigRecon = mat(zeros((numSV, numSV)))
        for k in range(numSV):#construct diagonal matrix from vector
            SigRecon[k,k] = Sigma[k]
        reconMat = U[:,:numSV]*SigRecon*VT[:numSV,:]
        print ("****reconstructed matrix using %d singular values******" % numSV)
        printMat(reconMat, thresh)
        
    imgCompress()

    ****original matrix******
    00000000000000110000000000000000
    00000000000011111100000000000000
    00000000000111111110000000000000
    00000000001111111111000000000000
    00000000111111111111100000000000
    00000001111111111111110000000000
    00000000111111111111111000000000
    00000000111111100001111100000000
    00000001111111000001111100000000
    00000011111100000000111100000000
    00000011111100000000111110000000
    00000011111100000000011110000000
    00000011111100000000011110000000
    00000001111110000000001111000000
    00000011111110000000001111000000
    00000011111100000000001111000000
    00000001111100000000001111000000
    00000011111100000000001111000000
    00000001111100000000001111000000
    00000001111100000000011111000000
    00000000111110000000001111100000
    00000000111110000000001111100000
    00000000111110000000001111100000
    00000000111110000000011111000000
    00000000111110000000111111000000
    00000000111111000001111110000000
    00000000011111111111111110000000
    00000000001111111111111110000000
    00000000001111111111111110000000
    00000000000111111111111000000000
    00000000000011111111110000000000
    00000000000000111111000000000000
    ****reconstructed matrix using 3 singular values******
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000010111110000000000000
    00000000000011111110000000000000
    00000000000111111111000000000000
    00000000001111111111110000000000
    00000000001111111111110000000000
    00000000011100000000111000000000
    00000000111100000000111100000000
    00000001111100000000111100000000
    00000001111100000000011100000000
    00000001111100000000011100000000
    00000001111100000000011100000000
    00000000111100000000001111000000
    00000000111100000000001111000000
    00000000111100000000001111000000
    00000000111100000000001111000000
    00000000111100000000001111000000
    00000000111100000000001111000000
    00000000111100000000001110000000
    00000000111100000000001111000000
    00000000111100000000001111000000
    00000000111100000000001111000000
    00000000111100000000001111000000
    00000000111100000000001110000000
    00000000111100000000111100000000
    00000000001111111111111000000000
    00000000001111111111110000000000
    00000000001111111111110000000000
    00000000000011111111110000000000
    00000000000011111111100000000000
    00000000000000000000000000000000
    展开全文
  •  src="https://nbviewer.jupyter.org/github/wangxw1023/MachineLearningInAction-Camp/blob/master/SVD.ipynb" width="100%" height="1000">
    
    
    展开全文
  • SVD图像压缩步骤 对于RGB图像来说,对应三色层,对每一个色层进行SVD分解,得到U,S,VU, S, VU,S,V矩阵,设利用前K大奇异值进行图像压缩,即有: result=∑i=13Ui[:,1:K]∗S[1:K,1:K]∗VT[1:K,:]result = \sum_{i = 1}...

    SVD图像压缩步骤

    对于RGB图像来说,对应三色层,对每一个色层进行SVD分解,得到U,S,VU, S, V矩阵,设利用前K大奇异值进行图像压缩,即有:

    result=i=13Ui[:,1:K]S[1:K,1:K]VT[1:K,:]result = \sum_{i = 1}^{3}U_i[:, 1:K] * S[1:K, 1:K] * V^T[1:K, :]

    而对于灰度图像来说,只需要完成一层的运算即可。

    原图及不同保留度下压缩结果

    原图像:
    在这里插入图片描述
    不同保留度下的压缩结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Show me the code

    导包

    import numpy as np
    import matplotlib.pyplot as plt
    

    SVD图像压缩模块

    def zip_image_by_svd(origin_image, rate = 0.8):
        # 显示原图像
        plt.figure(figsize= (12, 12))
        plt.title("Origin Image")
        plt.imshow(origin_image)
        plt.show()
        
        print("\n\n======开始压缩======")
        # 提前开辟结果存放空间
        result = np.zeros(origin_image.shape)
    
        # 对原图像进行SVD分解
        u_shape = 0
        s_shape = 0
        vT_shape = 0
    
        for chan in range(3):
            # 对该层进行SVD分解
            U, sigma, V = np.linalg.svd(origin_image[:, :, chan])
            n_sigmas = 0
            temp = 0
    
            # 计算达到保留率需要的奇异值数量
            while (temp / np.sum(sigma)) < rate:
                temp += sigma[n_sigmas]
                n_sigmas += 1
    
            # 构建奇异值矩阵
            S = np.zeros((n_sigmas, n_sigmas))
    
            for i in range(n_sigmas):
                S[i, i] = sigma[i]
    
            # 构建结果
            result[:, :, chan] = (U[:, 0:n_sigmas].dot(S)).dot(V[0:n_sigmas, :])
            u_shape = U[:, 0:n_sigmas].shape
            s_shape = S.shape
            vT_shape = V[0:n_sigmas, :].shape
    
        # 归一化到[0, 1]
        for i in range(3):
            MAX = np.max(result[:, :, i])
            MIN = np.min(result[:, :, i])
            result[:, :, i] = (result[:, :, i] - MIN) / (MAX - MIN)
    
        # 调整到[0, 255]
        result  = np.round(result * 255).astype('int')
        
        
        # 显示压缩结果
        plt.figure(figsize= (12, 12))
        plt.imshow(result)
        plt.title("Result Image")
        plt.show()
    
        # 计算压缩率
        zip_rate =(origin_image.size -3 * (u_shape[0] * u_shape[1] + s_shape[0] * s_shape[1] + vT_shape[0] * vT_shape[1])) / (origin_image.size)
        
        print("保留率:        ", rate)
        print("所用奇异值数量为:", n_sigmas)
        print("原图大小:       ", origin_image.shape)
        print("压缩后用到的矩阵大小:3 x ({} + {} + {})". format(u_shape, s_shape, vT_shape))
        print("压缩率为:       ", zip_rate)
    

    主函数及其调用

    # 定义主函数
    def main():
        # 读入图像
        image_path = '/Users/tantaiyunfei/Desktop/图片/背景图/e32e0ab9393fb231aa3af9a71ac06a07.jpg'
        origin_image = plt.imread(image_path)
        
        # 利用自定义SVD图像压缩模块对图像进行压缩
        zip_image_by_svd(origin_image, rate = 0.8)
        
    # 主函数调用
    if __name__ == "__main__":
        main()
    
    展开全文
  • 利用SVD进行图像压缩

    2019-04-25 22:56:12
    利用SVD进行图像压缩 前边一篇文章中,总结了SVD相关的理论支持,老是一味的搞理论没有实践毕竟也是不行的,所以本文会简单的实现一个基于Python的图像压缩示例程序,来使用SVD进行简单图片的压缩以及还原实验。 ...
  • SVD用于图像压缩

    千次阅读 2018-05-18 14:46:57
    最近学习线性代数的有关东西,在看到奇异值分解(svd)时,发现了一个在图像压缩上的应用。 奇异值分解:在线性代数中,我们知道对任意一个矩阵都存在奇异值分解,,其中U和V是标准正交矩阵,而是一个对角矩阵,每一...
  • 基于SVD图像压缩

    2019-01-01 21:41:00
    基于SVD图像压缩 原始图像:手写数字,32* 32=1024像素。可以使用SVD来对数据降维 from numpy import linalg as la from numpy import * 一、分析Sigma的长度个数 通常保留矩阵80%~90%的能量,就可以得到...
  • 前言利用SVD是可以对图像进行压缩的,其核心原因在于,图像的像素之间具有高度的相关性。代码# -*- coding: utf-8 -*-'''author@cclplusdate:2019/11/3'''import cv2import matplotlib as mplimport numpy as np...
  • 前言利用SVD是可以对图像进行压缩的,其核心原因在于,图像的像素之间具有高度的相关性。代码# -*- coding: utf-8 -*-'''author@cclplusdate:2019/11/3'''import cv2import matplotlib as mplimport numpy as np...
  • 基于 SVD图像压缩

    2020-12-18 19:58:19
    # Convert RGB to grayscale img = plt.imshow(X) img.set_cmap('gray') plt.axis('off') plt.show() print(X.shape) # (2000, 1500) U, S, VT = np.linalg.svd(X,full_matrices=False) S = np.diag(S) j = 0 for r...
  • SVD 进行图像压缩

    2019-03-07 13:51:00
    \(A\) 为 \(m \times n\) 实矩阵, 记 SVD 的一般形式为 \[A = U\Sigma V',\] 其中 \(U=(u_1,\dots,u_m)\), \(V=(v_1,\dots,v_n)\) 为正交阵, \[ \Sigma = \begin{pmatrix} S & O\\ O & O \end{pmatrix},\...
  • 主要介绍了python SVD压缩图像的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • PCA:菜馆菜肴推荐系统、基于SVD图像压缩
  • cv2+svd分解 压缩图像

    2020-07-16 10:51:51
    import cv2 # v:vision 视觉 import numpy as np import matplotlib.pyplot as plt ...# 将原来的图像进行压缩 image = cv2.resize(image, dsize=(h, w)) # 调整RGB三个颜色的顺序-->BGR image =
  • 1. SVD图像压缩原理介绍 奇异值分解(singular value decomposition,SVD)是线性代数中一种重要的矩阵分解,在信号处理、统计学等领域有重要应用。 假设MMM是一个m×nm \times nm×n阶矩阵,其中的元素全部属于域...
  • 基于R语言SVD图像压缩方法

    千次阅读 2019-04-20 19:42:27
    图片的基本构成 假设我们有一个灰度图像(128×128,即128×128像素)。我们可以使用矩阵来表示这个图像。如果我们有彩色图像,用R中的readJEPG函数读取图片就可以...接下来,我们可以通过SVD分解矩阵,再通过消...
  • ​ 2.2.3 Sigular Value Decomposition(SVD) 2.3 The Appication of SVD in Image Compression 2.4 The Appropriate Number of Singular Values 3 Programs 4 Conclusion 5 References 1 Introduction ...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 263
精华内容 105
关键字:

svd图像压缩