平滑处理
平滑处理,也称模糊处理-blurring
用途是减少图像上的噪声或者失真
openCV平滑函数
void cvSmooth(
const CvArr* src,
CvArr* dst,
int smooth = CV_GAUSSIAN,
int param1 = 3,
int param2 = 0,
int param3 = 0,
int param4 = 0
);
void cvSmooth( const CvArr* src, CvArr* dst, int smooth = CV_GAUSSIAN, int param1 = 3, int param2 = 0, int param3 = 0, int param4 = 0 );
注解:
(1)可能大家啊对CvArr的理解不是很深刻,可以将其看做C++中的基类,当然也包括IplImage
(2)smooth支持的类型:
CV_BLUR 简单模糊 对每个像素param1,param2求和,并缩放1/(param1*param2),亦即求简单平均值
所以也称均值模糊
CV_BLUR_NO_SCALE 简单无缩放变化的模糊 对每个像素param1,param2求和 特别说明的是输入图像和结果图像必须有不同的数值精度,以保证不会发生
溢出,如果源图像是8u,则结果图像必须是16s或者32s
CV_MEDIAN 中值模糊 取中心像素的正方形领域类的每个像素的值用中间值代替
CV_GAUSSIAN 高斯模糊 param3为零时,高斯卷积核sigma通过以下公式计算
sigma(x) = (n(x)/2-1)*0.30+0.80,n(x)= param1
sigma(y) = (n(y)/2-1)*0.30+0.80,n(y)= param2
如果第四个参数指定,则第三个和第四个参数分别表示sigma的水平方向和垂直方向的值
如果第三个,第四个参数已经指定,而前两个参数为0,那么窗口的尺寸由sigma确定
速度较慢但最有效
CV_BILATERAL 双向滤波 因为高斯模糊是在图像在空间内的像素是缓慢变化的,但随机的两个点可能形成很大的
像素差,高斯滤波在保留信号的条件下减少噪声,但在接近边缘的地方无效,双向滤波可以解决这个问题,但需要更多的时间代价,
其需要两个参数,param1表示空域中所使用的高斯核的宽度,param2表示颜色域高斯核的高度
平滑处理可以在空间域或者频率域进行
在空间域中,最常用的就是均值滤波和中值滤波
前两种可以概括为均值滤波
概述
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身)。再用模板中的全体像素的平均值来代替原来像素值。
均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度个g(x,y),即个g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。
不足之处
均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
中值滤波含义比较明显
高斯滤波
高斯滤波实质上是一种信号的滤波器,其用途是信号的平滑处理,我们知道数字图像用于后期应用,其噪声是最大的问题,由于误差会累计传递等原因,很多 图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。于此相关的有Gauss-Lapplace变换,其 实就是为了得到较好的图像边缘,先对图像做Gauss平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积=>空 域卷积。
滤波器就是建立的一个数学模型,通过这个模型来将图像数据进行能量转化,能量低的就排除掉,噪声就是属于低能量部分
其实编程运算的话就是一个模板运算,拿图像的八连通区域来说,中间点的像素值就等于八连通区的像素值的均值,这样达到平滑的效果
若使用理想滤波器,会在图像中产生振铃现象。采用高斯滤波器的话,系统函数是平滑的,避免了振铃现象
双边滤波器
主要是针对高斯模糊滤波来说的,处理后的效果比单纯的用高斯模糊要好。
在图像的低对比度区域,也就是图像平滑区域,像素间的相关性较强,在图像的高对比度区域,edge区域,像素间的相关性比较弱,双边滤波器同时考虑邻域像素与中心像素间的几何距离度量和像素间灰度相似度度量,这两个度量均用高斯核函数。对领域中距离近并且灰度相似的像素赋予较大的权值,否则,则赋予较小的权值。正是这种双重异性加权机制(距离各式异性与灰度各向异性)保证了双边滤波器的图像边缘保持平滑。
数学原理如下图中所示:
其中G为高斯函数.
当前像素点在做平滑处理的时候,对周围像素点分配的权值跟距离和灰度相关,而传统的方法只跟距离有关,不难想象,传统的高斯平滑会破坏图像中的edge。而双边滤波器也考虑了像素间的灰度差,所以即可以达到平滑denoise的目的,同时也很好的保护edge不被破坏,以保持图像的清晰度。
。