0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍下使用 OpenCV 的三个基本功能以及噪声的类型分析与处理

Dbwd_Imgtec 2018-02-07 16:35 次阅读

总结学习下图像处理方面基础知识。

这是第一篇,简单的介绍下使用 OpenCV 的三个基本功能:

• 图像的读取• 图像的显示• 访问图像的像素值

然后概述下图像噪声的类型,并为图像添加两种常见的噪声:高斯噪声和椒盐噪声。最后,使用中值滤波和均值滤波来处理带有噪声的图像。

OpenCV 基础

在 OpenCV 中,完成图像的输入输出以及显示,只需要以下几个函数:

1. namedWindow

创建一个可以通过其名字引用的窗口。第一个参数,设置窗口的 name,可以通过name引用该窗口;第二个参数,设置窗口的大小。有以下几个选择:

• WINDOW_NORMAL or WINDOW_AUTOSIZE 调整窗口的大小以适应图像,不同的是,使用WINDOW_NORMAL可以手动调整窗口的大小;WINDOW_AUTOSIZE不能调整窗口的大小。• WINDOW_FREERATIO or WINDOW_KEEPRATIO 改变窗口时是否会保持图像的ratio不变,没发现这俩有什么区别。

2. imshow

显示图像

3. imread

读取图像数据到Mat中,第一个参数是图像的文件名;第二个参数是标志,标识怎么处理图像的色彩。常用的几个选项:

• IMREAD_UNCHANGED 和原图像保持一直不变• IMREAD_GRAYSCALE 将图像转换为单通道的灰度图• IMREAD_COLOR 将图像转换为3通道的BGR,默认选项• IMREAD_REDUCED_GRAYSCALE_2 IMREAD_REDUCED_GRAYSCALE_4 IMREAD_REDUCED_GRAYSCALE_8 单通道灰度图读入图像,并减小图像的大小。减小的值为1/2,1/4,1/8• IMREAD_REDUCED_COLOR_2 IMREAD_REDUCED_COLOR_4 IMREAD_REDUCED_COLOR_2 3通道BGR读入图像,并减小图像的大小。减小的值为1/2,1/4,1/8

4. Mat

Mat 是 OpenCV 中最重要的数据结构,在做图像处理时基本都是对该结构体的操作。

Mat 由两部分构成:矩阵头和矩阵数据,矩阵头较小,创建的每个 Mat 实例都拥有一个矩阵头,而矩阵数据通常占有较大的空间,OpenCV 中通过引用计数来管理这部分内存空间,当调用赋值运算符和拷贝构造函数时,并不会只复制矩阵头,并不会复制矩阵数据,只是将其的引用计数加1。例如:

上面代码中的 a,b 和 m 各自拥有自己的矩阵头,其引用的数据却指向同一份。也就是说,修改了其中任意一个,都会影响到其余的两个。

要想复制矩阵数据,可以调用 clone 和 copyTo 这两个函数

将图像读入到 Mat 后,有三种方式访问 Mat 中的数据:

• 通过指针• 使用迭代器• 调用 at

图像噪声

图像噪声是图像在获取或传输的过程中受到随机信号的干扰,在图像上出现的一些随机的、离散的、孤立的像素点,这些点会干扰人眼对图像信息的分析。图像的噪声通常是比较复杂的,很多时候将其看成是多维随机过程,因而可以借助于随即过程描述噪声,即使用概率分布函数和概率密度函数。

图像的噪声很多,性质也千差万别, 可以通过不同的方法给噪声分类。

按照产生的原因:

• 外部噪声• 内部噪声

这种分类方法,有助于理解噪声产生的源头,但对于降噪算法只能起到原理上的帮组。

噪声和图像信号的关系,可以分为:

• 加性噪声,加性噪声和图像信号强度不相关,这类噪声可以看着理想无噪声图像f和噪声的和。• 乘性噪声,乘性噪声和图像信号是相关的,往往随图像信号的变化而变化

而为了分析处理的方便,常常将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相独立的。

最重要的来了,按照概率密度函数(PDF)分类:

• 高斯噪声,高斯噪声模型经常被用于实践中。• 脉冲噪声(椒盐噪声),图像上一个个点,也可称为散粒和尖峰噪声。• 伽马噪声• 瑞利噪声• 指数分布噪声• 均匀分布噪声

这种分类方法,引入了数学模型,对设计过滤算法比较有帮助。

给图像添加噪声

按照指定的噪声类型,生成一个随机数,然后将这个随机数加到源像素值上,并将得到的值所放到[0,255]区间即可。

C++11 随机数发生器

新的随机数生成器被抽象成了两个部分:随机数生成引擎和要生成的随机数符合的分布。

随机数引擎有三种:

linear_congruential_engine 线性同余算法• mersenne_twister_engine 梅森旋转算法• subtract_with_carry_engine 带进位的线性同余算法

第一种最常用,而且速度比较快;第二种号称最好的伪随机数生成器

添加图像噪声

使用C++的随机数发生器为图像添加两种噪声:椒盐噪声和高斯噪声。椒盐噪声是图像中离散分布的白点或者黑点,其代码如下:

上述代码中使用ptr()获取图像某一行的行首指针,得到行首指针后就可以任意的访问改行的像素值。

高斯噪声是一种加性噪声,为图像添加高斯噪声的代码如下:

随机产生符合高斯分布的随机数,然后将该值和图像原有的像素值相加,并将得到的和压缩到[0,255]区间内。

左边是原图,中间的是添加高斯噪声后的图像,最右边的是添加椒盐噪声后的图像。

使用滤波器去除噪声

根据噪声类型的不同,选择不同的滤波器过滤掉噪声。通常,对于椒盐噪声,选择中值滤波器(Median Filter),在去掉噪声的同时,不会模糊图像;对于高斯噪声,选择均值滤波器(Mean Filter),能够去掉噪声,但会对图像造成一定的模糊。

在 OpenCV 中,对应于均值滤波器的函数是 blur,该函数需要5个参数,通常只设置前3个后两个使用默认值即可。blur(m, m2, Size(5, 5));第一个参数是输入的图像,第二个参数是输出的图像,第三个参数是滤波器的大小,这里使用的是5×55×5的矩形。

对应于中值滤波器的函数是medianBlur(m1, m3, 5);前两个参数是输入输出的图像,第三个参数是滤波器的大小,由于是选取的是中值,滤波器的大小通常是一个奇数。

下图是对有噪声图像使用滤波器后的结果,中间的是原始图像,左边的是使用均值滤波器过滤高斯噪声后的结果;右边的是使用中值滤波器过滤椒盐噪声后的结果。可以明显的看出,这两种滤波器都能够很好的去掉图像的噪声,但会对图像造成一定的模糊,尤其是均值滤波器造成的模糊比较明显。

总结

本文算是第一篇文章,简单的介绍下 OpenCV 的基本使用;接着访问图像中的像素,并借助于C++11的随机数库,为图像添加高斯噪声和椒盐噪声;最后使用中值滤波器和均值滤波器除去图像,并对结果进行了对比。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 噪声
    +关注

    关注

    13

    文章

    1117

    浏览量

    47363
  • 图像处理
    +关注

    关注

    27

    文章

    1280

    浏览量

    56627
  • OpenCV
    +关注

    关注

    29

    文章

    626

    浏览量

    41247

原文标题:图像处理基础(1):噪声的添加和过滤

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【NUCLEO-F412ZG试用体验】迟来的开箱及基本功能介绍

    ` 本帖最后由 xcs101 于 2017-1-1 21:36 编辑 迟来的开箱及基本功能介绍大学最后一年幸运地申请到了试用,不过由于期末考试的时间临近,一直没将试用报告整理处理,难得考完试
    发表于 01-01 21:30

    物联网的最基本功能是什么?

    万物互联大时代,物联网的最基本功能是什么?
    发表于 06-16 11:33

    BMS的基本功能和硬件拓扑

    BMS基本功能BMS 的硬件拓扑BMS的状态估算及均衡控制电池内短路的快速识别
    发表于 12-16 06:30

    MCU的基本功能及程序编写

    MCU的基本功能MCU程序的编写
    发表于 01-12 07:53

    MCU的基本功能和程序编写

    MCU的基本功能MCU程序的编写
    发表于 01-14 07:42

    MCU的基本功能及程序编写

    MCU的基本功能MCU程序的编写
    发表于 02-02 06:05

    MCU的基本功能

    MCU的基本功能MCU程序的编写
    发表于 02-05 06:37

    MCU的基本功能有哪些呢

    以下来自Atmel Mega128的说明手册:微控制器(微处理器)Microcontroller(MCU)的四基本功能为:1.access memory,2.perform calculation
    发表于 11-03 06:50

    STM32CUBEMX基本功能如何配置?

    STM32CUBEMX基本功能如何配置?
    发表于 11-23 06:12

    串口的基本配置和基本功能是什么?

    串口功能有哪些?串口的基本配置和基本功能是什么?
    发表于 12-10 07:19

    reertos基本功能包括什么

    本文介绍嵌入式实时操作系统FreeRTO的常用API,freertos基本功能包括 任务调度、内存管理、中断管理、定时器管理、消息队列、信号量、互斥锁等。1. FreeRTOS 任务相关API
    发表于 12-27 06:36

    RTOS具有的基本功能有哪些

    title: 【编写RTOS】前序author: zhoujiabotags:RTOS任务切换Cortex - M3date: 2020-05-08 16:53:00一RTOS具有的基本功能
    发表于 01-06 07:11

    介绍解决USART通信的最基本功能实现的编程思路

    作为初学stm32的小白,下面我来介绍解决USART通信的最基本功能实现的编程思路。1.
    发表于 01-20 07:17

    介绍操作系统的基本功能以及UCOSII的移植方法

    文章向大家介绍操作系统的基本功能以及UCOSII的移植方法。RTOS:Real time Operation SystemKeil RTX 是免版税的确定性实时操作系统,适用于 ARM 和 Cortex-M 设备。RTOS可以
    发表于 02-18 06:59

    自动发电控制系统具有三个基本功能

    自动发电控制系统(AGC)具有三个基本功能,这些功能在电力系统的运行和调度中发挥着重要作用。以下是这三个基本功能的详细解析:
    的头像 发表于 10-03 15:05 295次阅读