-
大小: 3KB文件類型: .py金幣: 1下載: 1 次發布日期: 2021-06-18
- 語言: Python
- 標簽: k-svd??python??dictionary-l??
資源簡介
對單個圖片進行k-svd進行稀疏表示,求出迭代后的字典和稀疏編碼,并通過字典和稀疏編碼進行重建原圖像,該代碼是2006年k-svd算法提出者的簡單實現代碼,對小白有一定幫助
代碼片段和文件信息
import?numpy?as?np
from?sklearn?import?linear_model
import?scipy.misc
from?PIL?import?Image
from?matplotlib?import?pyplot?as?plt
from?time?import?time
class?KSVD(object):
????def?__init__(self?n_components?max_iter=50?tol=1e-6
?????????????????n_nonzero_coefs=None):
????????“““
????????稀疏模型Y?=?DX,Y為樣本矩陣,使用KSVD動態更新字典矩陣D和稀疏矩陣X
????????:param?n_components:?字典所含原子個數(字典的列數)
????????:param?max_iter:?最大迭代次數
????????:param?tol:?稀疏表示結果的容差
????????:param?n_nonzero_coefs:?稀疏度
????????“““
????????self.dictionary?=?None
????????self.sparsecode?=?None
????????self.max_iter?=?max_iter
????????self.tol?=?tol
????????self.n_components?=?n_components
????????self.n_nonzero_coefs?=?n_nonzero_coefs
????#def?_initialize(self?y):
????????“““
????????初始化字典矩陣
????????“““
???????#?u?s?v?=?np.linalg.svd(y)
????????#self.dictionary?=?u[:?:self.n_components]
????def?_update_dict(self?y?d?x):
????????“““
????????使用KSVD更新字典的過程
????????“““
????????for?i?in?range(self.n_components):
????????????index?=?np.nonzero(x[i?:])[0]
????????????if?len(index)?==?0:
????????????????continue
????????????d[:?i]?=?0
????????????r?=?(y?-?np.dot(d?x))[:?index]
????????????u?s?v?=?np.linalg.svd(r?full_matrices=False)
????????????d[:?i]?=?u[:?0].T
????????????x[i?index]?=?s[0]?*?v[0?:]
????????print?(d[3?:])
????????print?(“_____“)
????????print?(x[i?:])
???
- 上一篇:笨方法學python3-習題1-45
- 下一篇:python圖像預處理,均勻切割小圖
評論
共有 條評論