来源 | 小白视觉志
头图 | 下载于视觉中国

本文将展示如何通过三个简单的步骤来实现降噪。我们将使用机器学习训练的降噪模型,最好的降噪模型之一。

程序可以判断图像是否有噪点吗?这应该是一个很有创意的想法,因为我们的降噪模型不够智能,无法计算出噪声。我们必须自己确定价值观。在这种情况下,最好的方法通常是尝试不同的值并找到最佳结果。经过一些练习,我们将获得更多经验,并且找到最佳参数值将更加容易。

导读:

在这个项目中,我们将使用三个Python软件包:OpenCV,Matplotlib和NumPy。OpenCV是一个非常知名的计算机视觉工具包。作为OpenCV库的先决条件,我们将需要安装NumPy。读取图像时,我们将像素转换为数组。NumPy将在后台进行该操作。当处理多维数组时,NumPy是无法替代的。

降噪模型:

这是该项目的有见地的部分。首先,我们将分享将用于减少噪声的算法。然后,我们将分享它具有多少个参数以及每个参数的含义。

图片中的黄色区域看起来很像。另外,绿色的小区域看起来很相似。非局部均值去噪算法选择一个像素,在其周围取一个小窗口,扫描图像中的相似窗口,对所有窗口取平均值,然后计算结果以替换该像素。该算法被称为非本地算法,因为它搜索整个图像以找到相互联系,而不仅仅是在单个区域周围。

该算法包含两个常用函数:fastNlMeansDenoising和fastNlMeansDenoisingColored。 第一个用于灰度图像,第二个用于彩色照片。在我们的例子中,我们将使用彩色图像。该函数的参数为src、dst、h、hcolor、templateWindowSize,和searchWindowSize。

  • src:我们要进行降噪的输入图像。

  • dst:如果要导出结果,则为目的地。

  • h:亮度分量(较大的h值会消除更多的噪点,但也会降低图像的质量)。

  • hcolor:颜色分量(这10是彩色图像文档中的推荐值)。

  • templateWindowSize:该功能将平滑的区域的像素大小。它应该是一个奇数整数。

  • searchWindowSize:该功能将找到并用作参考的区域的像素大小。它对性能产生线性影响:值越大,searchWindowSize表示去噪时间越长。另外,它应该是一个奇数整数(21是官方文档推荐的值,因为它适用于大多数嘈杂的图像情况)。

步骤一、安装软件包

我们必须安装两个库才能使我们的程序正常运行:numpy和opencv-python。我们可以使用PIP库管理器将它们安装在一行中:

pip install numpy opencv-python

让我们继续创建一个新的Jupyter Notebook(但可以随意使用所需的代码编写环境)。这是我的第一个笔记本块,我们在其中导入刚刚构建的库:

import cv2 import numpy as np

步骤二、导图图像

在这一步中,我们将找到要用于降噪的图片。为了更清楚地看到更改,它可能是嘈杂的图片。也可以随意使用常规图像-仍然会出现平滑现象。

实验图像:

读取图像:

img = cv2.imread("test_image.png")

步骤三、对影像进行降噪

到目前为止看起来不错!现在,这是项目的有趣部分。我们将看到降噪后图像的外观。我们将使用三个不同的值运行该函数,以查看每个值如何影响最终结果。随意检查第一步,以了解每个参数代表什么。

denoise_1 = cv2.fastNlMeansDenoisingColored(img,None,3,3,7,21) denoise_2 = cv2.fastNlMeansDenoisingColored(img,None,5,5,7,21) denoise_3 = cv2.fastNlMeansDenoisingColored(img,None,15,15,7,21)

去噪图像分配给不同的变量。让我们保存结果。我们将使用OpenCV的imwrite方法。如下是传递变量和要保存的文件名。

cv2.imwrite('image_1.png', denoise_1) cv2.imwrite('image_2.png', denoise_2) cv2.imwrite('image_3.png', denoise_3)

降噪效果分析

我们可以按顺序看到它们。值越大,图像变得越平滑。

更多精彩推荐  Mendix 披露低代码方法论,解读真实技术趋势
张一鸣卸任CEO,立下10年之约,期望突破线性延伸王炸不断,半导体巨头们到底在打什么牌
Python 爬影评,《悬崖之上》好看在哪里点分享点收藏点点赞点在看

OpenCV 实战:3 步实现图像降噪相关推荐

  1. OpenCV实战(12)——图像滤波详解

    OpenCV实战(12)--图像滤波详解 0. 前言 1. 频域分析 2. 低通滤波器 3. 图像下采样 3.1 使用低通滤波器下采样图像 3.2 内插像素值 4. 中值滤波器 5. 完整代码 小结 ...

  2. OpenCV实战(3)——图像感兴趣区域

    OpenCV实战(3)--图像感兴趣区域 0. 前言 1. 感兴趣区域 1.1 ROI 实例 1.2 定义 ROI 2. 使用图像掩码 3. 完整代码示例 小结 系列链接 0. 前言 在实际应用场景下 ...

  3. OpenCV实战(14)——图像线条提取

    OpenCV实战(14)--图像线条提取 0. 前言 1. 检测图像轮廓 1.1 图像轮廓 1.2 使用 Canny 算子检测图像轮廓 2. 使用霍夫变换检测图像中的线条 2.1 线条的表示 2.2 ...

  4. 基于OpenCV实战:3步实现图像降噪

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在本文中,我们将展示如何通过三个简单的步骤来实现降噪.我们将使用机 ...

  5. Opencv实战【3】——图像修复与图像锐化(darling in the franxx)

    目录 前言 图像修复 图像锐化 darling in the franxx图片 总结 前言 前天,在群里看见有人发了这张表情包: 感觉女主有点好看,然后问室友是啥番剧(darling in the f ...

  6. [OpenCV实战]6 图像拼接和图像融合

    索引目录 1.问题描述 2.解决思路 3.程序算法 4.总结 参考 1.问题描述 将含有公共视野相同特征的两张图像拼接融合 2.解决思路 先使用sift算法对两张图像进行特征点提取和匹配,此时特征点过 ...

  7. OpenCV实战(4)——像素操作

    OpenCV实战(4)--像素操作 0. 前言 1. 图像的基本组成 2. 访问像素值 2.1 修改图像像素 2.2 cv::Mat_ 模板类 2.3 完整代码示例 3. 用指针扫描图像 3.1 图像 ...

  8. OpenCV实战(7)——OpenCV色彩空间转换

    OpenCV实战(7)--OpenCV色彩空间转换 0. 前言 1. RGB 色彩空间 2. 色彩空间转换 2.1 CIE L*a*b* 色彩空间 2.2 其它色彩空间 3. 用色调.饱和度和亮度表示 ...

  9. OpenCV实战(2)——OpenCV核心数据结构

    OpenCV实战(2)--OpenCV核心数据结构 0. 前言 1. cv::Mat 数据结构 1.1 cv::Mat 简介 1.2 cv::Mat 属性 1.3 完整代码示例 2. 探索 cv::M ...

最新文章

  1. python黑色背景编辑器_如何更换python默认编辑器的背景色
  2. Android中的Menu
  3. NetScaler SDWAN 详细配置手册
  4. Jupyter Notebook 快捷键 和 Markdown知识点总结
  5. Android安全与逆向之Dex动态加载
  6. 小例子学习C#扩展方法
  7. linux 写一个包含test的脚本程序,linux的test命令及相关shell脚本详解
  8. git 小乌龟 配置_Git-TortoiseGit完整配置流程
  9. KEIL下载程序失败系列问题
  10. MES系统供应商评估报告-- Gartner出品
  11. wsyy应用程序中的服务器错误,wsYY的博客
  12. 如何免费的把 PDF 转换为 Word文档?
  13. markdown如何调整行距_Markdown基础语法
  14. redis+mc review
  15. 如何把汉字转成五笔与拼音(首字母或全部字母)
  16. 2019年南京大学计算机考研分数线,南京大学2019年考研复试分数线已公布
  17. Git详解之四:服务器上的Git
  18. 如何使用 COMSOL 进行电热分析?
  19. 计算机英语上海答案,上海居转户 计算机或英语职称证书
  20. CANoe.DiVa操作指南—快速复用配置模板

热门文章

  1. 2018年IT市场最大的技术趋势和热点预测
  2. 给 Windows 驱动程序安装提速
  3. 基于多核DSP处理器DM8168的视频处理方法
  4. 携程App for Apple Watch探索
  5. UML与软件建模 第三次作业
  6. 灭霸—个人冲刺(4)
  7. 树链剖分——线段树区间合并bzoj染色
  8. Mysql 查询 字符串 (索引和通配符)
  9. 结对开发--求二维数组的最大子数组
  10. LeetCode Add Binary