我正在尝试从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]范围。