Python 如何将PCA应用于图像
我有一个灰度噪声图像。我想应用PCA进行降噪,并在应用后查看输出 以下是我试图做的: [in]:Python 如何将PCA应用于图像,python,pca,noise-reduction,Python,Pca,Noise Reduction,我有一个灰度噪声图像。我想应用PCA进行降噪,并在应用后查看输出 以下是我试图做的: [in]: 从sklearn.dataset导入加载样本图像 从sklearn.feature_提取导入图像 从sklearn.decomposition导入PCA #创建大小为25 x 25的面片,并从所有面片创建矩阵 斑块=图像。提取斑块\u 2d(灰度图像,(25,25),随机状态=42) 打印(补丁。形状) #重塑面片,因为应用fit_变换时出错(ValueError:FoundValueError:
从sklearn.dataset导入加载样本图像
从sklearn.feature_提取导入图像
从sklearn.decomposition导入PCA
#创建大小为25 x 25的面片,并从所有面片创建矩阵
斑块=图像。提取斑块\u 2d(灰度图像,(25,25),随机状态=42)
打印(补丁。形状)
#重塑面片,因为应用fit_变换时出错(ValueError:FoundValueError:Find array with dim 3.预计估计器为了查看去噪图像,您需要将使用主分量表示的低维数据转换回原始空间。为此,您可以使用逆变换()
函数。从文档中可以看到,此函数将接受投影数据并返回一个与原始图像类似的数组。因此,您可以执行以下操作:
denoised_image = pca.inverse_transform(projected)
# then view denoised_image
编辑:
以下是一些需要关注的问题:
您的原始图像中有大小为(25,25)
的53824
补丁。要重塑数据并将其传递给PCA,正如您从文档中看到的,您需要传递一个大小为(n个样本,n个特征)
的数组。样本数为53824。因此重塑的补丁应为:
现在,您使用此重塑数据,并使用PCA和逆变换对其进行变换,以获得原始域中的数据。完成此操作后,您的去噪\u图像
是一组重建的面片。您需要使用函数image组合这些面片以获得图像。从面片重建\u 2d
是文档你可以这样做
现在,您可以查看去噪图像
,它应该看起来像灰度图像
有没有办法查看投影图像中的特征向量?是在进行逆变换之前还是之后进行?您可以将特征向量重塑为图像大小(h,w)然后显示它们,在人脸检测的情况下称为特征脸。但是这些图像看起来不像自然图像。你可以做的另一件事是只对感兴趣的特征向量进行逆变换,看看解释了多少方差,或者看到了重建误差。这样做时,我得到的是一条线,而不是一张图像逆变换。我所做的是在问题的末尾添加了你的代码行。然后用imshow(去噪图像)显示图像。当你显示经过整形的面片时,你会得到什么?你基本上是在重建这些数据。
patches_reshaped = patches.reshape(patches.shape[0],-1)
# this should return a (53824, 625) shaped data
denoised_image = image.reconstruct_from_patches_2d(denoised_image.reshape(-1,25,25), grayscale_image.shape)