OpenCV 实战:3 步实现图像降噪
来源 | 小白视觉志
头图 | 下载于视觉中国
本文将展示如何通过三个简单的步骤来实现降噪。我们将使用机器学习训练的降噪模型,最好的降噪模型之一。
程序可以判断图像是否有噪点吗?这应该是一个很有创意的想法,因为我们的降噪模型不够智能,无法计算出噪声。我们必须自己确定价值观。在这种情况下,最好的方法通常是尝试不同的值并找到最佳结果。经过一些练习,我们将获得更多经验,并且找到最佳参数值将更加容易。
导读:
在这个项目中,我们将使用三个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 爬影评,《悬崖之上》好看在哪里点分享点收藏点点赞点在看
相关文章:

一条数字链路连接的端口无法UP及后续相应故障的排除
故障现象1: 运营商检测线路正常,但是端口无法up。 解决办法: 1、翻转端口 2、将端口速率强制为1000M,全双工#speed 1000 #dup full 端口正常UP。 故障现象2: 线路丢包5%。 解决办法: 1、检查端口光功率&…

华为:HarmonyOS 即将开源!
整理 | 晋兆雨出品 | CSDN(ID:CSDNnews)5 月 24 日,在鸿蒙开发者创新大赛颁奖典礼上,华为消费者业务软件部总裁王成录宣布:HarmonyOS 将会开源开放,并在武汉大学等15个学校开展 HarmonyOS 课程。…

C#实现网段扫描
摘要 想必大家对小榕时光等扫描器都非常熟悉了,有没有自己写一个的冲动。最近微软推实施了.NET战略方案,C#是主推语言,你们是否有兴趣用C#来实现对局域网IP地址的扫描,尝试一下自己写的快乐,那么请跟我来。 正文 1.先介…

sbt配置nexus仓库
2019独角兽企业重金招聘Python工程师标准>>> 最近学习Scala,不可避免的要用到sbt。爱折腾的我把原本比较简单的事情搞的复杂了,来来回回搞了好久,记录下来,有同样爱折腾的盆友可以参考下。 sbt在windows下如果是默认安…

C#编程(十二)----------函数
类和结构 类和结构实际上都是创建对象的模板 ,每 个对象都包含数据 ,并 提供了处理和访问数据的方法。 类定义了类的每个对象 (称 为实例 )可 以包含什么数据和功能 。 例如 ,如 果 一 个类表示 一 个顾客 ,就可以定义字段 CustomerID、 FirstName、 LastNane和 Address,以 包含…

Linux很实用的命令查找软件安装目录
#whereis php #which php #php -v 查看版本号 差异自己去体会

Python 库突发 PyPI 危机!
整理 | 梦依丹出品 | CSDN(ID:CSDNnews)据 BleepingComputer 报道,Python 官方软件包存储库 PyPI 遭受了黑客攻击,攻击者通过注入垃圾邮件包的形式发起了洪水攻击。这些垃圾邮件及软件包用电影、电视节目名称命名&…

scala入门之代码补全
为什么80%的码农都做不了架构师?>>> 在scala的shell命令行中,我们可以使用像Linux那样的代码补全功能。Linux中是使用Tab键补全,scala的shell命令行也是使用这个键。例如,我们在“ssss”这个字符串上调用toUpperCase方…

pycharm第一个Python程序
print ("Hello word!"); 这是Python3.xx的语法!

C#枚举系统安装的所有打印机
在下面的程序中我们将把系统中所安装的打印机用列表框列出来,同时为默认打印机设置缺省值。 在下面的程序中我们用到了两个主要的类,把所有的打印机列表出来用到了PrinterSettings 类,获取系统默认打印机用到了PrintDocument 类,下面我们就动…

编译安装linux内核步骤
编译安装linux内核步骤: 一.获取内核源码 源码网址:www.kernel.org 二.解压内核源码 首先以root帐号登录,然后进入/usr/src子目录。如果用户在安装Linux时,安装了内核的源代码,则会发现一个linux-x.y.z的子目录。该目录…

遏制企业数据泄露之殇,大咖切磋云安全的攻防之道
整理 | 寇雪芹出品 | AI 科技大本营(ID:rgznai100)5 月 7 日,美国最大燃油管道、东部地区油气输送主动脉 Colonial Pipeline 计算机系统被黑客入侵和勒索,导致美国17个州和华盛顿特区进入紧急状态。这次黑客入侵无异于一记重拳&am…

【NOIP2016】愤怒的小鸟
Description Kiana最近沉迷于一款神奇的游戏无法自拔。 简单来说,这款游戏是在一个平面上进行的。 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如y ax^2 bx的曲线,其中a, b是…

“智能”基石:人工智能数据标注与训练,是决定智能时代的第一步
记者 | 邓晓娟 2021年5月20日~23日,由深圳市科学技术协会、深圳市商务局、深圳市福田区人民政府共同指导,深圳市科技开发交流中心、深圳市人工智能行业协会联合主办的2021第二届深圳国际人工智能展开幕式暨智能制造创新高峰论坛在深圳会展中心࿰…

C#中对POP3邮件解码
Base64和下面将要介绍的Quoted-Printable都属于MIME (多部分( multi-part)、多媒体电子邮件和 WWW 超文本的 一种编码标准,用于传送诸如图形、声音和传真等非文本数 据)。MIME定义在RFC1341中。 Base64是现今在互联网上应用最多的一种编码…

php 命中算法
function hitted($rate,&$num){if (is_string($rate))$rate ( float ) $rate;if ($rate > 1)throw new ArgumentException(传入的概率值 $rate 必须是 0~1 之间的浮点数或整数(0|1)。, -1);$r 100 * $rate;$v mt_rand(1, 100);$num $v;if ($v < $r)return true;r…

iframe 数据传递
1.使用iframe是父页面与子页面的数据传递2.使用iframe 跳转部分研究处理ios兼容性 2.1 safai 会阻止iframe里的window.open()函数 采用了讲需要跳转的页面传向父页面,让父页面进行处理跳转 //子页面向父页面传递信息 parent.postMessage({变量名: 数据}, *);//子页面…

C#调用控制面板选项
因为C#是由Microsoft公司推出的,所以它对Microsoft的所有产品的兼容性与相互操作性是其它公司开发出的编程语言所不及的。Microsoft开发的Windows操作系统与C#之间的关系也非常紧密。从而实现了C#对Windows的无缝操作。 下面,我们就以“C#对Windows控制面…

2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?
5月27日20点,第 13 期「大咖来了」! CSDN 副总裁于邦旭、融云 CTO 任杰、即构科技副总裁刘莉,多方视角探讨 RTC 超级风口与机遇,还有众多精美礼品等你拿! 立即戳:https://live.csdn.net/room/csdnnews/cn…

查询/新建/修改本地用户和组
通过ADSI新建用户user2: 1 #创建新用户,创建完成后的新用户不隶属于任何组2 $computerName$env:computername3 #定义用户名、密码、描述信息4 $username"user2"5 $userpass"password"6 $userdesc"description"7 $ADSI [A…

支付宝接入参考博客
http://www.cnblogs.com/stulzq/p/7606164.html转载于:https://www.cnblogs.com/baiqian/p/7609443.html

活动目录的优势
活动目录的优势 Active Directory服务提供了单一登入的能力和一个所有基础设施相关信息的集中储存机制,大幅度的简化了使用者和计算机的管理,同时提供优越的网络资源存取能力。我在本文中主要讲述一下Microsoft Windows Server 2003 中的 Active Directo…

C#编写一个抓网页的应用程序
本文利用C#和.NET提供的类来轻松创建一个抓取网页内容源代码的程序。HTTP是WWW进行数据访问最基本的协议之一,在.NET的基本类型库类中提供了两个对象类:HTTPWebRequest和HTTPWebResponse,分别用来向某资源发送请求和获得响应。为了得到一个资…

从粗放到精细,如何用AI技术实现信息流广告投放的降本增效
中国的SaaS在经历2020年全球爆发的疫情之后,迎来了前所未有的高光时刻,或者说蛰伏数年终于迎来了爆发。 2021年5月20日,ZTouch,北京中量质子网络信息科技有限公司旗下的企业数智化服务平台,发布了广告数智投放平台Dar…

广义动量定理之作用点的应用分析
广义动量定理之作用点的应用分析 从广义动量定理FαtnmV的角度说,改变作用点,就可以改变成果nmV。作用点派以调整作用点的准确度作为达成目的的手段。 作用点应用于聚焦理论 理论简介:聚焦理论使企业集中力量于某几个细分市场,主攻…

将DBF,XLS,XML,MDB文件导入C#DataGrid的方法
以下的源码里分别给出了将DBF,XLS,XML,MDB文件导入C#DataGrid的方法,供各位参考。 //PutInDataSet.cs的源码 using System; using System.Data.Odbc; using System.Data.OleDb; using System.Data; using System.Collections; namespace PutInDataSet { /// <summary…

超星未来发布新一代高级别自动驾驶车载计算平台
5月25日,由中国汽车工程学会、国家智能网联汽车创新中心主办的第八届国际智能网联汽车技术年会(以下称“CICV 2021”)在北京亦创国际会展中心举办。超星未来联合创始人、首席技术官梁爽博士应邀出席发表演讲,并在主论坛上发布了超…

Effective Java - Item 1: Consider static factory methods instead of constructors
考虑使用静态工厂方法来替代构造方法, 这样的做的好处有四点. 1. 更好的表意 有的构造方法实际上有特殊的含义, 使用静态工厂方法能更好的表达出他的意思. 例如 BigInteger(int, int, Random) , 它返回一个可能是素数的 BigInteger. 使用工厂方法 BigInteger.probablePrime 可以…

服务器和普通用户电脑的区别
服务器和普通用户电脑的区别 1、硬件方面 经常收到戴尔的广告邮件,看到里面的服务器配置不怎么高,可是价格都很贵。想知道,服务器和普通电脑的区别在哪里呢? 目前使用服务器的站长和企业也比较多,也许有人会觉得二者差…

C#:消息队列应用程序
文章“MSMQ:可伸缩、高可用性的负载平衡解决方案(英文)”介绍了一种解决方案,用于高可用性消息队列 (MSMQ) 的可伸缩负载平衡解决方案体系结构。此解决方案中涉及了一种将 Windows 服务用作智能消息路由器的开发方案。这样的解决方…