opencv的NLM去噪算法

NLM(Non-Local Means)去噪算法是一种基于图像块(patch)相似性的去噪方法。其基本原理是:

  • 图像块相似性:算法首先定义了一个搜索窗口(search window),然后在该窗口内寻找与当前处理像素所在图像块(称为参考图像块)相似的图像块。
  • 加权平均:对于每一个找到的相似图像块,算法计算其与参考图像块的相似性权重,并根据这些权重对当前处理像素的值进行加权平均,从而得到去噪后的像素值。
  • 参数设置:算法的效果很大程度上取决于几个关键参数:搜索窗口的大小、图像块的大小以及相似性度量的阈值等。
    NLM算法的优点在于能够有效地去除图像中的噪声,同时保留图像的细节和边缘信息。
    示例代码
    以下是一个使用OpenCV库实现NLM去噪算法的示例代码:
python 复制代码
python
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图像
image = cv2.imread('noisy_image.png', cv2.IMREAD_GRAYSCALE)
 
# 添加噪声(可选,用于测试)
# noise = np.random.normal(0, 25, image.shape).astype(np.uint8)
# noisy_image = cv2.add(image, noise)
# 但这里我们假设已经有一个带噪声的图像
 
# 使用OpenCV的NLM去噪函数
h = 15  # 过滤强度。较高的h值可以更好地去除噪声,但可能会去除图像的一些细节
templateWindowSize = 7  # 模板窗口大小,应为奇数
searchWindowSize = 21  # 搜索窗口大小,应为奇数
 
denoised_image = cv2.fastNlMeansDenoising(image, None, h, templateWindowSize, searchWindowSize)
 
# 显示结果
plt.figure(figsize=(10, 5))
 
plt.subplot(1, 2, 1)
plt.title('Noisy Image')
plt.imshow(image, cmap='gray')
plt.axis('off')
 
plt.subplot(1, 2, 2)
plt.title('Denoised Image')
plt.imshow(denoised_image, cmap='gray')
plt.axis('off')
 
plt.show()

代码说明

读取图像:使用cv2.imread函数读取带噪声的图像,并将其转换为灰度图(如果图像已经是灰度图,这一步可以省略)。

添加噪声(可选):为了测试NLM去噪算法的效果,可以人为地向图像添加一些噪声。但在这个示例中,我们假设已经有一个带噪声的图像。

使用NLM去噪函数:调用cv2.fastNlMeansDenoising函数对图像进行去噪处理。该函数的参数包括:

src:输入图像。

h:过滤强度。较高的h值可以更好地去除噪声,但可能会去除图像的一些细节。

templateWindowSize:模板窗口大小,应为奇数。

searchWindowSize:搜索窗口大小,应为奇数。

显示结果:使用matplotlib库显示去噪前后的图像。

请注意,NLM去噪算法的计算复杂度较高,特别是对于大图像和较大的搜索窗口,因此在实际应用中可能需要权衡去噪效果和计算时间。

相关推荐
Not Dr.Wang4222 小时前
自动控制系统稳定性研究及判据分析
算法
VT.馒头2 小时前
【力扣】2722. 根据 ID 合并两个数组
javascript·算法·leetcode·职场和发展·typescript
ffqws_2 小时前
A*算法:P5507 机关 题解
算法
执着2593 小时前
力扣hot100 - 108、将有序数组转换为二叉搜索树
算法·leetcode·职场和发展
2501_901147833 小时前
学习笔记:单调递增数字求解的迭代优化与工程实践
linux·服务器·笔记·学习·算法
AI科技星3 小时前
张祥前统一场论核心场方程的经典验证-基于电子与质子的求导溯源及力的精确计算
线性代数·算法·机器学习·矩阵·概率论
kebijuelun3 小时前
ERNIE 5.0:统一自回归多模态与弹性训练
人工智能·算法·语言模型·transformer
AAD555888993 小时前
基于Mask_RCNN的猫科动物目标检测识别模型实现与分析
人工智能·目标检测·计算机视觉
历程里程碑3 小时前
普通数组----最大子数组和
大数据·算法·elasticsearch·搜索引擎·排序算法·哈希算法·散列表
52Hz1184 小时前
力扣230.二叉搜索树中第k小的元素、199.二叉树的右视图、114.二叉树展开为链表
python·算法·leetcode