基于OpenCV的图像处理滤波算法研究
2018-06-27王晓鹏
王晓鹏
(辽宁建筑职业学院,辽宁 辽阳 111000)
1 OpenCV简介
OpenCV的全称是Open Source Computer Vision Library。它是一个开源发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上,由一系列C函数和少量C++类构成,提供多种语言接口,它不依赖于其他外部库,拥有多个跨平台的中、高层API及多种图像处理和计算机视觉方面的通用算法。
2 滤波算法原理及Matlab实现
2.1 中值滤波
中值滤波技术是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,其基本原理是:数字图像或数字序列中某一点的数值[1],由该点的一个邻域中各点值的中值来代替,让周围的像素值接近真实值,从而消除孤立的噪声点。采用的方法是使用序列结构的二维滑动模板,将模块内的像素按照像素值的大小进行排序,生成单调上升或下降的为二维数组。二维中值滤波输出为g(x,y)=med{f(xk,y-l),(k,l∈W)},其中g(x,y),f(x,y)分别为原始图像和处理后的图像,W为二维模板,通常为2×2或3×3区域,可以是不同的的形状。
2.3 数学形态滤波
数学形态滤波几个主要流程为膨胀、腐蚀、膨胀处理、腐蚀处理过程。膨胀主要是将与物体接触的所有背景点合并到该物体中,并使边界向外部扩张,利用膨胀技术可以填补物体中的空洞。其处理结果是与物体接触的所有背景点合并到该物体中;腐蚀和腐蚀过程主要使边界向内部收缩,消除小且无意义的物体或边界点[2]。
2.4 高斯滤波
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理等减噪过程。高斯滤波的主要过程是对整幅图像的像素值进行加权然后求平均值的过程,也就是说每一个像素点的数值,都由其本身和邻域内的其他像素值经过加权平均后得到[3]。
2.5 Matlab程序
主要的编程思路和过程为:
1)使用imread()函数读入原始的彩色图像;
2)由于中值滤波只能处理灰度图像,采用rgb2g ray命令将彩色图像转化为灰度图像;
3)用imnoise()函数在灰度图像中加入椒盐噪声(由图像切割产生黑白相间的噪声);
4)利用medfilt2()函数进行中值滤波,并在Matlab环境下运行。
相应的MATLAB主程序如下:
3 Visual C++程序实现
自从Open CV踏入2.0时代,使用Mat类数据结构作为主打之后,OpenCV变得越发类似于Matlab计算仿真工具[4],甚至有些函数名称都和Matlab一样,如大家所熟知的imread,imwrite,imshow等函数,本算法程序清单如下:
4 结语
本文介绍了用Matlab和Visual C++调用OpenCV函数库来实现图像滤波,包括中值滤波、高斯滤波、数学形态学滤波等处理算法,并给出相应的程序,使用这种调用OpenCV函数处理图像的方法,提高了开发效率,减少了设计成本。该方法可广泛应用于图像处理领域,为解决复杂的图像处理算法提供了简洁的的途径,具有一定的实用价值。
[1]石青云.数学空间中的数学形态学[M].北京:科学出版社,1997:60-62.
[2]何东健.数学图像处理[M].西安:西安电子科技大学出版社,2003:110-116.
[3]郑南宁.计算机视觉与模式识别[M].北京:国防工业出版社,1998:50-60.
[4]Haralick R M.Ridges and valleys on digital images[J].Computer Vision Graphics&Image Processing,1983,22(1):28-38.