OpenCV之cvSmooth函数平滑滤波

        1、cvSmooth函数用法

             定义原型

<span style="font-size:12px;">  void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN,int param1, int param2, double param3, double param4 );</span>
    src:输入图像.
    dst:输出图像.
    smoothtype平滑方法:

CV_BLUR_NO_SCALE(简单不带尺度变换的模糊)-对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像. 但是该选项没有计算平均值的操作,所以比  CV_BLUR  的运算快,但是容易溢出,因此输入输出图像必须有不同的数值精度,才能保证不会溢出。 不缩放比例的simple blur 支持8位的图像输入,但是结果必须是   IPL_DEPTH_16S(CV_16S)   或者   IPL_DEPTH_32S(CV_32S)    简单无缩放的滤波不适合  IN_PLACE  方式:因为输入与输出类型必须不同。


CV_BLUR (simple blur)- -对每个象素param1×param2邻域求和并做尺度变换 1/(param1×param2)。
CV_GAUSSIAN(gaussian blur) - -对图像进行核大小为 param1×param2 的高斯卷积。
CV_MEDIAN(median blur) - -对图像进行核大小为param1×param1 的中值滤波 (邻域是方的)。
CV_BILATERAL(双向滤波) - -应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2.。

    关于双向滤波,可参考http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html。
      param1  平滑操作的第一个参数.
      param2  平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果param2的值为零,则表示其被设定为param1。
      param3  对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算:
      sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核,n=param2 对应垂直核 .  对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小由sigma 计算 (以保证足够精确的操作).

 

         函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。
         没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvaplace相似)和32位浮点数到32位浮点数的变换格式。
         简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮点图像。这两种方法可以(in-place)方式处理图像。
         中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像.


中值滤波      中值滤波法是一种非线性平滑技术,它将每一象素点的灰度值设置为该点某邻域窗口内的所有象素点灰度值的中值。实现方法:
  1. 通过从图像中的某个采样窗口取出奇数个数据进行排序
  2. 用排序后的中值取代要处理的数据即可
  3. 中值滤波法对消除椒盐噪音非常有效,在光学测量条纹图象的相位分析处理方法中有特殊作用,但在条纹中心分析方法中作用不大。中值滤波在图像处理中,常用于用来保护边缘信息,是经典的平滑噪声的方法
          中值滤波原理

          中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个拎域中各点值的中值代替,让周围的像素值接近的值,从而消除孤立的噪声点。方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为2*2,3*3区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。

         高斯滤波

         高斯滤波实质上是一种信号的滤波器,其用途是信号的平滑处理,我们知道数字图像用于后期应用,其噪声是最大的问题,由于误差会累计传递等原因,很多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。于此相关的有Gauss-Lapplace变换,其实就是为了得到较好的图像边缘,先对图像做Gauss平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积=>空域卷积。

         滤波器就是建立的一个数学模型,通过这个模型来将图像数据进行能量转化,能量低的就排除掉,噪声就是属于低能量部分。其实编程运算的话就是一个模板运算,拿图像的八连通区域来说,中间点的像素值就等于八连通区的像素值的均值,这样达到平滑的效果。若使用理想滤波器,会在图像中产生振铃现象。采用高斯滤波器的话,系统函数是平滑的,避免了振铃现象。



2、实例(OpenCV 2.48+VS2012)

 
#include<cv.h>  
#include<highgui.h>  
#include<stdio.h>  
void main()
{IplImage* img_src = 0;IplImage* img_dst = 0;char* pictureImage = (char*)("11.bmp");img_src = cvLoadImage(pictureImage, 1);if (!img_src){printf("Could not load image file:%s", pictureImage);exit(0);}img_dst = cvCreateImage(cvGetSize(img_src), IPL_DEPTH_8U, 3);cvNamedWindow("原始图像:", CV_WINDOW_AUTOSIZE);cvMoveWindow("原始图像:", 100, 100);cvShowImage("原始图像:", img_src);cvNamedWindow("简单模糊:", CV_WINDOW_AUTOSIZE);cvMoveWindow("简单模糊:", 200, 100);//(simple blur)简单模糊- -对每个象素param1×param2邻域求和并做尺度变换 1/(param1×param2)。cvSmooth(img_src, img_dst, CV_BLUR, 3, 3, 0, 0);cvShowImage("简单模糊:", img_dst);//注意使用CV_BLUR_NO_SCALE时,原始图像和目标图像,他们的类型不能是一致的。IplImage* img_dst2 = 0;img_dst2 = cvCreateImage(cvGetSize(img_src), IPL_DEPTH_16S, 3);cvNamedWindow("简单不带尺度变换的模糊:", CV_WINDOW_AUTOSIZE);cvMoveWindow("简单不带尺度变换的模糊:", 300, 100);//(简单不带尺度变换的模糊)-对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像cvSmooth(img_src, img_dst2, CV_BLUR_NO_SCALE, 3, 3, 0, 0);cvShowImage("简单不带尺度变换的模糊:", img_dst2);cvNamedWindow("高斯卷积:", CV_WINDOW_AUTOSIZE);cvMoveWindow("高斯卷积:", 400, 100);//对图像进行核大小为 param1×param2 的高斯卷积。cvSmooth(img_src, img_dst, CV_GAUSSIAN, 3, 3, 0, 0);cvShowImage("高斯卷积:", img_dst);cvNamedWindow("中值滤波:", CV_WINDOW_AUTOSIZE);cvMoveWindow("中值滤波:", 500, 100);//对图像进行核大小为param1×param1 的中值滤波 (邻域是方的)。cvSmooth(img_src, img_dst, CV_MEDIAN, 3, 3, 0, 0);cvShowImage("中值滤波:", img_dst);//  cvSmooth(pFrameMat,pFrameMat,CV_BILATERAL,3,0,0);//双向滤波  //参数不对,改成  //cvSmooth(pFrameMat,pFrameMat,CV_BILATERAL,3,3,11,11);  //试试,后面两个参数分别代表了位置上和颜色上的sigma值,不能设为0的  cvNamedWindow("双向滤波:", CV_WINDOW_AUTOSIZE);cvMoveWindow("双向滤波:", 600, 100);//(双向滤波) - -应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2.。cvSmooth(img_src, img_dst, CV_BILATERAL, 3, 3, 11, 11);cvShowImage("双向滤波:", img_dst);cvWaitKey(0);cvReleaseImage(&img_src);cvReleaseImage(&img_dst);cvDestroyWindow("原始图像:");cvDestroyWindow("简单不带尺度变换的模糊:");cvDestroyWindow("高斯卷积:");cvDestroyWindow("中值滤波:");cvDestroyWindow("双向滤波:");
}








从结果可以看出,对于椒盐噪声,3x3中值滤波已有很好的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python数字信号处理】——DFT、DTFT(频谱图、幅度图、相位图)

目录 一、离散时间傅里叶变换DTFT 二、离散傅里叶变换DFT 三、DFT与DTFT的关系 ​ 参考&#xff1a; 《数字信号处理》——&#xff08;一&#xff09;.DTFT、DFT(python实现)_远行者223的博客-CSDN博客python绘制频谱图DTFT&#xff0c;DFTpython绘制频谱图&#xff1a;…

ERROR:Tried to register widget id ==basemapGalleryDiv but that id is already registered解决办法

在ArcGIS Server开发中&#xff0c;遇到DIV已经被注册的情况&#xff0c;不能对原DIV内容进行更新。这里需要调用Dojo的destroyRecursive&#xff08;&#xff09;方法&#xff0c;逐个销毁该Widget下的子元素及其后代元素。然后就可以在原DIV上注册新的小部件。 示例代码&…

通过Spring Data Neo4J操作您的图形数据库

在前面的一篇文章《图形数据库Neo4J简介》中&#xff0c;我们已经对其内部所使用的各种机制进行了简单地介绍。而在我们尝试对Neo4J进行大版本升级时&#xff0c;我发现网络上并没有任何成型的样例代码以及简介&#xff0c;而其自身的文档也对如何使用Spring Data Neo4J介绍得语…

图像金字塔

图像金字塔被广泛用于各种视觉应用中。图像金字塔是一个图像集合&#xff0c;集合中所有的图像都源于同一个原始图像&#xff0c;而且是通过对原始图像连续降采样活得&#xff0c;直到达到某个中止条件才停止降采样。&#xff08;当然&#xff0c;降为一个像素肯定是中止条件。…

python使用git进行版本控制-分支管理

1、远程克隆 最好的方式是先创建远程库&#xff0c;然后&#xff0c;从远程库克隆&#xff1a; 首先在github上创建一个新的仓库&#xff0c;名字叫gitskills 我们勾选Initialize this repository with a README&#xff0c;这样GitHub会自动为我们创建一个README.md文件。 下一…

【python数字信号处理】——Z变换

目录 一、公式 二、代码 三、结果 一、公式 频域变量&#xff1a;z 时域变量&#xff1a;n 常见序列的Z变换&#xff1a;信号与系统复习归纳&#xff08;十一&#xff09;&#xff1a;Z变换例题_百把人的博客-CSDN博客_z变换例题基于东南大学陈从颜译《信号、系统和变换》和…

九宫格拼图 支持44 55等

代码下载转载于:https://www.cnblogs.com/ygcool/p/5395343.html

144. Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes values. For example:Given binary tree {1,#,2,3}, 1\2/3return [1,2,3]. 该题是对树做前序遍历 下面分别是递归&#xff0c;非递归&#xff0c;分治三种思路的解题结果 #递归写法 class Solution(object):d…

一体化点焊机将要取代分体式焊钳在汽车制造生产线上的使用

目前大多数汽车制造厂及相关配套钣金件厂家选用的是悬挂式点焊机及分体式焊钳&#xff0c;从焊接变压器的功率参数看&#xff0c;约70 % 为160KVA 的&#xff0c;约30 % 为200 kVA 的。原因主要有两方面&#xff0c;一是新材料如镀锌钢板、高强度钢板、铝合金板的应用&#xff…

【python数字信号处理】——线性卷积

目录 一、公式概念 二、代码 1、numpy库 2、自定义打印出每一步结果 三、结果 一、公式概念 线性卷积_百度百科线性卷积(linear convolution) 在时域描述线性系统输入和输出之间关系的一种运算。这种运算在线性系统分析和信号处理中应用很多&#xff0c;通常简称卷积。中文…

activiti web流程设计器 整合视频 教程 SSM和独立部署的方式

本视频为activiti工作流的web流程设计器整合视频教程整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器&#xff09;本视频共讲了两种整合方式1. 流程设计器和其它工作流项目分开部署的方式2. 流程设计器和SSM框架项目整合在一起的方式视频大小 1.13 GB ~【…

移动端判断横屏竖屏

1. CSS判断横屏竖屏 写在同一个CSS中 media screen and (orientation: portrait) {   /*竖屏 css*/} media screen and (orientation: landscape) and (min-width:450px){   /*横屏 css*/}分开写在2个CSS 竖屏<link rel"stylesheet" media"all and (orie…

第五章 - 图像形态学 - 基于图像金字塔的图像分割(cvPyrSegmentation)

本例程涉及到几个数据结构及方法&#xff0c;CvMemStorage、cvPyrSegmentation()、CvConnectedComp、cvGetSeqElem(). CvMemStorage CvMemStorage Growing memory storage typedef struct CvMemStorage { struct CvMemBlock* bottom;/* first allocated block */ struct CvM…

泛型参数转换的问题

泛型不同参数类型生成的对象是相互独立的。 //如 Tuple<string> ts; Tuple<object> to; //ts to 是两个类型的对象。很多时候&#xff0c;我们希望实现 to ts 这种操作&#xff0c;为什么&#xff1f;因为看上去它应该如此。 为了达到这个目的&#xff0c;就要解决…

【python数字信号处理】——循环卷积(也叫圆圈卷积)

目录 一、公式 二、代码 方法一:遍历 方法二:利用卷积定理 一、公式

UI-UIScrollView

- (void)viewDidLoad { [super viewDidLoad]; scrollView [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; scrollView.backgroundColor [UIColor redColor]; // 是否支持滑动最顶端 // scrollView.scrollsToTop NO; scrollView.delegate self; // 设…

[COCI2015]ZGODAN

题目大意&#xff1a;   给你一个数$n(n\leq10^1000)$&#xff0c;定义一个数是“美丽数”当且仅当这个数各个数位上的数奇偶性不同。   求最接近$n$的“美丽数”&#xff0c;若有多个&#xff0c;则依次输出。 思路&#xff1a;   贪心高精度。   首先找出$n$的第一个…

OpenCV学习笔记(三)——Mat,图像的新容器

自从版本2.0&#xff0c;OpenCV采用了新的数据结构&#xff0c;用Mat类结构取代了之前用extended C写的cvMat和lplImage&#xff0c;更加好用啦&#xff0c;最大的好处就是更加方便的进行内存管理&#xff0c;对写更大的程序是很好的消息。 需要注意的几点&#xff1a;1. Mat的…

jq实现事件委托

事件委托首 页产品展示公司简介关于我们联系我们转载于:https://www.cnblogs.com/haley168/p/eventTarget.html

【python数字信号处理】——scipy库设计滤波器(IIR为例)、绘制滤波器频谱响应、IIR滤波器滤波、读写wav音频文件

目录 一、参考文献 1、scipy接口 2、scipy库介绍+IIR滤波器设计(含GUI)+绘制频谱响应