【OpenCV C++20 学习笔记】图像平滑基础

理论

平滑(smoothing)或者模糊(blurring)是一个简单常用的图像处理操作。
平滑的作用很多,这里主要介绍如何利用平滑来降低噪音。
平滑操作需要应用滤波。应用最广的滤波类型是线性滤波,其数学公式如下:
g ( i , j ) = ∑ k , l f ( i + k , j + l ) h ( k , l ) g(i,j)=\sum\limits_{k,l}f(i+k,j+l)h(k,l) g(i,j)=k,lf(i+k,j+l)h(k,l)

  • g ( i , j ) g(i,j) g(i,j) i i i j j j列的像素值的滤波结果;
  • h ( k , l ) h(k,l) h(k,l)为核,即一个系数矩阵,决定了对应 i i i j j j列的像素值的加权系数 k k k l l l
  • f ( i + k , j + l ) f(i+k,j+l) f(i+k,j+l) i i i j j j列的像素值的加权结果;

归一化方框滤波

这是所有滤波中最简单的一种。每个像素值的滤波结果都是它在核内的邻近像素值的平均值
归一化方框滤波的核如下:
K = 1 K w i d t h ∗ K h e i g h t [ 1 1 1 . . . 1 1 1 1 . . . 1 . . . . . . 1 . . . . . . 1 1 1 1 . . . 1 ] K=\frac{1}{K_{width}*K_{height}}\begin{bmatrix} 1 & 1 & 1 & ... & 1\\ 1 & 1 & 1 & ... & 1\\ . & . & . & ... & 1\\ . & . & . & ... & 1\\ 1 & 1 & 1 & ... & 1\\ \end{bmatrix} K=KwidthKheight1 11..111..111..1...............11111
核中的所有系数均为1。

高斯滤波

高斯滤波是最有用的滤波。它用一个高斯分布的核对像素值进行卷积,然后把它们都相加。
一维的高斯核是个正态分布,标准正态分布图如下:
高斯分布
对于一维数据来说,落在中间的数将获得最大的权重,然后权重向两边递减。
二维高斯分布的公式如下:
G 0 ( x , y ) = A e − ( x − μ x ) 2 2 σ x 2 − ( y − μ y ) 2 2 σ y 2 G_0(x, y) = Ae^{\frac{-(x-\mu_x)^2}{2\sigma_x^2}\frac{-(y-\mu_y)^2}{2\sigma_y^2}} G0(x,y)=Ae2σx2(xμx)22σy2(yμy)2

  • μ \mu μ为平均数
  • σ 2 \sigma^2 σ2分别为 x x x y y y的方差

中值滤波

中值滤波将图像中的每个像素点都用它邻近像素点的中值替代。

双边滤波

滤波在平滑图片的同时也会模糊图片的边缘。双边滤波能够防止边缘被模糊化。
相比于高斯滤波,双边滤波除了有权重,还有一个表示邻近像素点与目标像素点之间的强度差的成分。
更详细的说明,请参考该论文

代码实现

在OpenCV中,以上集中滤波分别用以下函数实现:

归一化滤波

blur(src,			//原始图片
	dst,			//目标图片
	Size(i, i),		//核的尺寸,宽-高
	Point(-1, -1));	//锚点,即目标点,(-1, -1)则代表核的中心

高斯滤波

GaussianBlur(src,		//原始图片
			dst,		//目标图片
			Size(i, i),	//核的尺寸,必须都是正奇数
			0,			//x的标准差,0代表根据核的尺寸计算x的标准差
			0);			//y的标准差,0代表根据核的尺寸计算y的标准差

中值滤波

medianBlur(src,		//原始图片
			dst,	//目标图片
			i);		//核的尺寸,所以核的宽和高必须相等

双边滤波

bilateralFilter(src,	//原始图片
				dst,	//目标图片
				i, 		//核的尺寸,所以核的宽高必须相等
				i*2,	//颜色的标准差
				i/2);	//坐标的标准差
  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值