Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将PCA应用于图像_Python_Pca_Noise Reduction - Fatal编程技术网

Python 如何将PCA应用于图像

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:

我有一个灰度噪声图像。我想应用PCA进行降噪,并在应用后查看输出

以下是我试图做的:

[in]:


从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)