資源簡介
python編寫的K-SVD稀疏字典學(xué)習(xí)去噪,可以顯示字典的圖像,去噪效果還行,還有待改進(jìn),有問題可以及時(shí)交流。

代碼片段和文件信息
“““
項(xiàng)目內(nèi)容:基于K-SVD學(xué)習(xí)的稀疏字典去噪
作者:忘川
時(shí)間:2019-03-11
“““
import?ImageProcessing?as?IP
import?math
import?cv2
import?random
from?scipy?import?ndimage?as?nd
import?copy
import?numpy?as?np
from?PIL?import?Image?as?im
“““
類說明:使用稀疏字典學(xué)習(xí)去噪
“““
class?SparseClearNoise?():
????“““
????方法說明:初始化函數(shù)
????參數(shù)說明:pic:無噪聲圖像
??????????????npic?:有噪聲圖像
????返回值:無
????“““????
????def?__init__?(self?picnpic):
????????self.img?=?copy.deepcopy?(pic)
????????self.nimg?=?copy.deepcopy?(npic)
????????self.w?=?npic.shape[1]
????????self.h?=?npic.shape[0]
????????self.PicData?=?np.zeros((643969))
????“““
????方法說明:創(chuàng)建一個(gè)DCT字典
????參數(shù)說明:bs:大小
??????????????r;冗余系數(shù)
????返回值:DCT:構(gòu)建好的DCT
????“““
????def?CreatDCT?(self?bs=8?r=4):
????????k?=?r*bs**2
????????hh?=?int?(math.sqrt(k))
????????DCT?=?np.zeros((bshh))
????????for?i?in?range(hh):
????????????V?=?np.cos(np.array([j*i*math.pi/hh?for?j?in?range(bs)]))
????????????if?i?>?0:
????????????????V?=?V?-?np.mean(V)
????????????DCT[:i]?=?V/np.linalg.norm(V)
????????DCT?=?np.kron(DCTDCT)
????????return?DCT
????“““
????方法說明:以圖像的形式顯示一個(gè)字典
????參數(shù)說明:DCT:被顯示字典
??????????????ShowFlag:是否排序,只有學(xué)習(xí)后才使用排序
????返回值:無
????“““
????def?ShowDCT?(self?DCT?ShowFlag=0):
????????a?=?[]
????????D?=?copy.deepcopy(DCT)
????????#歸一化
????????for?i?in?range?(D.shape[1]):
????????????D[:i]?=?D[:i]?-?np.min(D[:i])
????????????if?np.max(D[:i])?!=?0:
????????????????D[:i]?=?D[:i]/np.max(D[:i])
????????if?ShowFlag?==?1:
????????????P?=?np.var?(Daxis=0)#列求平局值
????????????for?i?in?range?(len?(P)):
????????????????maxn?=?np.argmax(P)
????????????????a.extend([maxn])
????????????????P[maxn]?=?-P[maxn]
????????????I?=?np.zeros((D.shape[0]D.shape[1]))
????????????print?(D)
????????????for?i?in?range(D.shape[1]):
????????????????I[:i]?=?D[:a[D.shape[1]-i-1]]
????????????D?=?I
????????L?=?int(math.sqrt?(DCT.shape[1]))
????????n?=?int(math.sqrt?(DCT.shape[0]))
????????img_DCT?=?np.zeros((L*nL*n))
????????for?i?in?range(L):
????????????for?j?in?range(L):
????????????????for?k?in?range?(D.shape[0]):
????????????????????img_DCT[i*8+int(k%8)][j*8+int(k/8)]?=?D[k][i*16+j]
????????img_DCT?=?img_DCT?-?np.min(D)
????????img_DCT?=?img_DCT/np.max(D)
????????img_DCT?=?np.uint8(img_DCT*255)
????????print?(img_DCT)
##????????image?=?im.fromarray(img_DCT.astype(np.int))
##????????image.show()
????????img_DCT1?=?np.zeros((L*24L*24)np.uint8)
????????for?i?in?range(L*8):
????????????for?j?in?range(L*8):
????????????????img_DCT1[i*3:i*3+3j*3:j*3+3]?=?img_DCT[i][j]
????????cv2.imshow?(“DCT?Image“img_DCT1)
????????
????“““
????方法說明:讀取一副圖像的數(shù)據(jù),并以向量的形式給出。
????參數(shù)說明:filename:圖片數(shù)據(jù)的地址
????返回值:PicData:圖像數(shù)據(jù)
????“““
????def?GetPicInformation?(self):
????????k?=?0
????????self.means?=?[]
????????img?=?self.nimg
????????for?i?in?range(63):
????????????for?j?in?range(int(63)):#先從坐到右,再從上到下
????????????????data8x8?=?img[i*4:i*4+8j*4:j*4+8]
????????????????for?ii?in?range(8):
????????????????
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????65951??2019-03-08?12:02??[4]-稀疏去噪\123.jpg
?????文件??????26704??2019-03-08?12:04??[4]-稀疏去噪\1234.jpg
?????文件???????9621??2019-03-11?12:28??[4]-稀疏去噪\ClearNoise.py
?????文件?????220980??2019-03-01?12:37??[4]-稀疏去噪\Glena.jpg
?????文件???????2099??2019-03-10?23:06??[4]-稀疏去噪\ImageProcessing.py
?????文件?????263222??2015-11-04?16:05??[4]-稀疏去噪\lena.bmp
?????文件??????26703??2019-03-10?20:36??[4]-稀疏去噪\lena1.jpg
?????文件?????719641??2019-03-01?09:00??[4]-稀疏去噪\lenna1.png
?????文件??????44251??2019-03-08?09:55??[4]-稀疏去噪\lenna256.jpg
?????文件??????40634??2019-03-01?09:00??[4]-稀疏去噪\lenna3.jpg
?????文件???????1670??2019-03-10?23:06??[4]-稀疏去噪\__pycache__\ImageProcessing.cpython-37.pyc
?????目錄??????????0??2019-03-10?23:06??[4]-稀疏去噪\__pycache__
?????目錄??????????0??2019-03-10?20:36??[4]-稀疏去噪
-----------?---------??----------?-----??----
??????????????1421476????????????????????13
評論
共有 條評論