社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

使用Python中的OpenCV降噪功能增强图像的3个步骤

OpenCV学堂 • 4 年前 • 409 次点击  

点击上方↑↑↑OpenCV学堂”关注我

来源:公众号 小白学视觉 授权




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


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


介绍


在这个项目中,我们将使用三个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是官方文档推荐的值,因为它适用于大多数嘈杂的图像情况)。


步骤1:安装软件包


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

pip install numpy opencv-python


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

import cv2import numpy as np


 


步骤2:导入图像


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

这是我们所使用的图像:

这是读取图像的行。我们正在使用OpenCV的imread方法:

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


现在,我们进入第三步,也是最后一步,我们将在实际操作中看到降噪效果。


步骤3:对影像进行除噪


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

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


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

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


比较结果

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

这是一张查看前后变化的图片。我选择了denoise_1我的最终结果。

恭喜你!我们开发了一种程序,可以将图像的噪点降低不同程度。还有许多其他图像缩小算法。小伙伴可以尝试一下,然后选择自己喜欢的。根据我们的经验,它们不如我们在本文中使用的那样强大,即非局部均值降噪算法。一些降噪算法也称为模糊算法。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/111223
 
409 次点击