如题,比opencv自带的实现效果好

#coding:utf8
import cv2
import numpy as np
def psnr(A, B):
return 10*np.log(255*255.0/(((A.astype(np.float)-B)**2).mean()))/np.log(10) def double2uint8(I, ratio=1.0):
return np.clip(np.round(I*ratio), 0, 255).astype(np.uint8) def make_kernel(f):
kernel = np.zeros((2*f+1, 2*f+1))
for d in range(1, f+1):
kernel[f-d:f+d+1, f-d:f+d+1] += (1.0/((2*d+1)**2))
return kernel/kernel.sum() def NLmeansfilter(I, h_=10, templateWindowSize=5, searchWindowSize=11):
f = templateWindowSize/2
t = searchWindowSize/2
height, width = I.shape[:2]
padLength = t+f
I2 = np.pad(I, padLength, 'symmetric')
kernel = make_kernel(f)
h = (h_**2)
I_ = I2[padLength-f:padLength+f+height, padLength-f:padLength+f+width] average = np.zeros(I.shape)
sweight = np.zeros(I.shape)
wmax = np.zeros(I.shape)
for i in range(-t, t+1):
for j in range(-t, t+1):
if i==0 and j==0:
continue
I2_ = I2[padLength+i-f:padLength+i+f+height, padLength+j-f:padLength+j+f+width]
w = np.exp(-cv2.filter2D((I2_ - I_)**2, -1, kernel)/h)[f:f+height, f:f+width]
sweight += w
wmax = np.maximum(wmax, w)
average += (w*I2_[f:f+height, f:f+width])
return (average+wmax*I)/(sweight+wmax) if __name__ == '__main__':
I = cv2.imread('lena.jpg', 0) sigma = 20.0
I1 = double2uint8(I + np.random.randn(*I.shape) *sigma)
print u'噪声图像PSNR',psnr(I, I1)
R1 = cv2.medianBlur(I1, 5)
print u'中值滤波PSNR',psnr(I, R1)
R2 = cv2.fastNlMeansDenoising(I1, None, sigma, 5, 11)
print u'opencv的NLM算法',psnr(I, R2)
R3 = double2uint8(NLmeansfilter(I1.astype(np.float), sigma, 5, 11))
print u'NLM PSNR',psnr(I, R3)

非局部均值滤波算法的python实现的更多相关文章

  1. NLM非局部均值算法相关

    NLM原文: 基于图像分割的非局部均值去噪算法 基于图像分割的非局部均值去噪算法_百度文库 https://wenku.baidu.com/view/6a51abdfcd22bcd126fff705c ...

  2. 非局部均值(Nonlocal-Mean)

    转载自网站:http://www.cnblogs.com/luo-peng/p/4785922.html 非局部均值去噪(NL-means)   非局部均值(NL-means)是近年来提出的一项新型的 ...

  3. 非局部均值去噪(NL-means)

    非局部均值(NL-means)是近年来提出的一项新型的去噪技术.该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度地保持图像的细节特征.基本思想是:当前像素的估计值由图像中与它具有相似邻域结构的 ...

  4. 积分图像的应用(二):非局部均值去噪(NL-means)

    非局部均值去噪(NL-means)一文介绍了NL-means基本算法,同时指出了该算法效率低的问题,本文将使用积分图像技术对该算法进行加速. 假设图像共像个素点,搜索窗口大小,领域窗口大小, 计算两个 ...

  5. 基于FPGA的均值滤波算法实现

    我们为了实现动态图像的滤波算法,用串口发送图像数据到FPGA开发板,经FPGA进行图像处理算法后,动态显示到VGA显示屏上,前面我们把硬件平台已经搭建完成了,后面我们将利用这个硬件基础平台上来实现基于 ...

  6. 基于MATLAB的均值滤波算法实现

    在图像采集和生成中会不可避免的引入噪声,图像噪声是指存在于图像数据中的不必要的或多余的干扰信息,这对我们对图像信息的提取造成干扰,所以要进行去噪声处理,常见的去除噪声的方法有均值滤波.中值滤波.高斯滤 ...

  7. 图像处理之均值滤波介绍及C算法实现

    1 均值滤波介绍 滤波是滤波是将信号中特定波段频率滤除的操作,是从含有干扰的接收信号中提取有用信号的一种技术. 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临 ...

  8. OpenCV2:等间隔采样和局部均值的图像缩小

    图像的缩小从物理意义上来说,就是将图像的每个像素的大小缩小相应的倍数.但是,改变像素的物理尺寸显然不是那么容易的,从数字图像处理的角度来看,图像的缩小实际就是通过减少像素个数来实现的.显而易见的,减少 ...

  9. 基于FPGA的中值滤波算法实现

    在这一篇开篇之前,我需要解决一个问题,上一篇我们实现了基于FPGA的均值滤波算法的实现,最后的显示效果图上发现有一些黑白色的斑点,我以为是椒盐噪声,然后在做基于FPGA的中值滤波算法的实验时,我发现黑 ...

随机推荐

  1. 安装Window Server 2008的些配置

    上次安装window server2008,由于server2008需要设置很多东西,不然用起来很不爽,就说IE吧,每次随便打开一个网页都要弹出n多窗口出来叫你添加到信任域里面!太烦人了![下面有解决 ...

  2. Linux通过docker安装运行酷Q--用QQ骰子君进行跑团

    Linux通过docker安装运行酷Q 文:铁乐与猫 需求:和小伙伴周末进行愉快的TRPG跑团,需要在QQ讨论组上加了qq小号后,将qq小号用酷Q配合投骰的应用变成骰子君. 限制:我个人的云计算服务器 ...

  3. 【2017-11-19】Linux基础知识:TP-Link WN823N无线网卡(RTL8192EU芯片)的X86-64及AARCH64驱动安装

    目的: 使类似于树莓派的AARCH-64架构的嵌入式设备能通过USB无线网卡连接上以太网: 该设备有LAN接口,但在前一次系统固件升级后,其内部的三个网络接口可以相互ping通,但任一接口无法ping ...

  4. 索引&切片 切割split

    索引   s[n]                                                        # 中括号里n为一个数字 切片    s[0:9]           ...

  5. Eclipse Debug Daemon Thread

    Daemon Thread ["http-bio-8080"-exec-2] (Suspended (exception RuntimeException)) ThreadPool ...

  6. virtualbox 错误解决记录

    1,E_INVALIDARG (0x80070057),virtualbox中Cannot register the hard disk错误解决办法 virtualbox中加载已有的虚拟硬盘时出现Ca ...

  7. jquery validation验证身份证号、护照、电话号码、email

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Java虚拟机16:Java内存模型

    什么是Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致 ...

  9. 【bzoj 4675】 点对游戏

    题目 发现一个人如果最终拿走了\(k\)个点,那么这个人的答案就是 \[\frac{\binom{n-2}{k-2}\sum_{i=1}^{n}\sum_{j=1}^{n}[dis(i,j)\in M ...

  10. grovvy pipeline 部署

    pipeline { agent any stages { stage('Checkout') { steps { echo 'Checkout' checkout([$class: 'GitSCM' ...