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

共 2491字,需浏览 5分钟

 ·

2021-05-25 16:29

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达


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


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


导读


在这个项目中,我们将使用三个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)


降噪效果分析


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


— — 完 — —


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报