网络编程
位置:首页>> 网络编程>> Python编程>> python SVD压缩图像的实现代码

python SVD压缩图像的实现代码

作者:cclplus  发布时间:2023-04-18 18:23:30 

标签:python,SVD,压缩

前言

利用SVD是可以对图像进行压缩的,其核心原因在于,图像的像素之间具有高度的相关性。

代码


# -*- coding: utf-8 -*-
'''
author@cclplus
date:2019/11/3
'''
import cv2
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
#转为u8类型
def restore1(u, sigma, v, k):
 m = len(u)
 n = len(v)
 a = np.zeros((m, n))
 a = np.dot(u[:, :k], np.diag(sigma[:k])).dot(v[:k, :])
 a[a < 0] = 0
 a[a > 255] = 255
 return np.rint(a).astype('uint8')
def SVD(frame,K=10):
 a = np.array(frame)
 #由于是彩 * 像,所以3通道。a的最内层数组为三个数,分别表示RGB,用来表示一个像素
 u_r, sigma_r, v_r = np.linalg.svd(a[:, :, 0])
 u_g, sigma_g, v_g = np.linalg.svd(a[:, :, 1])
 u_b, sigma_b, v_b = np.linalg.svd(a[:, :, 2])
 R = restore1(u_r, sigma_r, v_r, K)
 G = restore1(u_g, sigma_g, v_g, K)
 B = restore1(u_b, sigma_b, v_b, K)
 I = np.stack((R, G, B), axis = 2)
 return I

if __name__ == "__main__":
 mpl.rcParams['font.sans-serif'] = [u'simHei']
 mpl.rcParams['axes.unicode_minus'] = False
 frame = cv2.imread("./liuyifei.bmp")
 I = SVD(frame,40)
 plt.imshow(I)
 cv2.imwrite("out.bmp",I)

原图

python SVD压缩图像的实现代码

取二十个特征值

python SVD压缩图像的实现代码

来源:https://blog.csdn.net/m0_37772174/article/details/102886027

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com