python SVD压缩图像的实现代码
2019-11-06 07:04
1901 查看
前言
利用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)
原图
取二十个特征值
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- Roberts、Sobel、Prewitt、Kirsch、Canny、Laplacian图像边缘检测原理及其代码实现(Python3)
- 将RGB图像数据压缩成jpg格式图片的代码实现
- python使用pil进行图像处理(等比例压缩、裁剪)实例代码
- python实现图片压缩代码实例
- 3行Python代码实现图像照片抠图和换底色的方法
- 能分析压缩的日志,且基于文件输入的PYTHON代码实现
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- 转:PAMIE- Python实现IE自动化的模块(附 网易注册代码)
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- python 查找文件夹下所有文件 实现代码
- 400多行Python代码实现了一个FTP服务器
- ESC之ESC.wsf可以实现javascript的代码压缩附使用方法第1/5页
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- jquery+.net实现类似开心网图像缩放截取功能(附代码下载)
- 图像实现代码
- php中使用Imagick实现图像直方图的实现代码
- C#下的webservcie 实现代码和 在vc和python下的调用实现(原创)
- ssh批量登录并执行命令的python实现代码
- ESC之ESC.wsf可以实现javascript的代码压缩附使用方法第1/5页