• 大小: 1.26MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-20
  • 语言: Python
  • 标签: 稀疏去噪  

资源简介

python编写的K-SVD稀疏字典学习去噪,可以显示字典的图像,去噪效果还行,还有待改进,有问题可以及时交流。

资源截图

代码片段和文件信息

“““
项目内容:基于K-SVD学习的稀疏字典去噪
作者:忘川
时间: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

“““
类说明:使用稀疏字典学习去噪

“““
class SparseClearNoise ():
    “““
    方法说明:初始化函数
    参数说明: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))
    “““
    方法说明:创建一个DCT字典
    参数说明:bs:大小
              r;冗余系数
    返回值:DCT:构建好的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
    “““
    方法说明:以图像的形式显示一个字典
    参数说明:DCT:被显示字典
              ShowFlag:是否排序,只有学习后才使用排序
    返回值:无
    “““
    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)
        
    “““
    方法说明:读取一副图像的数据,并以向量的形式给出。
    参数说明:filename:图片数据的地址
    返回值:PicData:图像数据
    “““
    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):
                

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      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


评论

共有 条评论

相关资源