基于python的图像降维之SVD、PCA

原理代码实现

SVD

import cv2.cv2 as cv
import numpy as np

img = cv.imread("lena.png")
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY) / 256.0

src = gray.copy()

u, s, v = np.linalg.svd(gray)
s = np.diag(s)
feature = 128
u, s, v = u[:, :feature], s[:feature, :feature], v[:feature, :]
gray = u.dot(s)
gray = gray.dot(v)

cv.imshow("src", src)
cv.imshow("lena", gray)
cv.waitKey(0)

PCA

import numpy as np
import cv2.cv2 as cv 
from PIL import Image

def pca(data,k):
    n_samples, n_features = data.shape
    # 求均值
    mean = np.array([np.mean(data[:,i]) for i in range(n_features)])
    normal_data = data - mean
    matrix_ = np.dot(np.transpose(normal_data),normal_data)
    eig_val, eig_vec = np.linalg.eig(matrix_)
    eigIndex = np.argsort(eig_val)
    eigVecIndex = eigIndex[:-(k+1):-1]
    feature = eig_vec[:,eigVecIndex]
    new_data = np.dot(normal_data,feature)
    rec_data = np.dot(new_data,np.transpose(feature)) + mean
    return rec_data


A = np.array([[2, 3], [1, 2]])
img = cv.imread("lena.png")
A = cv.cvtColor(img,cv.COLOR_BGR2GRAY) / 256.0
y = pca(A, 100)
cv.imshow("lean", y)
cv.waitKey(0)

sklearn实现

import numpy as np
import numpy as np
from sklearn.decomposition import PCA, TruncatedSVD
import cv2.cv2 as cv

img = cv.imread("lena.png")
A = cv.cvtColor(img,cv.COLOR_BGR2GRAY) / 256.0

# PCA
pca = PCA(n_components=10)
dst = pca.fit_transform(A)
dst = pca.inverse_transform(dst)

# SVD
svd = TruncatedSVD(n_components=10)
dst = svd.fit_transform(A)
dst = svd.inverse_transform(dst)

cv.imshow("lena", dst)
cv.waitKey(0)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值