NLM全名non-Local Means——非局部均值,通过寻找图片中与当前像素相似的区域,计算出权重,再求和,即当前图像的去噪结果是图像中相似块的融合

原理非常简洁,以下图为例:

假设含噪声图像为vvv,去噪图像为uuu

那么输入输出的关系为:

u(x)=∑y∈Iw(x,y)v(y)u(x)=\sum_{y\in I}^{}w(x,y)v(y)u(x)=∑y∈I​w(x,y)v(y)

其中yyy的取值范围是整幅图像,www是代表了图像块xxx,yyy的相似度,是一种权重,每个输出点都要对整个图像求权重,最后求整幅图像的加权和,其计算复杂度非常之高,想要实用就必须被简化,这里先介绍原始方法。

www的公式为:

w(x,y)=1Z(x)exp(−∣∣V(y)−V(x)∣∣2h2))w(x,y)=\frac{1}{Z(x)}exp(-\frac{||V(y) - V(x)||^{2}}{h^{2}}))w(x,y)=Z(x)1​exp(−h2∣∣V(y)−V(x)∣∣2​))

hhh是控制去噪程度的系数,越大则去噪程度越高,图像也更模糊,具体取值应当以图像中的噪声水平为依据
V(x)V(x)V(x)是输入像素点xxx的窗
V(y)V(y)V(y)是当前遍历到的像素点yyy的窗
∣∣V(y)−V(x)∣∣||V(y) - V(x)||∣∣V(y)−V(x)∣∣就是两个窗内像素的均方误差

∣∣V(y)−V(x)∣∣2=mean((v(x+z)−v(x+z))2)||V(y) - V(x)||^{2}= mean((v(x+z)-v(x+z))^{2})∣∣V(y)−V(x)∣∣2=mean((v(x+z)−v(x+z))2)

而zzz代表归一化:

Z(x)=∑yexp(−∣∣V(y)−V(x)∣∣2h2))Z(x)=\sum_{y}^{}exp(-\frac{||V(y) - V(x)||^{2}}{h^{2}}))Z(x)=∑y​exp(−h2∣∣V(y)−V(x)∣∣2​))

本文的代码限制了搜索的范围,不然实在是太慢了:

import cv2
import numpy as np
import mathimg = cv2.imread('F:/hh/2.jpg')
img = cv2.resize(img,(500,500))
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray= gray.astype('float32')/255
size = img.shape  # h w cr = 1
search_range = 10
h = 0.05sr = search_range
h2 = h*h
dest = gray.copy()   #python中的变量更像指针,不可直接赋值
div = -1 * (2*r+1)*(2*r+1) * h2;for y in range(r , size[0] - r):print(y)for x in range(r , size[1]  - r):srcblock = gray[y-r:y+r+1,x-r:x+r+1]  #是y,x#限制了搜索范围,不然实在太慢了,做个试验而已y_start = max(y-search_range,r)x_start = max(x-search_range,r)y_end = min(y + search_range,size[0]- r - 1)x_end = min(x + search_range,size[1]- r - 1)w = np.zeros([y_end - y_start + 1,x_end - x_start + 1])for yi in range(y_start , y_end + 1):for xi in range(x_start , x_end + 1):#运动估计简化计算?refblock = gray[yi-r:yi+r+1,xi-r:xi+r+1]delta = np.sum(np.square(srcblock-refblock))#print(delta)w[yi-y_start,xi-x_start] = math.exp(delta/div) #print(yi,xi)#time.sleep(1)dest[y,x] = np.sum(w * gray[y_start:y_end + 1,x_start:x_end + 1])/np.sum(w)cv2.imshow('result',dest)

结果如下:

NLM去噪算法的python实现相关推荐

  1. python数字图像处理-图像噪声与去噪算法

    图像噪声 椒盐噪声 概述: 椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素.椒盐噪声是一种 ...

  2. 图像/视频去噪算法资源集锦

    点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 图像去噪是指减少数字图像中噪声的过程.随着深度学习的发展,也有许多深度学习方法被用于图 ...

  3. Imagination 的神经网络加速器和 Visidon 的去噪算法被证明是完美的搭档

    Imagination 的神经网络加速器和 Visidon 的去噪算法被证明是完美的搭档 本文是总部位于芬兰的Visidon和总部位于英国的 Imagination合作的结果.Visidon 是公认的 ...

  4. 基于朴素贝叶斯的垃圾分类算法(Python实现)

    有代码和数据集的 https://blog.csdn.net/weixin_33734785/article/details/91428991 附有git库代码的 https://www.cnblog ...

  5. 手把手教你在多种无监督聚类算法实现Python(附代码)

    来源: 机器之心 本文约2704字,建议阅读6分钟. 本文简要介绍了多种无监督学习算法的 Python 实现,包括 K 均值聚类.层次聚类.t-SNE 聚类.DBSCAN 聚类. 无监督学习是一类用于 ...

  6. 八大排序算法的 Python 实现

    八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入 ...

  7. Fuzzy C Means 算法及其 Python 实现——写得很清楚,见原文

    Fuzzy C Means 算法及其 Python 实现 转自:http://note4code.com/2015/04/14/fuzzy-c-means-%E7%AE%97%E6%B3%95%E5% ...

  8. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  9. 机器学习算法与Python实践之(六)二分k均值聚类

    机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学 ...

最新文章

  1. 妙用postman系列——postman建组、分享
  2. Windows10快捷应用指令
  3. poj1769 线段树优化的dp
  4. 一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南
  5. 计算机图形学基础教程论文,计算机图形学小论文
  6. gauge 运行其他spec_Gem5(SE模式)上运行SPEC2017教程
  7. vue main.js中引入js_手把手教你深入Vue3.0(Vue-cli4)项目打包性能优化实践
  8. MySQL小工具推荐
  9. c语言课后作业答案第五版第4章,《C语言程序设计》课后习题答案(第四章)
  10. 宝塔linux跑tomcat,宝塔面板环境的安装(Linux、Tomcat、Node.js、Windows等环境)
  11. 线性渐变和放射性渐变
  12. LINUX编译OPENJDK:unsupported cpu xxx
  13. 英特尔第十代处理器为什么不支持win7_为什么7代CPU不支持WIN7,原因是什么
  14. PCB中常见的单位换算
  15. 超级记忆/图像数字记忆 110位数字图像转换表 61-70
  16. 使用hexo+github搭建免费个人博客详细教程
  17. Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 iBrand API 教程
  18. 市面上微型计算机的主频,目前市面上最大屏幕的手机,你知道是哪款吗?
  19. cnn和rnn可以结合使用吗,rnn和cnn优点缺点对比
  20. Android开发——适配终结者AutoLayout

热门文章

  1. iOS SDWebImage 清空缓存 新方法
  2. matlab中ode45用法,ode45(ode45用法举例)
  3. 求税后收入及个人所得税
  4. 机房装饰实施方案的评审
  5. ICO文件缩略图显示错误
  6. cpp整理学习笔记 文件I/O:随机存取fseek()和ftell()
  7. 语音增强 理论与实践 pdf_初中英语语音教学策略研究 (结题报告)
  8. Android 深入理解 ANR 触发原理:Service
  9. android调起应用商店某应用详情页
  10. 使用python解压缩rar、zip文件