pca增色python实现

时间:2019-01-07 02:55:19

标签: python pca

我正在尝试从AlexNet论文(2012年)中实现PCA颜色增强,但是以下代码似乎无效。

# original image is 400x600x3 of dtype uint8 

scaled_img = np.reshape(img,(img.shape[0]*img.shape[1],3))
scaled_img = scaled_img.astype('float32')

mean = np.mean(scaled_img, axis=0)
std = np.std(scaled_img, axis=0)

scaled_img -= mean
scaled_img /= std

cov = np.cov(scaled_img, rowvar=False)

lambdas, p = np.linalg.eig(cov)
alphas = np.random.normal(0, 0.1, 3)

# sort eigenvalues in descending order
idx = np.argsort(lambdas)[::-1]
p = p[:,idx]

# sort eigenvectors according to same index
lambdas = lambdas[idx]

delta = np.dot(np.matrix(p).T, np.matrix(alphas*lambdas).T) # matrix multiplication

pca_color_img = np.matrix(scaled_img) + delta.T
pca_color_img = np.array(pca_color_img) * std + mean

from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
pca_color_img = min_max_scaler.fit_transform(pca_color_img)

如果执行此操作,我将得到与原始图像相同的图像,只是缩放到0〜1。 (表示original_img/255. = pca_color_img_result)。这意味着我缺少一些部分,但我无法弄清楚。

我用(-平均值)和(/ std)标准化了我的图像,在最后检索pca_augmented_img时我执行相反的(* std和+ mean)。重新标准化我的输出(*标准和+平均值)后,我将输出重新调整为[0,1]范围。

0 个答案:

没有答案