概述
我在一组生成的图像之间实现PCA,并使用选定的主成分抑制图像的背景。我已经在MATLAB中实现了这一点,并收到了我所期望的结果。但当我在Python中实现这一点时,我的结果就大不相同了。过程如下,我首先生成图像数据集,对数据集进行PCA,计算并从数据集中的图像中减去背景,然后重塑数据集并将结果与原始数据进行比较。下面是我对原始数据集执行PCA的函数。在def pca_images(total_images, count, size, num_pcs):
flat_images = np.empty([count, size*size])
# unravel structure of the image
for i in range(0,count):
flat_images[i] = np.ravel(total_images[i])
# calculate covariance matrix
cov_mat = np.cov(flat_images.T)
# eigenvectors and eigenvalues of the covariance matrix
eig_val_cov, eig_vec_cov = np.linalg.eig(cov_mat)
# sort the (eigenvalue, eigenvector) lists from low to high
inds = eig_val_cov.argsort()
# flip around and sort eigenvectors high to low
eig_vec_cov = eig_vec_cov[inds[::-1]]
# take num_pcs number of eigenvectors
components = eig_vec_cov[:,0:num_pcs]
# create list to store background for each image
bg = []
# find principal components
for i in range(0,count):
bg.append(np.dot(np.dot(components.T,flat_images[i]),components.T))
# allocate array to hold filtered images
images_suppressed = []
# filter out background from each image and store
for i in range(0,count):
images_suppressed.append(flat_images[i] - bg[i])
return images_suppressed
当我将其与我的MATLAB代码进行比较时,差异似乎出现在pca_images函数中的bg矩阵中。在MATLAB中,这个矩阵只包含实数,而在Python中则是实值和复值。结果表明,由于从原始图像中减去images_suppressed值,因此images_suppressed像素值都小于原始图像像素值。然而,在Python中,我的一些images_suppressed值比原始图像像素值大,尽管进行了减法处理,但这会导致噪声实际上被添加到图像中。用于查找bg矩阵的MATLAB代码如下:
^{pr2}$
我知道这个问题与这个bg矩阵有关,我还没有找到任何东西来解释为什么我的特征向量与原始数据集相乘会在MATLAB和Python中得到不同的结果。有人能解释一下为什么会这样吗??在
最后
以上就是无聊睫毛为你收集整理的python和matlab矩阵运算效率_MATLAB与Python中矩阵运算的不同结果的全部内容,希望文章能够帮你解决python和matlab矩阵运算效率_MATLAB与Python中矩阵运算的不同结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复