• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: Python
  • 标签: opencv  python  BM3D  quzao  

资源简介

BM3D在传统图像去噪方面效果是最好的,此代码需要安装opencv库

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
“““
*BM3D算法简单实现主要程序部分
*创建于2016.9.13
*作者:lmp31
“““
import cv2
import PSNR
import numpy


cv2.setUseOptimized(True)

# Parameters initialization
sigma = 25
Threshold_Hard3D = 2.7*sigma           # Threshold for Hard Thresholding
First_Match_threshold = 2500             # 用于计算block之间相似度的阈值
Step1_max_matched_cnt = 16              # 组最大匹配的块数
Step1_Blk_Size = 8                     # block_Size即块的大小,8*8
Step1_Blk_Step = 3                      # Rather than sliding by one pixel to every next reference block use a step of Nstep pixels in both horizontal and vertical directions.
Step1_Search_Step = 3                   # 块的搜索step
Step1_Search_Window = 39                # Search for candidate matching blocks in a local neighborhood of restricted size NS*NS centered

Second_Match_threshold = 400           # 用于计算block之间相似度的阈值
Step2_max_matched_cnt = 32
Step2_Blk_Size = 8
Step2_Blk_Step = 3
Step2_Search_Step = 3
Step2_Search_Window = 39

Beta_Kaiser = 2.0


def init(img _blk_size _Beta_Kaiser):
    “““该函数用于初始化,返回用于记录过滤后图像以及权重的数组还有构造凯撒窗“““
    m_shape = img.shape
    m_img = numpy.matrix(numpy.zeros(m_shape dtype=float))
    m_wight = numpy.matrix(numpy.zeros(m_shape dtype=float))
    K = numpy.matrix(numpy.kaiser(_blk_size _Beta_Kaiser))
    m_Kaiser = numpy.array(K.T * K)            # 构造一个凯撒窗
    return m_img m_wight m_Kaiser


def Locate_blk(i j blk_step block_Size width height):
    ‘‘‘该函数用于保证当前的blk不超出图像范围‘‘‘
    if i*blk_step+block_Size < width:
        point_x = i*blk_step
    else:
        point_x = width - block_Size

    if j*blk_step+block_Size < height:
        point_y = j*blk_step
    else:
        point_y = height - block_Size

    m_blockPoint = numpy.array((point_x point_y) dtype=int)  # 当前参考图像的顶点

    return m_blockPoint


def Define_SearchWindow(_noisyImg _BlockPoint _WindowSize Blk_Size):
    “““该函数返回一个二元组(xy)用以界定_Search_Window顶点坐标“““
    point_x = _BlockPoint[0]  # 当前坐标
    point_y = _BlockPoint[1]  # 当前坐标

    # 获得SearchWindow四个顶点的坐标
    LX = point_x+Blk_Size/2-_WindowSize/2     # 左上x
    LY = point_y+Blk_Size/2-_WindowSize/2     # 左上y
    RX = LX+_WindowSize                       # 右下x
    RY = LY+_WindowSize                       # 右下y

    # 判断一下是否越界
    if LX < 0:   LX = 0
    elif RX > _noisyImg.shape[0]:   LX = _noisyImg.shape[0]-_WindowSize
    if LY < 0:   LY = 0
    elif RY > _noisyImg.shape[0]:   LY = _noisyImg.shape[0]-_WindowSize

    return numpy.array((LX LY) dtype=int)


def Step1_fast_match(_noisyImg _BlockPoint):
    “““快速匹配“““
    ‘‘‘
    *返回邻域内寻找和当前_block相似度最高的几个block返回的数组中包含本身
    *_noisyImg:噪声图像
    *_BlockPoint:当前block的坐标及大小
    ‘‘‘
    (present_x present_y) = _BlockPoint  # 当前坐标
    Blk_Size = Step1_Blk_Size
    Search_Step = Step1_Search_Step
    Threshold = First_Match_threshold
    max_matched = Step1_max_matched_cnt
    Window_size = Step1_Search_Window

    blk_positions = numpy.zeros((max_matched 2) dtype=int)  # 用于记录相似blk的位置
    Final_similar_blocks = numpy.zer

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       16316  2017-09-13 16:12  BM3D-Denoise-master\BM3D.py
     文件         694  2017-09-13 16:12  BM3D-Denoise-master\PSNR.py
     文件         631  2017-09-13 16:12  BM3D-Denoise-master\README.md
     目录           0  2018-06-21 20:17  BM3D-Denoise-master\

评论

共有 条评论