首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单个图像python中的非负矩阵分解

单个图像python中的非负矩阵分解
EN

Stack Overflow用户
提问于 2017-07-09 05:34:45
回答 1查看 2.2K关注 0票数 1

我正在尝试将NMF应用于以灰度模式加载的特定图像。我尝试了几个链接,但我的图像应用后,NMF几乎保持不变,无法区分与灰度图像最初加载。

然而,当我看到关于在dataset上实现分解的scikit的代码时,我看到那里的脸已经被转换成类似幽灵的面孔。以下是链接:

decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py

下面是我使用的代码:

代码语言:javascript
复制
import cv2    
from sklearn import decomposition    
import matplotlib.pyplot as plt    

img = cv2.imread('test1.jpeg',0)    
estimator = decomposition.NMF(n_components = 2, init = 'nndsvda', tol = 5e-3)    
estimator.fit(img)    
vmax = max(img.max(), -img.min())    
plt.imshow(img, cmap=plt.cm.gray, interpolation = 'nearest',vmin=-vmax,vmax=vmax)    
plt.show()

我对矩阵上的NMF技术很陌生,尤其是这样一个大的图像数字阵列。

我的图像是test1.jpeg,即225 * 224 .jpeg映像。

有人能帮我实现单个图像的代码吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-09 08:57:54

你在图中得到原始图像的原因是你实际上绘制了原始图像。相反,您需要处理estimator的输出。

NMF分解产生两个矩阵WH,组成原始矩阵。你需要把它们相乘才能得到图像。

代码语言:javascript
复制
import cv2    
from sklearn import decomposition    
import matplotlib.pyplot as plt 
import numpy as np   

img = cv2.imread('data/trump2.jpg',0)  
vmax = max(img.max(), -img.min())

fig, (ax, ax2)  =plt.subplots(ncols=2)    
ax.imshow(img, cmap=plt.cm.gray, interpolation = 'nearest',vmin=-vmax,vmax=vmax)

n_components = 20

estimator = decomposition.NMF(n_components = n_components, init = 'random', tol=5e-3)    
W = estimator.fit_transform(img)
H = estimator.components_

new_img = np.dot(W,H)
ax2.imshow(new_img, cmap=plt.cm.gray,
                   interpolation='nearest',
                   vmin=-vmax, vmax=vmax)

plt.show()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44993322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档