模糊原理
- Smooth/Blur(平滑和模糊) 是图像处理中最简单和常用的操作之一
- 使用该操作的原因之一就是为了给图像预处理时候降低噪声 , 把噪声与周围的数值平均一下就可以平滑噪声。
- 使用Smooth/Blur操作背后是数学的卷积计算
- 卷积:通过两个函数f 和g 生成第三个函数的一种数学算子,表征函数f 与g经过翻转和平移的重叠部分的面积。
其中:f()表示一副图像,i、j表示图像的行和列,h(k,l)表示卷积算子(卷积核)(也可以叫掩膜),k l又可以叫窗口大小(掩膜的大小,比如3*3),g()表示输出的像素值;f()的第一行,第一列数据不要,边缘像素怎么处理后续会有介绍- 通常这些卷积算子计算都是线性操作,所以又叫线性滤波
假设有6x6的图像像素点矩阵(灰色) ,黄色3x3是卷积算子
卷积过程:6x6上面有个3x3的窗口,这个3x3的窗口从左向右,从上向下移动
黄色的卷积算子乘以图像对应的像素点后,将得到的像素点值加在一起,取平均值赋给中心红色像素,作为卷积处理后的新的像素值
1. 归一化盒子滤波(均值滤波)
@param src input image; it can have any number of channels, which are processed independently, but
the depth should be CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.
@param dst output image of the same size and type as src.
@param ksize blurring kernel size.
@param anchor anchor point; default value Point(-1,-1) means that the anchor is at the kernel
center.
@param borderType border mode used to extrapolate pixels outside of the image, see #BorderTypes
@sa boxFilter, bilateralFilter, GaussianBlur, medianBlur
void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );
矩阵卷积运算的具体过程
假设有一个卷积核h,就一般为33的矩阵:
有一个待处理矩阵x:
hx的计算过程分为三步
第一步,将卷积核翻转180°,也就是成为了
第二步,将卷积核h的中心对准x的第一个元素,然后对应元素相乘后相加,没有元素的地方补0。
这样结果Y中的第一个元素值Y11=10+20+10+00+01+02±10±25±1*6=-16
第三步每个元素都像这样计算出来就可以得到