图像处理 - 平滑处理(cvSmooth)
来源:互联网 发布:域名微信分享防封技术 编辑:程序博客网 时间:2024/05/16 13:12
“平滑处理”也成为“模糊处理”,是一项简单且使用频率很高的图像处理方法,用图很多,但最常见的是用来减少图像上的噪声或者失真。降低图像分辨率时,平滑处理是很重要的。
目前opencv可以提供5中不同的平滑操作方法,所有操作都有cvsmooth函数实现。
(1)简单模糊
利用平均模板,采用领域平均,输出图像是窗口输入图像对应像素的简单平均值。
(2)简单无缩放变换的模糊
简单无缩放变换的模糊与简单模糊本质是相同的,但并没有计算其平均值。但不缩放的比缩放的模糊操作更快一些。
(3)中值滤波
中值滤波的本质上是一种统计的排序滤波器。对于原图像中某点(i,j),中值滤波以该点为中心的领域内的所有像素的统计排序的中值作为(I,j)的响应,中值不同于均值,是指排序队列中位于中间位置的元素的值,例如:采用3*3中值滤波器,某点的8个领域的一系列像素的值为:12,18,18,11,23,22,13,25,118,统计的排序结果为:11,12,13,18,18,22,23,25,118,排在中间位置的第5位18作为中间滤波器的响应。而opencv里讲中心像素的正方形领域内的每个像素值用中间像素值替换。
(4)高斯模糊
平均平滑对领域内的像素一视同仁,为了减少平滑处理中的模糊,得到更自然的平滑效果,而高斯模板是适当加大模板中心点的权重,随着远离中心点,权重迅速减小,从而可确保中心点看起来更接近与他距离更近的点。
高斯模板正是将连续的二维高斯离散化表示,因此任意大小的高斯模板可以通过建立一个(2k+1)*(2k+1)的矩阵M得到,其中(i,j)位置元素可如下确定:
(5)双边滤波
双边滤波是“边缘保留滤波”的图像分析方法,高斯滤波会磨平边缘,而双边滤波提供一种不会将边缘的平滑掉的方法,但作为代价需要更多的时间。与高斯滤波相似,双边滤波会依据每个像素及其领域构造一个加权平均值,加权计算包括两部分,其中一部分加权方式与高斯平滑中相同,第而部分也属于高斯加权,但不是基于中心像素点与其他像素点空间距离之上的加权,而是基于其他像素与中心像素的亮度差值的加权。
Smooth函数
void cvSmooth( const CvArr* src,
CvArr* dst,
int smoothtype=CV_GAUSSIAN,
int param1=3,
int param2=0,
double param3=0 ,
double param4=0 );
src
输入图像。
dst
输出图像。
smoothtype
平滑方法。
param1、param2、param3、param4
这些参数的含义取决于smoothtype的值,有兴趣可以查阅相关资料。
注意:中值滤波主要用来消除椒盐噪声,高斯滤波主要用来消除高斯噪声,自然界一般存在高斯噪声。
/*code*/
#include <highgui.h> #include <cv.h> int main(int argc, char ** argv) { IplImage *src, *dst_blur, *dst_median, *dst_gaussian; src = cvLoadImage( "lena_salt_5.jpg",0 ); dst_blur = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 );dst_median = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 );dst_gaussian = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 ); cvNamedWindow( "src", 1 ); cvNamedWindow( "blur", 1 ); cvNamedWindow( "median", 1 ); cvNamedWindow( "gaussian", 1 ); cvSmooth(src,dst_blur,CV_BLUR,3,3,0,0);//邻域平均滤波cvSmooth(src,dst_median,CV_MEDIAN,3,3,0,0);//中值滤波 cvSmooth(src,dst_gaussian,CV_GAUSSIAN,3,3,0,0);//高斯滤波 cvShowImage( "src", src ); cvShowImage( "blur", dst_blur ); cvShowImage( "median", dst_median ); cvShowImage( "gaussian", dst_gaussian ); cvWaitKey(0); cvReleaseImage( &src ); cvReleaseImage( &dst_blur );cvReleaseImage( &dst_median );cvReleaseImage( &dst_gaussian ); return 0; }
/*result*/
/***源图像***/
/***领域平均***/
/***中值滤波***/
/***高斯滤波***/
- 图像处理 - 平滑处理(cvSmooth)
- cvSmooth 平滑处理
- opencv学习笔记6 图像平滑处理cvSmooth
- opencv图像平滑滤波处理cvSmooth的汇总
- 图像平滑处理
- 图像平滑处理
- 图像平滑处理
- 图像平滑处理
- 图像平滑处理
- 【opencv】图像平滑处理
- opencv图像平滑处理
- 图像平滑处理
- 彩色图像平滑处理
- opencv图像平滑处理
- 图像平滑处理
- 图像平滑处理对比
- 图像处理:柔化(平滑)处理
- 图像处理之平滑处理
- Android的Application用法
- mapx电子围栏
- Java第一天Hello,world
- unix/linux下线程私有数据实现原理及使用方法
- C#泛型列表List<T>基本用法总结
- 图像处理 - 平滑处理(cvSmooth)
- I/O重定向
- poj2823(Sliding Window+线段树)
- Android之ContentProvider详解
- 得载等号=运算符在什么时候调用
- Linux USB驱动工作流程
- hibernet的缓存和级联
- 关于状态机 一段式 二段式 三段式 (网上资料搜集)
- ubuntu apt 以及 dpkg的使用