图像上的Python奇异值分解以进行噪声过滤

时间:2019-01-11 12:15:51

标签: python pca svd

我正在尝试创建一个PCA脚本,该脚本将处理一组图像并将其分解为按功率/重量排序的PC。据我了解,您想做以下的M = U*S*V.T。我在N处切断了阵列,N是去除所有较低PC的过滤器。但是它似乎根本不起作用,并且会产生明显不是PC的乱码。我误会数学了吗?

def PCA(cube_array, PCA_N=False, cutoff=1, verbatim=0):
    cube_shape_z, cube_shape_x, cube_shape_y = cube_array.shape
    n = 1
    M = cube_array.reshape(cube_array.shape[0],-1)


    U, s, Vt = np.linalg.svd(M, full_matrices=False)
    V = Vt.T
    S = np.diag(s)
    N = cutoff
    Mhat = np.dot(U[:, :N], np.dot(S[:N, :N], 
    V[:,:N].T)).reshape(cube_array.shape)
    return Mhat

1 个答案:

答案 0 :(得分:0)

主要成分只是V的对应前N列。

您计算出的是2范数和Frobenius范数中矩阵M的最佳秩N近似值。