python 图像压缩pca_对图像进行SVD和PCA降维,可用于压缩或者图像数据增强(python版)...

本文介绍了如何使用Python中的SVD和PCA方法对图像进行降维,以此实现图像压缩或数据增强。通过计算特征值和特征向量,选取主要成分重构图像,展示了具体代码实现。
摘要由CSDN通过智能技术生成

def svd(img, topk_percent=0.7):"""使用svd对图片降维,可作为一种数据增强手段

每列作为一个向量,先构建方阵,再求特征值 特征向量,取前N个主成分,再重构图像

:param img: 输入图像

:param topk_percent: 图像恢复率,

:return: img after svd"""img_src=img[...]if len(img.shape) == 3:

img_src=cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)

h, w=img_src.shape

data=np.asarray(img_src, np.double)#以下两种方式都可以

#method 1

U, s, V =np.linalg.svd(data)

K= round(len(s) *topk_percent)S=np.diag(s)

major_data=np.dot(U[:, :K], np.dot(S[:K, :K], V[:K, :]))## method 2

#feat_values, feat_vectors = np.linalg.eig(np.dot(data.T, data))

#feat_index = np.argsort(np.sqrt(feat_values), axis=0)[::-1]

#S = np.diag(feat_values)

#V = feat_vectors[:, feat_index]

#S_inv = np.asmatrix(S).I

#V_inv = np.asmatrix(V).I

#U = np.dot(np.dot(data, V), S_inv)

#K = round(S.shape[0] * topk_percent)

#major_data = np.dot(np.dot(U[:, :K], S[:K, :K]), V_inv[:K, :])

rebuild_img=np.asarray(major_data, np.uint8)

cv2.imshow('1', rebuild_img)

cv2.waitKey(0)returnrebuild_imgdef pca(img, topk_percent=0.7):"""使用pca对图片降维,可作为一种数据增强手段

每列作为一个向量,先0均值化,再求协方差矩阵的特征值和特征向量,取前N个主成分,再重构图像

:param img: 输入图像

:param topk_percent: 图像恢复率,

:return: img after pca"""img_src=img[...]if len(img.shape) == 3:

img_src=cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)print(img_src.shape)

h, w=img_src.shape

data=np.asarray(img_src, np.double)#计算每列的mean

_mean = np.mean(data, axis=0)

data-=_mean#以 列为变量计算方式,计算协方差矩阵

data_cov = np.cov(data, rowvar=False)

feat_values, feat_vectors=np.linalg.eig(data_cov)

feat_index= np.argsort(np.sqrt(feat_values), axis=0)[::-1]

V=feat_vectors[:, feat_index]

K= round(len(feat_values) *topk_percent)#重建图像

major_data = np.dot(np.dot(data, V[:, :K]), V[:, :K].T) +_mean

rebuild_img=np.asarray(major_data, np.uint8)

cv2.imshow('1', rebuild_img)

cv2.waitKey(0)return rebuild_img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值