def pic_handle(img_data, sd, ori_size): """ 做PCA处理之后,在还原到原来的维度,然后显示,之后输出信噪比 """ Pca = PCA(sd, img_data) c_data, w_star = Pca.pca() # 进行pca降维,获取投影矩阵 w_star = np.real(w_star) print(w_star) new_data = w_star * w_star.T * c_data + Pca.mean # 还原到原来的维度 total_img = [] # 图片混合 for i in range(Pca.data_size): if len(total_img) == 0: total_img = new_data[:, i].T.reshape(ori_size) else: total_img = np.hstack( [total_img, new_data[:, i].T.reshape(ori_size)]) # 计算信噪比 print('信噪比:') for i in range(Pca.data_size): a = psnr(np.array(data[:, i].T), np.array(new_data[:, i].T)) print('图', i, '的信噪比为:', a, 'dB') # 处理图片 total_img = np.array(total_img).astype(np.uint8) cv2.imwrite('pca image.jpg', total_img) # 图片显示 cv2.imshow('pca image', total_img) cv2.waitKey(0)
# ================== Load Example Dataset =================== data = sio.loadmat('data\\ex7data1.mat') X = data['X'] m, n = X.shape fig = plt.figure() ax = fig.add_subplot(1, 2, 1) ax.plot(X[:, 0], X[:, 1], 'bo') # =============== Principal Component Analysis =============== pca = PCA() X_norm, mu, sigma = pca.featureNormalize(X) U, S = pca.pca(X_norm) p1 = mu p2 = mu + 1.5 * S[0] * U[:, 0].T data = np.r_[p1, p2].reshape([-1, 2]) ax.plot(data[:, 0], data[:, 1], '-k', linewidth=2) p2 = mu + 1.5 * S[1] * U[:, 1].T data = np.r_[p1, p2].reshape([-1, 2]) ax.plot(data[:, 0], data[:, 1], '-k', linewidth=2) # =================== Dimension Reduction =================== ax = fig.add_subplot(1, 2, 2) ax.plot(X_norm[:, 0], X_norm[:, 1], 'bo') K = 1
imlist = glob.glob("data/a_thumbs/*.jpg") #print imlist im = array(Image.open(imlist[0])) #imshow(im) #show() m, n = im.shape[0:2] imageCount = len(imlist) #create matrix to stor all flattened images imageMatrix = array([array(Image.open(im)).flatten() for im in imlist], 'f') #perform pca V, S, immean = PCA.pca(imageMatrix) #show some images (mean and 7 first modes figure() gray() subplot(2,4,1) imshow(immean.reshape(m,n)) for i in range(7): subplot(2,4,i+2) #convert images back to one dimension imshow(V[i].reshape(m,n)) #imshow(imageMatrix[i].reshape(m,n)) #show() f = open('font_pca_modes.pkl', 'wb')