关于OpenCV的初步认识和其在图像去噪上的应用

关于OpenCV的初步认识和其在图像去噪上的应用

电子科技大学格拉斯哥学院 2017级 周泉

一、前言

在2017年度电子科技大学开设的新生研讨课上,来自各学院的教授们为我们分享了许多电子方面的先进技术及其应用。例如雷达制导,卫星定位以及机器学习等等。综合课上内容和自身感悟,我选择在机器学习中扮演了重要角色的计算机视觉作为研究领域,完成课程的调研报告。
二、内容主体
本报告的内容主要分为两部分,第一部分为机器视觉和OpenCV软件的简单介绍,第二部分为运用OpenCV软件处理图像噪声问题的基本方法。
1、计算机视觉和OpenCV
计算机视觉是一个在图像处理基础上发展起来的新兴领域。它指的是将计算机接收到的图像或视频数据用其它形式表达出来,并据此作出决策判断。这听起来非常容易,因为人类不需特殊训练就可从眼睛捕捉到的图像中做出简单识别。但不要忘记这依赖的是我们的视觉神经和大脑协同合作的结果。在这一近乎瞬时的过程中,我们的大脑接收了巨量的视觉信息并根据人学过的知识完成筛选。然而,一个简单的图像,传递给计算机的却是一个复杂的数值矩阵,并且矩阵中的每一个数值都可能蕴含着噪声等干扰信息。更复杂的是三维图像的识别,因为这要求计算机同时处理至少两个角度的图像并将它们进行组合,由此带来的计算量是难以想象的。因此,我们需要一个专业的视觉处理软件,依靠其中已经封装好的、功能强大的函数完成这个看似不可能的工作。OpenCV就是一款知名的计算机视觉软件。
OpenCV是一个Intel开发的开源计算机视觉库,采用C/C++语言编写,具有处理速度快、完全开源、免费等多项优势。在计算机视觉、信号处理等方面功能强大。受制于专业水平,本文只讨论OpenCV的一些基本概念操作以及图像去噪的原理。
2、OpenCV的一些基本概念
了解一些OpenCV的基本概念对以后的操作至关重要。很惭愧,我对OpenCV的认识也只停留在入门阶段,只能结合相关资料谈一下自己的理解,谬误之处欢迎各位斧正。
○基本数据类型
和C语言相似,OpenCV也有自己的基本数据类型,他们是:cvPoint、cvSize、cvRect和cvScalar。他们都属于结构体。cvPoint和cvSize都有两个整形成员,其中cvPoint指图像中的点,cvSize两个成员指代图像的宽与高;cvRect有四个整形成员,可以粗略看成是前两者的结合。cvScalar有一个单独成员val,它是一个指向四个双精度浮点型数组的指针,在OpenCV中常用来表示RGBA值(即颜色空间)。
○图像类型和矩阵类型
除基本数据类型外,OpenCV还提供了针对图像和矩阵的数据类型:IplImage和cvMat,前者可以被视为从后者中派生的。cvMat被用来定义一个矩阵。在OpenCV文件下的目录中其原型如下:

typedf struct CvMat{
int type;
int step;
int* refcount;    \\for internal use only
union{
uchar* ptr;
short* s;
int* i;
float* f1;
 double* db;
 }data;
 union{
 int rows;
 int height;
 };
 union{
 int cols;
 int width;}cvMat;

可以看到其中定义了宽度、高度、类型、行数据长度(step)等信息(其余变量未作深入了解),需要注意的一点是,以上只是定义了一个“矩阵头”,即只包含矩阵信息但未在内存中为其分配数据存储。当我们需要传递同一张图像时,可以只定义矩阵头,共享矩阵的数据,这样可以大幅减少信息处理量。
○IplImage数据类型
IplImage数据结构本质上也是一个cvMat数据,他们的定义中有很多相似,其中不同的变量有 depth(深度)nchannals(通道)origin(原点位置)dataorder(通道组合方式)以及ROI(感兴趣区域)。他们是图像处理函数(对角化、正交、绝对值等)的基础数据。
○卷积的概念
在图像处理中,卷积是一种基础的操作,不过理解起来比较困难。它是对图像的每一个部分分别进行操作。卷积实现的功能由“卷积核”决定,卷积核是一个大小固定,由数值构成的数组。数组的参考点常在数组的中心,其大小被称为”核支撑“。将卷积核的参考点定位到图像中的像素点,核的其余元素覆盖对应的像素点位置。对于每一个像素点我们都可以得到像素值和对应的核值,两者相乘后求和,取得的值放置在图像参考点的位置。我们可以对图像中的每个点执行相同操作。
3、图像噪声处理的基本方法
对图像进行处理最常见的方式是滤波器。通过滤波器,滤波器可以在保留图像细节的前提下对图像中的噪声信号进行抑制,图像经过滤波器有利于机器识别出对象特征,同时也使得图像呈现出更好的视觉效果。常见的滤波器分为两大类:线性滤波器、非线性滤波器。
在图形处理中常见的线性滤波有均值滤波和高斯滤波。均值滤波是最简单的滤波,原理是邻域平均法,即用一片图像区域的各个像素的均值来替代原图像中的各个像素值。具体操作是:在待处理的像素点周围选择模板,求模板内所有点像素的均值,将其赋予当前点;高斯滤波与之相似,不过是改为对整幅图像的所有像素点进行加权平均,从数学的角度来看,该过程好像是对图像和高斯分布进行了卷积,因此高斯滤波对抑制服从高斯分布的噪声特别有效。
有时在处理中我们还会用到非线性滤波。例如图像中出现的是散粒噪声时,即某些点像素偏离很大的时候,平均的办法就不再适用了。这时需使用中值滤波法。其基本原理类似于中位数,即把图像中某点的像素用附近区域内各点值的中值取代,从而消除孤立的噪声点。这很好解决了斑点噪声、椒盐噪声的干扰问题。同时它也能克服线性滤波器带来的边缘细节模糊问题。但缺点是处理的时间比较长。
双边滤波原理是结合图像的空间近似度和像素值的相似度进行某种这种处理,同样能较好的保留边缘信息,它的缺点是过多保留高频信息,因此对于高频噪声不能很好的进行过滤。
以上就是滤波器在图像处理中的基本原理。由于相关函数原型的代码比较复杂,且在opencv程序中有相关程序,我认为可以留待以后在做深入探究,因此在此部分侧重于对操作过程原理的讨论。希望自己在日后深入学习opencv后能对操作过程由更深刻的见解。
三、总结
机器视觉作为一门新兴的学科,在计算机、信号、统计、医疗、军事等领域内都有非常广泛的应用和广阔的发展前景。然而,原始机器的图像识别和处理算法非常复杂,耗费大量的时间。因此工程师需要专用的处理软件来完成机器视觉。OpenCV作为一个开放源代码的应用平台拥有强大的功能和庞大的用户基数,是成为视觉处理软件的优秀代表。
OpenCV在图像降噪中常用的方法是图像滤波,包括线性与非线性的滤波。这些方法的基本原理可与统计学中的取均值、取中值进行类比。通过对各点像素值进行操作消除无意义的噪声,为图像的进一步处理奠定条件。

参考资料:1、《学习OpenCV(中文版)》Gray Bradski Adrian Kaehler著 于仕琪 刘瑞祯译本 清华大学出版社
2、《OpenCV3编程入门》毛星云 冷雪飞等著 电子工业出版社

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值